Android源码编译指定模块的三种方法

    xiaoxiao2021-12-14  18

    实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。Android的编译系统提供了强大的机制支持单独模块的编译,而且十分简单。Android提供三种方式用于编译单独模块:

    1make 模块名

    这种方法适合第一次编译,会把依赖模块一并编译。它需要在全部源代码中找到编译模块的Android.mk文件,并检查依赖模块是否有修改,因此编译时间较长。使用这种方法,我们只需要搜索源码目录下的Android.mk文件,找到模块名,然后指定给make即可。

    1)编译应用层源码

    对于应用层程序,需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。

    例如,要编译Phone应用程序的源码,先查看PhoneAndroid.mk文件,在终端中运行以下命令:

    $ cat packages/apps/Phone/Android.mk 

    显示Android.mk的内容如下:

    ……(省略部分内容)  

    LOCAL_PATH:= $(call my-dir)  

    include $(CLEAR_VARS)  

    LOCAL_MODULE := com.android.phone.common  

    ……(省略部分内容)  

    LOCAL_PACKAGE_NAME := Phone 

    ……(省略部分内容) 

    找到LOCAL_PACKAGE_NAME字段,其值便是我们需要得到的编译参数,即Phone。得到编译参数后,在终端中运行如下命令便可单独编译Phone模块及其依赖模块:

    $make Phone 

    2)编译框架层和系统运行库源码

    对于框架层和系统运行库,需要查看LOCAL_MODULE变量。

    frameworks包中的源码为例,在终端中运行以下命令:

    $ find  frameworks -name Android.mk 

    该命令将搜索frameworks目录下所有的Android.mk文件,列表如下:

    frameworks/media/libvideoeditor/lvpp/Android.mk  

    frameworks/media/libvideoeditor/osal/src/Android.mk  

    frameworks/base/cmds/app_process/Android.mk  

    ……(省略其他部分) 

    app_process为例,在终端中运行以下命令:

    $ cat    frameworks/base/cmds/app_process/Android.mk  

    显示Android.mk的内容如下:

    LOCAL_PATH:= $(call my-dir)  

    include $(CLEAR_VARS)  

    LOCAL_MODULE:= app_process 

    include $(BUILD_EXECUTABLE) 

    LOCAL_MODULE变量的值便是我们要找的模块名。在终端中运行以下命令:

    $make app_process 

    2mmm命令

    用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:

    $mmm packages/apps/phone 

    3mm命令

    用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:

    $cd packages/apps/phone  

    $mm 

    注:mmmmm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm  -B

    转载请注明原文地址: https://ju.6miu.com/read-965715.html

    最新回复(0)