在build.sh中调用source buid/envsetup.sh
source buid/envsetup.sh向当前shell会话中注册一些shell函数为命令
然后再调用注册的lunch函数来配置编译配置
在lunch中使用build/core/config.mk来生成部分编译脚本
在build/core/config.mk指定整体编译中使用的头文件目录、链接库目录及特定工具路径SRC_DROIDDOC_DIR 并包含了build/core/pathmap.mk建立硬件映射。调用了dumpvar.mk,就是打印某个变量的makefile。
Makefile -> build/core/main.mk -> build/core/config.mk -> build/core/envsetup.mk -> build/core/product_config.mk
在build/core/product_config.mk 中编译系统首先调用 build/core/product.mk中定义的函数get-all-product-makefiles ,来遍历整个vendor 的子目录, 找到vendor下所有的 AndroidProducts.mk, 不同子目录下的AndroidProducts.mk 中定义了不同的 PRODUCT_NAME, PRODUCT_DEVICE 等信息,(我们也可以通过 打开build/core/product_config.mk 中的#$(dump-products) 语句使控制台编译的时候输出所有product 的信息) , 接着build/core/product_config.mk 会调用resolve-short-product-name 将TARGET_PRODUCT匹配的AndroidProducts.mk 中定义的 PRODUCT_DEVICE 赋值给TARGET_DEVICE。envsetup.mk文件主要包含了product_config.mk文件,然后指定了编译时要输出的所有文件的OUT目录
定义自己的产品编译项
1 添加vendorsetup.sh,此脚本应该能够在build/envsetup.sh中能够调用。
2 添加TARGET_DEVICE目录,并在此目录中创建BoardConfig.mk. 此文件在./build/core/envsetup.mk中会自动加载. 其后BoardConfig.mk所在的路径也就是TARGET_DEVICE_DIR也就是TARGET_DEVICE目录。
3 在TARGET_DEVICE目录,并在此目录中创建AndroidBoard.mk。此文件会在./build/target/board/Android.mk中包含。
Android平台Overlay机制
Android overlay 机制允许在不修改packages中apk的情况下,来自定义 framework和package中的资源文件,实现资源的定制。来达到显示不同的UI得目的(如MIUI)。
两种,PRODUCT_PACKAGE_OVERLAYS 将覆盖 DEVICE_PACKAGE_OVERLAYS 中的同一资源
Android——编译体系中的【PRODUCT_COPY_FILES】【ALL_PREBUILT】【BUILD_PREBUILT】
andriod系统层进行开发,或者进行移植时,时常需要添加文件到编译体系中,在最终的编译中复制到out中,最后打包成镜像。其中有部分是没有源码的pre-build第三方库和程序,这些在打包时要使用到PRODUCT_COPY_FILES、ALL_PREBUILT、BUILD_PREBUILT进行复制。
参考资料:
http://www.ithtw.com/thread-1548.htm
https://zhidao.baidu.com/question/1429962904571074139.html
https://www.cnblogs.com/pokerface/p/5754008.html
http://www.cnblogs.com/mr-raptor/archive/2012/06/08/2541571.html
http://blog.csdn.net/wh_19910525/article/details/39254815
http://blog.csdn.net/mr_raptor/article/details/30113417 //Android系统定制
http://blog.csdn.net/mr_raptor/article/details/30113417
http://blog.csdn.net/wh_19910525/article/details/7519919 //深入分析Android (build/core/*.mk脚本)