思想原则
- 研究Android编译系统之前,需要了解Linux系统的Make命令。Make命令在执行的时候,默认在当前目录找到一个Makefile文件,Make命令执行的是Makefile文件中的指令。Makefile文件中的指令可以是编译命令,也可以是其它命令。
- 此处不选择Shell而选择Make是因为Make可以帮助我们处理好编译系统中典型的文件依赖需求关系。
- 整个编译工程只有一个Makefile
编译命令
编译步骤:
1. source build/envsetup.sh
2. lunch
3. make
4. 单独编译(全编之后,代码修改后可使用单独编译,提高开发速度)
5. 结果验证
1. source build/envsetup.sh
执行build/envsetup.sh,加载了编译时使用到的函数命令,同时添加了编译选项。
2. lunch
执行lunch命令后,打印出选择菜单,列出可用的编译选项,定义项目和编译过程中用到的全局变量。
lunch <product_name>-<build_variant>
例如:选择构建Nexus 5X的命令将是:
lunch aosp_bullhead-userdebug
在make命令后加上-j+数字来加快编译速度,-j后面的数字代表多线程个数,线程个数建议设置为编译服务器CPU核的个数乘以2,例如编译服务器CPU核的个数为2,多线程编译make命令为
3. make
执行make命令对整个android源码进行编译,执行当前目录下的Makefile文件
make -j4
不过线程越多,编译错误出现的概率越大。
编译的结果会生成在out目录下
4. 单独编译(全编之后,代码修改后可使用单独编译,提高开发速度)
单独编译可以有镜像或模块的单独编译
对镜像进行单独编译
例:
make bootloader
编译结果是:生成fdl2-sign.bin、u-boot-sign.bin、u-bootautopoweron-sign.bin。
对特定模块(module)进行单独编译
例:
在根目录下 mmm 模块路径
mmm packages/apps/Settings/
5. 结果验证
- adb push 验证
如验证qapp应用:
adb rootadb remount
adb push xxx/Qapp.apk product/priv-app/Settings
adb push xxx/oat/arm64(arm)/Qapp.vdex product /priv-app/Qapp/oat/arm64(arm)
adb push xxx/oat/arm64(arm)/Qapp.odex product /priv-app/Qapp/oat/arm64(arm)
adb reboot
- 镜像下载验证
刷机工具使用编译生成的新镜像文件替换旧镜像文件,下载到手机验证(这里刷机如果不成功除了考虑手机连接问题外也要确定驱动是安装可运行的)