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

    copy from :  https://blog.csdn.net/u011913612/article/details/52434445

    Android编译系统分析系列文章:

    android编译系统分析一<source build/envsetup.sh与lunch>
    Android编译系统<二>-mm编译单个模块
    android编译系统分析(三)-make
    android编译系统(四)-实战:新增一个产品
    Android编译系统分析(五)-system.img的生成过程

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

    1.1vendorsetup.sh
    这个文件内容如下:
    add_lunch_combo fish-eng
    当我们执行source build/envsetup.sh的时候,就会找到我们的这个文件,lunch的时候就会在菜单中显示我们的产品。具体这个文件的加载过程可以参考《android编译系统分析一<source build/envsetup.sh与lunch>》。
    1.2AndroidProducts.mk
    PRODUCT_MAKEFILES :=
    $(LOCAL_DIR)/fish.mk
    也是只有一行,就是指明产品的配置文件是哪个。这个脚本会在执行make后,product_config.mk下通过查找命令找到,找到后就会加载进来。
    1.3fish.mk
    $(call inherit-product, device/generic/armv7-a-neon/mini_common.mk)

    PRODUCT_NAME := fish
    PRODUCT_DEVICE := fish
    PRODUCT_BRAND := Android
    这个脚本在加载完AndroidProducts.mk后就会被加载,用来配置产品名称等信息。因为它继承了mini_common.mk,所以我们只需要配置几个有差异的变量即可。
    1.4BoardConfig.mk
    TARGET_NO_BOOTLOADER := true
    TARGET_NO_KERNEL := true

    TARGET_ARCH := x86
    TARGET_CPU_ABI := x86

    SMALLER_FONT_FOOTPRINT := true
    MINIMAL_FONT_FOOTPRINT := true
    # Some framework code requires this to enable BT
    BOARD_HAVE_BLUETOOTH := true
    BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/generic/common/bluetooth

    # Build OpenGLES emulation libraries
    BUILD_EMULATOR_OPENGL := true
    BUILD_EMULATOR_OPENGL_DRIVER := true
    USE_OPENGL_RENDERER := true

    BOARD_USE_LEGACY_UI := true

    # share the same one across all mini-emulators
    BOARD_EGL_CFG := device/generic/goldfish/opengl/system/egl/egl.cfg

    # PDK does not use ext4 image, but it is added here to prevent build break.
    TARGET_USERIMAGES_USE_EXT4 := true
    BOARD_SYSTEMIMAGE_PARTITION_SIZE := 576716800
    BOARD_USERDATAIMAGE_PARTITION_SIZE := 419430400
    BOARD_CACHEIMAGE_PARTITION_SIZE := 69206016
    BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
    BOARD_FLASH_BLOCK_SIZE := 512
    TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true
    这个脚本参考了device/generic/x86/BoardConfig.mk,基本不用修改。这样,新增一个产品所需的四个文件都配置好了。以上三个文件具体加载流程可参考《android编译系统分析(三)-make》。
    二.尝试编译
    首先source build/envsetup.sh,然后执行lunch :
    菜单输出如下:
    Lunch menu... pick a combo:
    1. aosp_arm-eng
    2. aosp_arm64-eng
    3. aosp_mips-eng
    4. aosp_mips64-eng
    5. aosp_x86-eng
    6. aosp_x86_64-eng
    7. fish-eng
    8. mini_emulator_arm64-userdebug
    9. m_e_arm-userdebug
    10. mini_emulator_mips-userdebug
    11. mini_emulator_x86_64-userdebug
    12. mini_emulator_x86-userdebug
    可以看到我们的产品已经出现,这里选择7:
    Which would you like? [aosp_arm-eng] 7

    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=6.0
    TARGET_PRODUCT=fish
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=x86
    TARGET_ARCH_VARIANT=x86
    TARGET_CPU_VARIANT=
    TARGET_2ND_ARCH=
    TARGET_2ND_ARCH_VARIANT=
    TARGET_2ND_CPU_VARIANT=
    HOST_ARCH=x86_64
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
    HOST_BUILD_TYPE=release
    BUILD_ID=MRA58K
    OUT_DIR=out
    ============================================

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


    这只是一个简单的尝试,更加复杂的产品定制期待与大家共同探讨。
    ————————————————
    版权声明:本文为CSDN博主「阳光玻璃杯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011913612/article/details/52434445

    Always Believe Something Beauitful Will Be Happen
  • 相关阅读:
    java&nbsp;split
    百度知道
    2014年10月27日
    2014年10月27日
    mybatis批量update,返回行数为-1
    mybatis批量插入:oracle和mysql的区别
    oracle数据库,mybatis批量insert,缺失values字段
    java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx
    C++——运算符重载(上)
    C++——友元
  • 原文地址:https://www.cnblogs.com/Oude/p/12553563.html
Copyright © 2011-2022 走看看