编译指令
1 |
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/