Android编译流程

本文是自己整理和理解的Android编译流程,特此做记录。

编译指令

1
2
3
#source build/envsetup.sh
#lunch <buildName-buildType>
#make 2>&1 | tee build-log.txt

source build/envsetup.sh

这个命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去。
envsetup.sh中会定义一系列命令,当执行该脚本之后,首先会去include device/xxxx/xxxx/vendorsetup.sh的文件。
vendorsetup.sh会将product的信息比如(xxx-yyy)通过调用函数add_lunch_combo()写入到LUNCH_MENU_CHOICES[]数组中。
最后可以直接在shell下就可以敲入envsetup.sh中的某个命令并执行。比如说#lunch,就会执行function lunch()的内容打印可以编译的product选项:


lunch xxx-yyy

xxx标记Product的信息,对应于 TARGET_PRODUCT
yyy标记编译类型,对应于TARGET_BUILD_VARIANT,比如:

  • eng: 工程机,
  • user:最终用户机
  • userdebug:调试测试机
  • tests:测试机
    编译类型

lunch的最后会导出全局的环境变量以及执行其他的一些操作,如下:

环境变量

make -j4

这之后就是调用各个目录下的Makefile进行编译。


编译生成的文件

生成的文件在 out/target/product/<buildName>/ 目录下:

  • root/ :根文件系统,包括init、init.rc,挂载在 / 目录下;
  • system/ : Android 系统的二进制和库文件,挂载在 /system 目录下;
  • Data/ : Android 的data分区,挂载在 /data 目录下;
  • Recovery/ : 进入recovery模式下的根文件系统;
  • ramdisk.img: 由 root/. 直接生成,不直接使用;
  • system.img: 由system/ 生成EXT4的image,可以被programmed进去SD/eMMC的SYSTEM分区,使用dd命令;
  • recovery.img:由recovery/ 生成EXT4的image,可以被programmed进去SD/eMMC的RECOVERY分区,使用dd命令;

参考文章

http://blog.csdn.net/mr_raptor/article/details/7539978
http://blog.csdn.net/mr_raptor/article/details/7540066
http://blog.csdn.net/mr_raptor/article/details/7540730
http://gityuan.com/2016/03/19/android-build/
https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/

Title:Android编译流程

Author:Victor Huang

Time:2019-06-08 / 13:06

Link:http://wowothink.com/21f93ebf/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)