Android编译系统分析四:实战-新增一个产品
生活随笔
收集整理的這篇文章主要介紹了
Android编译系统分析四:实战-新增一个产品
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過上一節(jié)“android編譯系統(tǒng)(三)-make”的分析,初步理清楚了編譯初期加載產(chǎn)品相關(guān)信息的流程,整個(gè)過程主要涉及三個(gè)文件:1.AndroidProducts.mk,2.具體產(chǎn)品的配置文件,3.BoardConfig.mk,加上lunch需要的vendorsetup.sh文件,總共只需要四個(gè)文件就可以了,所以我們不妨成熱打鐵,趕緊嘗試下如何新增一個(gè)產(chǎn)品。因此,android編譯系統(tǒng)鏡像文件的創(chuàng)建過程方到下一節(jié)。
add_lunch_combo?fish-eng?? 當(dāng)我們執(zhí)行source build/envsetup.sh的時(shí)候,就會(huì)找到我們的這個(gè)文件,lunch的時(shí)候就會(huì)在菜單中顯示我們的產(chǎn)品。具體這個(gè)文件的加載過程可以參考《android編譯系統(tǒng)分析一<source build/envsetup.sh與lunch>》。
PRODUCT_MAKEFILES?:=?\?? ????$(LOCAL_DIR)/fish.mk?? 也是只有一行,就是指明產(chǎn)品的配置文件是哪個(gè)。這個(gè)腳本會(huì)在執(zhí)行make后,product_config.mk下通過查找命令找到,找到后就會(huì)加載進(jìn)來。
$(call?inherit-product,?device/generic/armv7-a-neon/mini_common.mk)?? ?? PRODUCT_NAME?:=?fish?? PRODUCT_DEVICE?:=?fish?? PRODUCT_BRAND?:=?Android?? 這個(gè)腳本在加載完AndroidProducts.mk后就會(huì)被加載,用來配置產(chǎn)品名稱等信息。因?yàn)樗^承了mini_common.mk,所以我們只需要配置幾個(gè)有差異的變量即可。
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?? 這個(gè)腳本參考了device/generic/x86/BoardConfig.mk,基本不用修改。這樣,新增一個(gè)產(chǎn)品所需的四個(gè)文件都配置好了。以上三個(gè)文件具體加載流程可參考《android編譯系統(tǒng)分析(三)-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?? 可以看到我們的產(chǎn)品已經(jīng)出現(xiàn),這里選擇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 編譯結(jié)束后在out下生成對(duì)應(yīng)產(chǎn)品的文件:
這只是一個(gè)簡單的嘗試,更加復(fù)雜的產(chǎn)品定制期待與大家共同探討。
一.文件創(chuàng)建
在device下創(chuàng)建如下目錄: cat --fish 就是說我們的公司是cat,我們的產(chǎn)品fish。然后在fish下創(chuàng)建四個(gè)文件:1.1vendorsetup.sh
這個(gè)文件內(nèi)容如下: [plain]?view plaincopy1.2AndroidProducts.mk
[plain]?view plaincopy1.3fish.mk
[plain]?view plaincopy1.4BoardConfig.mk
[plain]?view plaincopy二.嘗試編譯
首先source build/envsetup.sh,然后執(zhí)行l(wèi)unch : 菜單輸出如下: [plain]?view plaincopy可以看到打印出了配置信息,TARGET_PRODUCT=fish,TARGET_BUILD_TYPE=eng等。 最后嘗試編譯,首先make clean,然后再make 編譯結(jié)束后在out下生成對(duì)應(yīng)產(chǎn)品的文件:
這只是一個(gè)簡單的嘗試,更加復(fù)雜的產(chǎn)品定制期待與大家共同探討。
總結(jié)
以上是生活随笔為你收集整理的Android编译系统分析四:实战-新增一个产品的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android编译系统分析三:make完
- 下一篇: 内核与ramdisk到底是什么关系?