《Android系统学习》第四章:分析Android系统编译过程
来源:互联网 发布:淘宝联盟二维码分享 编辑:程序博客网 时间:2024/05/13 20:06
以下是加载命令和选择平台编译选项,也就是设置编译环境变量。
一、/build/envsetup.sh之初始化......add_lunch_combo full-engadd_lunch_combo full_x86-engadd_lunch_combo vbox_x86-eng#模拟器......# Execute the contents of any vendorsetup.sh files we can find.for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/*/vendorsetup.sh device/*/*/vendorsetup.sh 2> /dev/null`do echo "including $f" . $fdoneunset f#遍历/vendor/*/vendorsetup.sh、/vendor/*/*/vendorsetup.sh和/device/*/*/vendorsetup.sh文件;#eg:/device/tank/tanka3/vendorsetup.sh add_lunch_combo full_tanka3-userdebug
二、/build/envsetup.sh之add_lunch_combo命令
function add_lunch_combo(){ local new_combo=$1 local c for c in ${LUNCH_MENU_CHOICES[@]} ; do if [ "$new_combo" = "$c" ] ; then return fi done LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)}三、/build/envsetup.sh之lunch命令
function lunch(){ ...... check_product $product#从上处剥离$product == full_tanka3 ......}function check_product(){ ...... CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ TARGET_PRODUCT=$1 \ TARGET_BUILD_VARIANT= \ TARGET_BUILD_TYPE= \ TARGET_BUILD_APPS= \ get_build_var TARGET_DEVICE > /dev/null ......}function get_build_var(){ ...... CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ make --no-print-directory -C "$T" -f build/core/config.mk dumpvar-$1}
四、/build/core/config.mk
......include $(BUILD_SYSTEM)/envsetup.mk......board_config_mk := \ $(strip $(wildcard \ $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \ device/*/$(TARGET_DEVICE)/BoardConfig.mk \ vendor/*/$(TARGET_DEVICE)/BoardConfig.mk \ ))#查找/device/tank/tanka3/BoardConfig.mk #模拟器查找/build/target/board/emulator/BoardConfig.mk......
五、/build/core/envsetup.mk
......include $(BUILD_SYSTEM)/product_config.mk......ifeq ($(TARGET_ARCH),)TARGET_ARCH := armendif......
六、/build/core/product_config.mk
......include $(BUILD_SYSTEM)/product.mk......
七、/build/core/product.mk
......define _find-android-products-files$(shell test -d device && find device -maxdepth 6 -name AndroidProducts.mk) \ $(shell test -d vendor && find vendor -maxdepth 6 -name AndroidProducts.mk) \ $(SRC_TARGET_DIR)/product/AndroidProducts.mkendef......#查找/device/tank/tanka3/AndroidProducts.mk#模拟器查找/build/target/product/AndroidProducts.mk
以上执行完后,后设置如下环境变量:
PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=4.0.3TARGET_PRODUCT=full_tanka3TARGET_BUILD_VARIANT=userdebugTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_ARCH_VARIANT=armv7-a-neonHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=IML74K====================================================================================================================================
以下是真正开始编译:
一、/Makefile
include build/core/main.mk
二、/build/core/main.mk
......include $(BUILD_SYSTEM)/config.mk......
三、/build/core/config.mk
后边与上面《四-七》一一对应。==============================================================================================================================
定制自己厂商目录:
一、mkdir /device/tank
二、mkdir /device/tank/tanka3
三、cd /device/tank/tanka3
touch vendorsetup.sh touch BoardConfig.mk touch AndroidProducts.mk //包含full_tanka3.mk touch full_tanka3.mk //包含device.mk touch device.mk
====================================================================================================================================
补充:
在BoardConfig.mk文件中可以设置对象CPU架构、类型以及交叉编译工具链路径,如:
TARGET_ARCH=mips#架构,若不设置、由/build/core/envsetup.mk默认设置arm TARGET_ARCH_VARIANT := mips32r2-fp#核类型,若不设置、由/build/core/combo/TARGET_linux-arm.mk默认设置armv5te TARGET_ARCH_VERSION=mips32 TARGET_TOOLS_PREFIX :=#交叉编译工具链,若不设置、由build/core/combo/TARGET_linux-arm.mk默认设置#TARGET_TOOLS_PREFIX := prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.3/bin/arm-
其他主要文件或目录:
build/core/combo/TARGET_linux-arm.mk
//决定arm架构的具体类型(如果TARGET_ARCH_VARIANT未定义)以及交叉编译工具链路径
......ifeq ($(strip $(TARGET_ARCH_VARIANT)),)TARGET_ARCH_VARIANT := armv5teendif......ifeq ($(strip $(TARGET_TOOLS_PREFIX)),)TARGET_TOOLS_PREFIX := prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.3/bin/arm-eabi-endif......
build/core/combo/arch/arm/
bionic/libc/arch-arm/
bionic/libm/Android.mk
bionic/linker/Android.mk
arm架构交叉编译工具链路径:
prebuilt/ndk/android-ndk-r4/platforms/android-8/arch-arm/
- 《Android系统学习》第四章:分析Android系统编译过程
- Android系统学习:分析Android系统编译过程
- Android系统编译过程分析
- Android系统编译过程分析
- Android系统编译过程分析
- Android系统编译过程分析
- Android系统编译过程分析
- Android系统编译过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- Android编译系统环境初始化过程分析
- haXe入门
- 有关自定义控件(继承于uivew)触摸事件处理的感想
- Codeforces Round #142 (Div. 1) C. Triangles
- 淘宝技术发展
- JAVA.SWT/JFace: SWT Drag and Drop
- 《Android系统学习》第四章:分析Android系统编译过程
- 取消隐藏ios键盘的方法
- Windows7在Notepad++中配置Python+OpenCV
- [LeetCode]Convert Sorted List to Binary Search Tree
- c# asp.net常见问题收集之二
- CSS布局之文档流、块级元素与内联元素
- Android系统下检测网卡与网线连通状态
- C++学习随笔之(三)类和对象
- IOCP