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