Android编译

作者: JJwhite | 来源:发表于2017-10-16 16:42 被阅读0次

            刚刚大学毕业,正式开始了自己的第一份工作------Android开发工程师,也是一段新的学习之旅的开始,真心觉得有必要记录一下自己的所学。工作伊始,第一项任务就是Android系统的编译,(理科生,文学功底有限,尽量说明白^_^)。

    一、Android编译系统

            Android编译系统是Android源码的一部分,用于编译Android系统、SDK以及相关Android文档,包括Make文件、shell以及Python脚本组成,其中Make文件起主要作用

    1.Make文件:

              系统核心的Make文件:定义了Build系统的框架,文件全部位于路径/build/core,其他Make文件都是基于该框架编写的;

              针对产品的Make文件:定义了具体某个型号手机的Make文件,文件路径位于/device,该目录下往往又以公司名和产品名划分两个子级目录,比如/device/qcom/msm8916;

               针对模块的Make文件:整个系统分为各个独立的模块,每个模块都一个专门的Make文件,名称统一为”Android.mk”,该文件定义了当前模块的编译方式。Build系统会扫描整个源码树中名为”Android.mk”的问题,并执行相应模块的编译工作。

    2.编译结果:

                Android编译完成后,所有生成的文件都被放置在/out/目录下,一般包括host文件夹与target文件夹,具体内容自行参看。

    3.Android.mk文件解析

                Android源码将每个模块以单独文件夹的方式组织,在对应的模块文件夹下都包含一个Android.mk文件,那么Android.mk文件到底是什么呢?

             一般mk文件中都包含以下两行:

                      LOCAL_PATH := $(call my-dir)//设置当编译路径为当前文件夹所在路径

                      include $(CLEAR_VARS)//清空编译环境的变量(由其他模块设置过的变量)

    同时,在mk文件中还设置了一系列的编译时使用的环境变量:

                    LOCAL_SRC_FILES:当前模块包含的所有源码文件;

                    LOCAL_MODULE:当前模块的名称(具有唯一性);

                    LOCAL_PACKAGE_NAME:当前APK应用的名称(具有唯一性);

                    LOCAL_C_INCLUDES:C/C++所需的头文件路径;

                    LOCAL_STATIC_LIBRARIES:当前模块在静态链接时需要的库名;

                    LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库名;

                    LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的Java静态库;

                    LOCAL_JAVA_LIBRARIES:当前模块依赖的Java共享库;

                    LOCAL_CERTIFICATE:签署当前应用的证书名称,比如platform。

                    LOCAL_MODULE_TAGS:当前模块所包含的标签,可以包含多标签,可能值为debgu,eng,user,development 或 optional(默认值)

    4.编译步骤

    1.执行source /build/envsetup.sh脚本,进行编译环境的预先设置(执行该文件后,一些build命令才可以使用)。

    2.常用命令:

               make:用于完整的Android源码的编译

               m:用于从Android的根目录开始编译

               mm:用于当前路径下所有模块的编译

               mmm:用于Android单独一个模块的编译,常跟-B参数进行强制编译

               make clean :清楚上一次编译产生的文件,避免对下一次编译造成影响

    相关文章

      网友评论

        本文标题:Android编译

        本文链接:https://www.haomeiwen.com/subject/lhakuxtx.html