Android编译大全(五)

摘要:
2.模块组织类等文件主要定义如何处理Android。mk以及如何生成目标模块。这些模块生成规则在configMk.2中定义。单个模块编译类本地模块的Makefile文件是我们在Androidmk中几乎随处可见的Android分析完Makeinclude的所有文件后,将找到droid生成的规则,并依次生成其依赖项,直到编译完所有满足的模块,然后使用相应的工具将它们打包到相应的img中。

6.1.2.make文件分类
2  配置类

主要用来配置product、board,以及根据你的Host和Target选择相应的工具以及设定相应的通用编译选项:

config文件

说明

build/core/config.mk

Config文件的概括性配置

build/core/envsetup.mk

generate目录构成等配置

build/target/product

产品相关的配置

build/target/board

硬件相关的配置

build/core/combo

编译选项配置

这里解释下这里的board和product。board主要是设计到硬件芯片的配置,比如是否提供硬件的某些功能,比如说GPU等等,或者芯片支持浮点运算等等。product是指针对当前的芯片配置定义你将要生产产品的个性配置,主要是指APK方面的配置,哪些APK会包含在哪个product中,哪些APK在当前product中是不提供的。

config.mk是一个总括性的东西,它里面定义了各种module编译所需要使用的HOST工具以及如何来编译各种模块,比如说 BUILT_PREBUILT就定义了如何来编译预编译模块。envsetup.mk主要会读取由envsetup.sh写入环境变量中的一些变量来配置编译过程中的输出目录,combo里面主要定义了各种Host和Target结合的编译器和编译选项。

2  模块组织类

这类文件主要定义了如何来处理Module的Android.mk,以及采用何种方式来生成目标模块,这些模块生成规则都定义在config.mk里面。我们可以看看:

CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk

BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk

BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk

      BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk

      BUILD_RAW_STATIC_LIBRARY :=$(BUILD_SYSTEM)/raw_static_library.mk

      BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk

      BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk

      BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk

      BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk

      BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk

      BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk

      BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk

      BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk

      BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk

      BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk

      BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk

      BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk

      BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk

      BUILD_KEY_CHAR_MAP :=$(BUILD_SYSTEM)/key_char_map.mk    

除了CLEAR_VARS是清楚本地变量之外,其他所有的都对应了一种模块的生成规则,每一个本地模块最后都会include其中的一种来生成目标模块。大部分上面的.mk都会包含base_rules.mk,这是对模块进行处理的基础文件,建议要写本地模块的都去看看,看明白了为什么 Android.mk要这么写就会大致明白了。

2  单个模块编译类

本地模块的Makefile文件就是我们在Android里面几乎上随处可见的Android.mk。Android进行编译的时候会通过下面的函数来遍历所有子目录中的Android.mk,一旦找到就不会再往层子目录继续寻找(所有你的模块定义的顶层Android.mk必须包含自己定义的子目录中的 Android.mk)。

  subdir_makefiles += \

         $(shellbuild/tools/findleaves.sh –prune=”./out” $(subdirs) Android.mk)

不同类型的本地模块具有不同的语法,但基本上是相通的,只有个别变量的不同,如何添加模块在前面的帖子已经说过了,大家可以参考。

Android通过LOCAL_MODULE_TAGS来决定哪些本地模块会不会编译进系统,通过PRODUCT和LOCAL_MODULE_TAGS来决定哪些应用包会编译进系统,如果用户不指定LOCAL_MODULE_TAGS,默认它的值是user。此外用户可以通过buildspec.mk来指定你需要编译进系统的模块。用户也可以通过mm来编译指定模块,或者通过make clean-module_name来删除指定模块。

2  系统生成类

这主要指的是build/core/Makefile这个文件,它定义了生成各种img的方式,包括ramdisk.img  userdata.img system.img  update.zip  recover.img等。我们可以看看这些img都是如何生成的,对应着我们常用的几个make goals。

在实际的过程中,我们也可以自己编辑out目录下的生成文件,然后手工打包相应生成

相应的img,最常用的是加入一些需要集成进的prebuilt file。所有的Makefile都通过build/core/main.mk这个文件组织在一起,它定义了一个默认goals:droid,当我们在TOP目录下敲Make实际上就等同于我们执行make droid。当Make include所有的文件,完成对所有make文件的解析以后就会寻找生成droid的规则,依次生成它的依赖,直到所有满足的模块被编译好,然后使用相应的工具打包成相应的img。

免责声明:文章转载自《Android编译大全(五)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇css3画图那些事(三角形、圆形、梯形等)Elastic Search Nest研究(二)--增删改查入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【idea】用IDEA把自己的工具类打jar包,并引入到springboot项目中

步骤如下: 1、点击 File ——  Project Structure —— Artifacts —— 绿色+号 —— JAR —— Empty 2、输入jar包的名字,自定义jar包生成的目录,勾上'Include in project build' 3、点击绿色+号 —— Directory Content 4、选择编译好的class文件,记...

Django配置站点

一 修改hosts文件 """ hosts文件涉及的dns解析 1.找到hosts文件 windows: C:WindowsSystem32driversetchosts mac|linux:/etc/hosts 2.在host文件中新增下面两句话,文件修改权限自己解决 127.0.0.1 www.luffy.cn 127.0.0.1 ap...

关于ASP.NET中独立页面设置身份认证等问题

大家都知道通过以下的方法实现对所有页面的身份认证要求:<authentication mode="Forms"><forms name=".OnLineWork" loginUrl="logoin.aspx" protection="All" timeout="60" /></authentication><aut...

RK3399配置笔记

1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0然后执行make bootimage重新生成 2.默认启用USB连接 在device/ro...

浅谈 qmake 之 pro、pri、prf、prl文件

尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmake内置变量和函数不超过20个 看Qt Creator源码或者QtSolution等库中自己使用的 *.pro 文件就想看天书一样 本文只能抓住一条线,简单介绍...

host头攻击

一、问题源起   HTTP1.1规范中在增加了HOST头信息,用于存储服务端与客户端的路由信息。   例如:     Request的Header里就有一个标名请求,它是用来记录服务端网站域名的。     如果前端或者后台正好用到这个值,比如jsp的       String basePath = request.getScheme()+"://"+req...