Android编译系统分析四:实战-新增一个产品
生活随笔
收集整理的這篇文章主要介紹了
Android编译系统分析四:实战-新增一个产品
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過上一節“android編譯系統(三)-make”的分析,初步理清楚了編譯初期加載產品相關信息的流程,整個過程主要涉及三個文件:1.AndroidProducts.mk,2.具體產品的配置文件,3.BoardConfig.mk,加上lunch需要的vendorsetup.sh文件,總共只需要四個文件就可以了,所以我們不妨成熱打鐵,趕緊嘗試下如何新增一個產品。因此,android編譯系統鏡像文件的創建過程方到下一節。
add_lunch_combo?fish-eng?? 當我們執行source build/envsetup.sh的時候,就會找到我們的這個文件,lunch的時候就會在菜單中顯示我們的產品。具體這個文件的加載過程可以參考《android編譯系統分析一<source build/envsetup.sh與lunch>》。
PRODUCT_MAKEFILES?:=?\?? ????$(LOCAL_DIR)/fish.mk?? 也是只有一行,就是指明產品的配置文件是哪個。這個腳本會在執行make后,product_config.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,所以我們只需要配置幾個有差異的變量即可。
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》。
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:
[plain]?view plaincopyWhich?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下生成對應產品的文件:
這只是一個簡單的嘗試,更加復雜的產品定制期待與大家共同探討。
一.文件創建
在device下創建如下目錄: cat --fish 就是說我們的公司是cat,我們的產品fish。然后在fish下創建四個文件:1.1vendorsetup.sh
這個文件內容如下: [plain]?view plaincopy1.2AndroidProducts.mk
[plain]?view plaincopy1.3fish.mk
[plain]?view plaincopy1.4BoardConfig.mk
[plain]?view plaincopy二.嘗試編譯
首先source build/envsetup.sh,然后執行lunch : 菜單輸出如下: [plain]?view plaincopy可以看到打印出了配置信息,TARGET_PRODUCT=fish,TARGET_BUILD_TYPE=eng等。 最后嘗試編譯,首先make clean,然后再make 編譯結束后在out下生成對應產品的文件:
這只是一個簡單的嘗試,更加復雜的產品定制期待與大家共同探討。
總結
以上是生活随笔為你收集整理的Android编译系统分析四:实战-新增一个产品的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android编译系统分析三:make完
- 下一篇: 内核与ramdisk到底是什么关系?