Android編譯命令及選項
1 運行build/envsetup.sh,該文件提供m,mm,mmm等命令
#. ./build/envsetup.sh
注意: . . 之間是空格
運行之後用help查看命令
#help
m 編譯整個android工程
mm 編譯當前目錄下的模塊
mmm path 編譯指定目錄下的模塊
2 配置參數
#tapas
運行該命令後會出現:
Build for the simulator or the device?
1. Device
2. Simulator
Which would you like? [1]
Build type choices are:
1. release
2. debug
Which would you like? [1]
Product choices are:
1. emulator
2. generic
3. sim
You can also type the name of a product if you know it.
Which would you like? [generic]
以上產品選項是默認的,如果vendor/ 目錄下有產品,則會自動掃描進去.
3 如何在vendor下添加產品
以HTC爲例:
vendor/htc/dream-open 在配置時會出現如下錯誤:
build/core/product_config.mk:173: *** No matches for product "dream-open".
原因是:
vendor/htc/dream-open/htm_dream.mk 裏 PRODUCT_NAME := htc_dream ,所以dream-open要改爲htc_dream,還有文件夾命名不能有 – (中間),但可以有_(底下)
dream-open -> htc_dream
PRODUCT_NAME := htc_dream
PRODUCT_DEVICE := htc_dream
快速編譯system.img,可以使用這個命令:
#make systemimage
快速編譯boot.img,可以使用以下命令:
#make bootimage
快速編譯userdata.img,可以使用以下命令:
# make userdataimage-nodeps
但是,對於bootimage, 在不改變內存佈局的情況下,可以使用以下命令:
#cp ./arch/arm/boot/Image ./arch/arm/boot/kernel
#mkbootimg --kernel ./arch/arm/boot/kernel --ramdisk
../out/target/product/tcc8800/ramdisk.img --cmdline
console=ttyTCC,115200n8 --base 0x40000000 --pagesize 8192 --output
../out/target/product/tcc8800/boot.img
其實這些生成命令都在build/core/Makefile中.
生成boo.img的方法:
$(INSTALLED_BOOTIMAGE_TARGET):$(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
$(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $@
......
生成system.img的方法:
define build-systemimage-target
$(MKYAFFS2) -f $(mkyaffs2_extra_flags) $(TARGET_OUT) $(1)
生成userdata.img的方法
define build-userdataimage-target
mkdir -p $(TARGET_OUT_DATA)
$(MKYAFFS2) -f $(mkyaffs2_extra_flags) $(TARGET_OUT_DATA)
$(INSTALLED_USERDATAIMAGE_TARGET)
同樣,ramdisk.img的生成方法爲:
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) |
$(MINIGZIP)
$(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
爲方便起見,也可以在Makefile中加入以下內容:
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
.PHONY: ramdiskimage
ramdiskimage: ${BUILT_RAMDISK_TARGET}
然後,就可以輸入:make ramdiskimage 來編譯ramdisk.img文件了
最簡單的方法是:
out/host/linux-x86/bin/mkbootfs out/target/product/tcc8900/root |
out/host/linux-x86/bin/minigzip >
out/target/product/tcc8900/ramdisk.img