zoukankan      html  css  js  c++  java
  • android编译系统分析(四)实战:新增一个产品


    http://blog.csdn.net/u011913612/article/details/52434445


    通过上一节“android编译系统(三)-make”的分析,初步理清楚了编译初期加载产品相关信息的流程,整个过程主要涉及三个文件:1.AndroidProducts.mk,2.具体产品的配置文件,3.BoardConfig.mk,加上lunch需要的vendorsetup.sh文件,总共只需要四个文件就可以了,所以我们不妨成热打铁,赶紧尝试下如何新增一个产品。因此,android编译系统镜像文件的创建过程方到下一节。

    一.文件创建

    在device下创建如下目录:
    cat
    --fish
            就是说我们的公司是cat,我们的产品fish。然后在fish下创建四个文件:

    1.1vendorsetup.sh

    这个文件内容如下:
    1. add_lunch_combo fish-eng  
    当我们执行source build/envsetup.sh的时候,就会找到我们的这个文件,lunch的时候就会在菜单中显示我们的产品。具体这个文件的加载过程可以参考《android编译系统分析一<source build/envsetup.sh与lunch>》。

    1.2AndroidProducts.mk

    1. PRODUCT_MAKEFILES :=   
    2.     $(LOCAL_DIR)/fish.mk  
    也是只有一行,就是指明产品的配置文件是哪个。这个脚本会在执行make后,product_config.mk下通过查找命令找到,找到后就会加载进来。

    1.3fish.mk

    1. $(call inherit-product, device/generic/armv7-a-neon/mini_common.mk)  
    2.   
    3. PRODUCT_NAME := fish  
    4. PRODUCT_DEVICE := fish  
    5. PRODUCT_BRAND := Android  
    这个脚本在加载完AndroidProducts.mk后就会被加载,用来配置产品名称等信息。因为它继承了mini_common.mk,所以我们只需要配置几个有差异的变量即可。

    1.4BoardConfig.mk

    1. TARGET_NO_BOOTLOADER := true  
    2. TARGET_NO_KERNEL := true  
    3.   
    4. TARGET_ARCH := x86  
    5. TARGET_CPU_ABI := x86  
    6.   
    7. SMALLER_FONT_FOOTPRINT := true  
    8. MINIMAL_FONT_FOOTPRINT := true  
    9. # Some framework code requires this to enable BT  
    10. BOARD_HAVE_BLUETOOTH := true  
    11. BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/generic/common/bluetooth  
    12.   
    13. # Build OpenGLES emulation libraries  
    14. BUILD_EMULATOR_OPENGL := true  
    15. BUILD_EMULATOR_OPENGL_DRIVER := true  
    16. USE_OPENGL_RENDERER := true  
    17.   
    18. BOARD_USE_LEGACY_UI := true  
    19.   
    20. # share the same one across all mini-emulators  
    21. BOARD_EGL_CFG := device/generic/goldfish/opengl/system/egl/egl.cfg  
    22.   
    23. # PDK does not use ext4 image, but it is added here to prevent build break.  
    24. TARGET_USERIMAGES_USE_EXT4 := true  
    25. BOARD_SYSTEMIMAGE_PARTITION_SIZE := 576716800  
    26. BOARD_USERDATAIMAGE_PARTITION_SIZE := 419430400  
    27. BOARD_CACHEIMAGE_PARTITION_SIZE := 69206016  
    28. BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4  
    29. BOARD_FLASH_BLOCK_SIZE := 512  
    30. TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true  
    这个脚本参考了device/generic/x86/BoardConfig.mk,基本不用修改。这样,新增一个产品所需的四个文件都配置好了。以上三个文件具体加载流程可参考《android编译系统分析(三)-make》。

    二.尝试编译

    首先source build/envsetup.sh,然后执行lunch :
    菜单输出如下:
    1. Lunch menu... pick a combo:  
    2.      1. aosp_arm-eng  
    3.      2. aosp_arm64-eng  
    4.      3. aosp_mips-eng  
    5.      4. aosp_mips64-eng  
    6.      5. aosp_x86-eng  
    7.      6. aosp_x86_64-eng  
    8.      7. fish-eng  
    9.      8. mini_emulator_arm64-userdebug  
    10.      9. m_e_arm-userdebug  
    11.      10. mini_emulator_mips-userdebug  
    12.      11. mini_emulator_x86_64-userdebug  
    13.      12. mini_emulator_x86-userdebug  
    可以看到我们的产品已经出现,这里选择7:
    1. Which would you like? [aosp_arm-eng] 7  
    2.   
    3. ============================================  
    4. PLATFORM_VERSION_CODENAME=REL  
    5. PLATFORM_VERSION=6.0  
    6. TARGET_PRODUCT=fish  
    7. TARGET_BUILD_VARIANT=eng  
    8. TARGET_BUILD_TYPE=release  
    9. TARGET_BUILD_APPS=  
    10. TARGET_ARCH=x86  
    11. TARGET_ARCH_VARIANT=x86  
    12. TARGET_CPU_VARIANT=  
    13. TARGET_2ND_ARCH=  
    14. TARGET_2ND_ARCH_VARIANT=  
    15. TARGET_2ND_CPU_VARIANT=  
    16. HOST_ARCH=x86_64  
    17. HOST_OS=linux  
    18. HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty  
    19. HOST_BUILD_TYPE=release  
    20. BUILD_ID=MRA58K  
    21. OUT_DIR=out  
    22. ============================================  

    可以看到打印出了配置信息,TARGET_PRODUCT=fish,TARGET_BUILD_TYPE=eng等。
    最后尝试编译,首先make clean,然后再make
    编译结束后在out下生成对应产品的文件:


    这只是一个简单的尝试,更加复杂的产品定制期待与大家共同探讨。

  • 相关阅读:
    软件测试七年之痒,依然热爱!我还是从前那个少年!
    我想从功能测试转向自动化测试,怎么办?
    python中的一些内置函数
    python中eval()
    集合
    列表的切片:取出来还是一个列表,可用在复制列表元素的操作
    字符串常用的方法
    dict字典,以及字典的一些基本应用
    list列表(也叫数组),以及常用的一些方法
    jsonpath的用法
  • 原文地址:https://www.cnblogs.com/ztguang/p/12645310.html
Copyright © 2011-2022 走看看