- 論壇徽章:
- 0
|
Android編譯大全(二)
2. 編譯源代碼
v 執(zhí)行l(wèi)s -la /bin/sh命令,如果輸出如下:
rwxrwxrwx 1 root root 4 2010-02-10 17:14 /bin/sh -> dash
請(qǐng)執(zhí)行$sudo dpkg-reconfigure dash命令修改sh版本,并選擇“否”;
此處如果不改好的話,編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤。
v 執(zhí)行source build/envsetup.sh命令
v 執(zhí)行choosecombo命令,出現(xiàn)選擇對(duì)話框
u Build for the simulator or the device?
u 1. Device
u 2. Simulator
u
u Which would you like? [1]
u
u Build type choices are:
u 1. release
u 2. debug
u
u Which would you like? [2]
u
u Product choices are:
u 1. core
u 2. full_dream
u 3. full
u 4. full_passion
u 5. full_sapphire
u 6. generic_dream
u 7. generic
u 8. generic_passion
u 9. generic_sapphire
u 10. msm7625_qrd
u 11. msm7627_ffa
u 12. msm7627_surf
u 13. msm7630_surf
u 14. qsd8250_ffa
u 15. qsd8250_surf
u 16. sample_addon
u 17. sdk
u 18. sim
u You can also type the name of a product if you know it.
u Which product would you like? [generic] 3
u
u Variant choices are:
u 1. user
u 2. userdebug
u 3. eng
u Which would you like? [eng]
如果執(zhí)行這個(gè)命令的時(shí)候,報(bào)錯(cuò):/bin/sh: Syntax error: "(" unexpected
#請(qǐng)執(zhí)行$sudo dpkg-reconfigure dash命令,并選擇“否”;
v 配置環(huán)境變量
export JAVA_HOME=/usr/lib/jvm/java-5-sun
export CLASSPATH=$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export JAVA_PATH=$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_PATH:$PATH
v 執(zhí)行make命令
如果安裝的是java1.6,將報(bào)錯(cuò),如下:
Your version is: java version "1.6.0_15".
The correct version is: 1.5.
解決java編譯錯(cuò)誤,如下:
1) 下載jdk1.5(ftp://202.112.80.252/java/jdk-1_5_0_21-linux-i586.bin);
2) 將jdk-1_5_0_21-linux-i586.bin變?yōu)榭蓤?zhí)行權(quán)限
$sudo chmod a+x jdk-1_5_0_21-linux-i586.bin
3) 在命令行下執(zhí)行./jdk-1_5_0_21-linux-i586.bin安裝sdk
4) 建立一個(gè)軟連接到j(luò)dk目錄
$sudo ln jdk1.5.0_21/ java-5-sun -s
5) 然后配置環(huán)境變量:sudo gedit/etc/enviroment在其中添加兩行:
CLASSPATH=/usr/lib/jvm/java-5-sun/lib
JAVA_HOME=/usr/lib/jvm/java-5-sun
如果在出現(xiàn)類似使用了舊版api的錯(cuò)誤,請(qǐng)先按照提示執(zhí)行make update-api命令。該命令執(zhí)行結(jié)束之后,再繼續(xù)執(zhí)行make命令就可以編譯成功了。
在配置好shell命令類型之后,也可以新建一個(gè)shell腳本如下,進(jìn)行自動(dòng)編譯:
export JAVA_HOME=/usr/lib/jvm/java-5-sun
export CLASSPATH=$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export JAVA_PATH=$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_PATH:$PATH
source build/envsetup.sh
choosecombo 1 1 7 3
make
build之后的log如下:
… …
creating boot.img...
creating recovery.img...
creating system.img...
creating userdata.img...
cleaning up...
Done.
Android編譯大全(三)
3. 驗(yàn)證編譯之后的模塊
$export ANDROID_PRODUCT_OUT=<SrcDir>/out/target/product/generic
$cd ./out/host/linux-x86/bin
$./emulator
4. 編譯完成之后的代碼結(jié)構(gòu)
Android編譯完成后,將在根目錄中生成一個(gè)out文件夾,所有生成的內(nèi)容均放置在這個(gè)文件夾中。out文件夾如下所示:
out/
|-- CaseCheck.txt
|-- casecheck.txt
|-- host
| |-- common
| `-- linux-x86
`-- target
|-- common
`-- product
主要的兩個(gè)目錄為host和target,前者表示在主機(jī)(x86)生成的工具,后者表示目標(biāo)機(jī)(模認(rèn)為ARMv5)運(yùn)行的內(nèi)容。
host目錄的結(jié)構(gòu)如下所示:
out/host/
|-- common
| `-- obj (JAVA庫(kù))
`-- linux-x86
|-- bin (二進(jìn)制程序)
|-- framework (JAVA庫(kù),*.jar文件)
|-- lib (共享庫(kù)*.so)
`-- obj (中間生成的目標(biāo)文件)
host目錄是一些在主機(jī)上用的工具,有一些是二進(jìn)制程序,有一些是JAVA的程序。
target目錄的結(jié)構(gòu)如下所示:
out/target/
|-- common
| |-- R (資源文件)
| |-- docs
| `-- obj (目標(biāo)文件)
`-- product
`-- generic
其中common目錄表示通用的內(nèi)容,product中則是針對(duì)產(chǎn)品的內(nèi)容。
在common目錄的obj中,包含兩個(gè)重要的目錄:
APPS 中包含了JAVA應(yīng)用程序生成的目標(biāo),每個(gè)應(yīng)用程序?qū)?yīng)其中一個(gè)子目錄,將結(jié)合每個(gè)應(yīng)用程序的原始文件生成Android應(yīng)用程序的APK包。
JAVA_LIBRARIES 中包含了JAVA的庫(kù),每個(gè)庫(kù)對(duì)應(yīng)其中一個(gè)子目錄。
在默認(rèn)的情況下,Android編譯將生成generic目錄,如果選定產(chǎn)品還可以生成其他的目錄。generic包含了以下內(nèi)容:
out/target/product/generic/
|-- android-info.txt
|-- clean_steps.mk
|-- data
|-- obj
|-- ramdisk.img
|-- root
|-- symbols
|-- system
|-- system.img
|-- userdata-qemu.img
`-- userdata.img
在generic/obj/APPS目錄中包含了各種JAVA應(yīng)用,與common/APPS相對(duì)應(yīng),但是已經(jīng)打成了APK包。
system目錄是主要的文件系統(tǒng),data目錄是存放數(shù)據(jù)的文件系統(tǒng)。
obj/SHARED_LIBRARIES中存放所有動(dòng)態(tài)庫(kù)。
obj/STATIC_LIBRARIES中存放所有靜態(tài)庫(kù)。
幾個(gè)以img為結(jié)尾的文件是幾個(gè)目標(biāo)映像文件,其中ramdisk是作為內(nèi)存盤的根文件系統(tǒng)映像,system.img是主要文件系統(tǒng)的映像,這是一個(gè)比較大的文件,data.img是數(shù)據(jù)內(nèi)容映像。這幾個(gè)image文件是運(yùn)行時(shí)真正需要的文件。
5. make SDK
5.1. sdk編譯
在編譯完整個(gè)系統(tǒng)之后,再運(yùn)行make sdk,就可以進(jìn)行sdk的編譯了。make sdk將各種工具和image打包,供開發(fā)和調(diào)試使用。
export JAVA_HOME=/usr/lib/jvm/java-5-sun
export CLASSPATH=$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export JAVA_PATH=$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_PATH:$PATH
source build/envsetup.sh
make sdk
……
Package SDK Stubs: out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.huangjx_linux-x86.zip
build之后的log如下:
5.2. 驗(yàn)證編譯之后的模塊
將out/host/linux-x86/sdk/android-sdk_eng.huangjx_linux-x86.zip解壓到本地目錄。進(jìn)入tools目錄,輸入下面的命令創(chuàng)建AVD:
$./android create avd -t 1 -c 128M -n froyo -s HVGA
Android 2.2 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD 'froyo' based on Android 2.2, with the following hardware config:
hw.lcd.density=160
輸入下面的命令,啟動(dòng)模擬器:
$ ./emulator -avd froyo -partition-size 160 &
Android編譯大全(四)
6. 編譯詳細(xì)分解
6.1. build系統(tǒng)簡(jiǎn)介
6.1.1.build系統(tǒng)文件結(jié)構(gòu)
./build
|-- CleanSpec.mk
|-- buildspec.mk.default
|-- core
| |-- Makefile
| |-- apicheck_msg_current.txt
| |-- apicheck_msg_last.txt
| |-- armelf.x
| |-- armelf.xsc
| |-- armelflib.x
| |-- base_rules.mk
| |-- binary.mk
| |-- build-system.html
| |-- build_id.mk
| |-- checktree
| |-- cleanbuild.mk
| |-- cleanspec.mk
| |-- clear_vars.mk
| |-- combo
| | |-- HOST_darwin-x86.mk
| | |-- HOST_linux-x86.mk
| | |-- HOST_windows-x86.mk
| | |-- TARGET_linux-arm.mk
| | |-- TARGET_linux-sh.mk
| | |-- TARGET_linux-x86.mk
| | |-- arch
| | | `-- arm
| | | |-- armv4t.mk
| | | |-- armv5te-vfp.mk
| | | |-- armv5te.mk
| | | |-- armv7-a-neon.mk
| | | `-- armv7-a.mk
| | |-- javac.mk
| | `-- select.mk
| |-- config.mk
| |-- copy_headers.mk
| |-- definitions.mk
| |-- device.mk
| |-- distdir.mk
| |-- droiddoc.mk
| |-- dynamic_binary.mk
| |-- envsetup.mk
| |-- executable.mk
| |-- filter_symbols.sh
| |-- find-jdk-tools-jar.sh
| |-- host_executable.mk
| |-- host_java_library.mk
| |-- host_prebuilt.mk
| |-- host_shared_library.mk
| |-- host_static_library.mk
| |-- java.mk
| |-- java_library.mk
| |-- key_char_map.mk
| |-- main.mk
| |-- multi_prebuilt.mk
| |-- node_fns.mk
| |-- notice_files.mk
| |-- package.mk
| |-- pathmap.mk
| |-- prebuilt.mk
| |-- prelink-linux-arm-2G.map
| |-- prelink-linux-arm.map
| |-- process_wrapper.sh
| |-- process_wrapper_gdb.cmds
| |-- process_wrapper_gdb.sh
| |-- product.mk
| |-- product_config.mk
| |-- proguard.flags
| |-- proguard_tests.flags
| |-- raw_executable.mk
| |-- raw_static_library.mk
| |-- root.mk
| |-- shared_library.mk
| |-- static_java_library.mk
| |-- static_library.mk
| |-- tasks
| | |-- apicheck.mk
| | |-- cts.mk
| | |-- product-graph.mk
| | `-- sdk-addon.mk
| `-- version_defaults.mk
|-- envsetup.sh
|-- libs
| `-- host
| |-- Android.mk
| |-- CopyFile.c
| |-- include
| | `-- host
| | |-- CopyFile.h
| | |-- Directories.h
| | `-- pseudolocalize.h
| |-- list.java
| `-- pseudolocalize.cpp
|-- target
| |-- board
| | |-- Android.mk
| | |-- emulator
| | | |-- AndroidBoard.mk
| | | |-- BoardConfig.mk
| | | |-- README.txt
| | | |-- tuttle2.kcm
| | | `-- tuttle2.kl
| | |-- generic
| | | |-- AndroidBoard.mk
| | | |-- BoardConfig.mk
| | | |-- README.txt
| | | |-- system.prop
| | | |-- tuttle2.kcm
| | | `-- tuttle2.kl
| | `-- sim
| | |-- AndroidBoard.mk
| | `-- BoardConfig.mk
| `-- product
| |-- AndroidProducts.mk
| |-- core.mk
| |-- full.mk
| |-- generic.mk
| |-- languages_full.mk
| |-- languages_small.mk
| |-- sdk.mk
| |-- security
| | |-- README
| | |-- media.pk8
| | |-- media.x509.pem
| | |-- platform.pk8
| | |-- platform.x509.pem
| | |-- shared.pk8
| | |-- shared.x509.pem
| | |-- testkey.pk8
| | `-- testkey.x509.pem
| `-- sim.mk
Android編譯大全(五)
6.1.2.make文件分類
² 配置類
主要用來配置product、board,以及根據(jù)你的Host和Target選擇相應(yīng)的工具以及設(shè)定相應(yīng)的通用編譯選項(xiàng):
config文件
說明
build/core/config.mk
Config文件的概括性配置
build/core/envsetup.mk
generate目錄構(gòu)成等配置
build/target/product
產(chǎn)品相關(guān)的配置
build/target/board
硬件相關(guān)的配置
build/core/combo
編譯選項(xiàng)配置
這里解釋下這里的board和product。board主要是設(shè)計(jì)到硬件芯片的配置,比如是否提供硬件的某些功能,比如說GPU等等,或者芯片支持浮點(diǎn)
運(yùn)算等等。product是指針對(duì)當(dāng)前的芯片配置定義你將要生產(chǎn)產(chǎn)品的個(gè)性配置,主要是指APK方面的配置,哪些APK會(huì)包含在哪個(gè)product中,哪
些APK在當(dāng)前product中是不提供的。
config.mk是一個(gè)總括性的東西,它里面定義了各種module編譯所需要使用的HOST工具以及如何來編譯各種模塊,比如說
BUILT_PREBUILT就定義了如何來編譯預(yù)編譯模塊。envsetup.mk主要會(huì)讀取由envsetup.sh寫入環(huán)境變量中的一些變量來配置
編譯過程中的輸出目錄,combo里面主要定義了各種Host和Target結(jié)合的編譯器和編譯選項(xiàng)。
² 模塊組織類
這類文件主要定義了如何來處理Module的Android.mk,以及采用何種方式來生成目標(biāo)模塊,這些模塊生成規(guī)則都定義在config.mk里面。我們可以看看:
CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk
BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk
BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
BUILD_RAW_STATIC_LIBRARY :=$(BUILD_SYSTEM)/raw_static_library.mk
BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk
BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk
BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk
BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk
BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk
BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk
BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk
BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk
BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
BUILD_KEY_CHAR_MAP :=$(BUILD_SYSTEM)/key_char_map.mk
除了CLEAR_VARS是清楚本地變量之外,其他所有的都對(duì)應(yīng)了一種模塊的生成規(guī)則,每一個(gè)本地模塊最后都會(huì)include其中的一種來生成目標(biāo)模塊。
大部分上面的.mk都會(huì)包含base_rules.mk,這是對(duì)模塊進(jìn)行處理的基礎(chǔ)文件,建議要寫本地模塊的都去看看,看明白了為什么
Android.mk要這么寫就會(huì)大致明白了。
² 單個(gè)模塊編譯類
本地模塊的Makefile文件就是我們?cè)贏ndroid里面幾乎上隨處可見的Android.mk。Android進(jìn)行編譯的時(shí)候會(huì)通過下面的函數(shù)來遍
歷所有子目錄中的Android.mk,一旦找到就不會(huì)再往層子目錄繼續(xù)尋找(所有你的模塊定義的頂層Android.mk必須包含自己定義的子目錄中的
Android.mk)。
subdir_makefiles += \
$(shellbuild/tools/findleaves.sh --prune="./out" $(subdirs) Android.mk)
不同類型的本地模塊具有不同的語(yǔ)法,但基本上是相通的,只有個(gè)別變量的不同,如何添加模塊在前面的帖子已經(jīng)說過了,大家可以參考。
Android通過LOCAL_MODULE_TAGS來決定哪些本地模塊會(huì)不會(huì)編譯進(jìn)系統(tǒng),通過PRODUCT和LOCAL_MODULE_TAGS來
決定哪些應(yīng)用包會(huì)編譯進(jìn)系統(tǒng),如果用戶不指定LOCAL_MODULE_TAGS,默認(rèn)它的值是user。此外用戶可以通過buildspec.mk來指
定你需要編譯進(jìn)系統(tǒng)的模塊。用戶也可以通過mm來編譯指定模塊,或者通過make clean-module_name來刪除指定模塊。
² 系統(tǒng)生成類
這主要指的是build/core/Makefile這個(gè)文件,它定義了生成各種img的方式,包括ramdisk.img
userdata.img system.img update.zip
recover.img等。我們可以看看這些img都是如何生成的,對(duì)應(yīng)著我們常用的幾個(gè)make goals。
在實(shí)際的過程中,我們也可以自己編輯out目錄下的生成文件,然后手工打包相應(yīng)生成
相應(yīng)的img,最常用的是加入一些需要集成進(jìn)的prebuilt
file。所有的Makefile都通過build/core/main.mk這個(gè)文件組織在一起,它定義了一個(gè)默認(rèn)goals:droid,當(dāng)我們?cè)?
TOP目錄下敲Make實(shí)際上就等同于我們執(zhí)行make droid。當(dāng)Make
include所有的文件,完成對(duì)所有make文件的解析以后就會(huì)尋找生成droid的規(guī)則,依次生成它的依賴,直到所有滿足的模塊被編譯好,然后使用相
應(yīng)的工具打包成相應(yīng)的img。
Android編譯大全(六)
6.2. makefile文件
控制整個(gè)android系統(tǒng)編譯的make文件。其內(nèi)容如下:
### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###
可以看出,實(shí)際上控制編譯的文件是:build/core/main.mk
6.3. Make命令
² make droid:等同于make命令。droid是默認(rèn)的目標(biāo)名稱。
² make all: make all將make所有make droid會(huì)編譯的項(xiàng)目。同時(shí),將編譯LOCAL_MODULE_TAGS定義的不包括android tag的模塊。這將確保所有的在代碼樹里面同時(shí)有Android.mk文件的模塊。
² clean-$(LOCAL_MODULE)和clean-$(LOCAL_PACKAGE_NAME):
刪除某個(gè)模塊的目標(biāo)文件。例如:clean-libutils將刪除所有的libutils.so以及和它相關(guān)的中間文件;clean-Home將刪除Home應(yīng)用。
² make clean:刪除本次配置所編譯輸出的結(jié)果文件。類似于:rm –rf ./out/ <configuration>
² make clobber:刪除所有配置所編譯輸出的結(jié)果文件。類似于:rm –rf ./out/
² make dataclean:make dataclean deletes contents of the data directory
inside the current combo directory. This is especially useful on the
simulator and emulator, where the persistent data remains present
between builds.
² make showcommands:在編譯的時(shí)候顯示腳本的命令,而不是顯示編譯的簡(jiǎn)報(bào)。用于調(diào)試腳本。
² make LOCAL_MODULE:編譯一個(gè)單獨(dú)得模塊(需要有Android.mk文件存在)。
² make targets:將輸出所有擬可以編譯的模塊名稱列表。
注:還有一些命令,從make文件里面應(yīng)該可以找到。本文不做探討。
6.4. build/core/config.mk
config.mk文件的主要內(nèi)容如下:
Ø 頭文件的定義;(各種include文件夾的設(shè)定)
在定義頭文件的部分,還include了pathmap.mk,如下:
include $(BUILD_SYSTEM)/pathmap.mk
該文件設(shè)置include目錄和frameworks/base下子目錄等的信息。
Ø 編譯系統(tǒng)內(nèi)部mk文件的定義; <Build system internal files>
Ø 設(shè)定通用的名稱;<Set common values>
Ø Include必要的子配置文件;<Include sub-configuration files>
n buildspec.mk
n envsetup.mk
n BoardConfig.mk
n /combo/select.mk
n /combo/javac.mk
Ø 檢查BUILD_ENV_SEQUENCE_NUMBER版本號(hào);
In order to make easier for people when the build system changes, when
it is necessary to make changes to buildspec.mk or to rerun the
environment setup scripts, they contain a version number in the variable
BUILD_ENV_SEQUENCE_NUMBER. If this variable does not match what the
build system expects, it fails printing an error message explaining what
happened. If you make a change that requires an update, you need to
update two places so this message will be printed.
· In config/envsetup.make, increment the CORRECT_BUILD_ENV_SEQUENCE_NUMBER definition.
· In buildspec.mk.default, update the BUILD_ENV_SEQUENCE_DUMBER definition to match the one in config/envsetup.make
The scripts automatically get the value from the build system, so they will trigger the warning as well.
Ø 設(shè)置常用工具的常量;< Generic tools.>
Ø 設(shè)置目標(biāo)選項(xiàng);< Set up final options.>
Ø 遍歷并設(shè)置SDK版本;
Android編譯大全(七)
6.5. buildspec.mk
默認(rèn)情況下,buildspec.mk文件是不存在的,表示使用的多少默認(rèn)選項(xiàng)。Android只提供了buildspec.mk文件的模板文件
build/buildspec.mk.default。如果需要使用buildspec.mk文件,請(qǐng)將該文件拷貝到<srcDir>根目
錄下面,并命名為buildspec.mk。同時(shí),需要將模板文件里面的一些必要的配置項(xiàng)啟用或者修改為你所需要的目標(biāo)選項(xiàng)。
buildspec.mk文件主要配置下面的選項(xiàng):
Ø TARGET_PRODUCT:設(shè)置編譯之后的目標(biāo)(產(chǎn)品)類型;
可以設(shè)置的值在:build/target/product/中定義。比如,product目錄下有下面幾個(gè)mk文件:
² AndroidProducts.mk
² core.mk
² full.mk
² generic.mk
² languages_full.mk
² languages_small.mk
² sdk.mk
² sim.mk
那么,在這里可以設(shè)置的值就為上面幾個(gè)mk文件的前綴名稱(generic等)。
Ø TARGET_BUILD_VARIANT:設(shè)置image的類型;
包括三個(gè)選項(xiàng):user、userdebug、eng。
usr: 出廠時(shí)候面向用戶的image;
userdebug: 打開了一些debug選項(xiàng)的image;
eng: 為了開發(fā)而包含了很多工具的image
Ø CUSTOM_MODULES:設(shè)置額外的總是會(huì)被安裝到系統(tǒng)的模塊;
這里設(shè)置的模塊名稱采用的是簡(jiǎn)單目標(biāo)名,比如:Browser或者M(jìn)yApp等。這些名字在LOCAL_MODULE或者在LOCAL_PACKAGE_NAME里面定義的。
LOCAL_MODULE is the name of what's supposed to be generated from your
Android.mk. For exmample, for libkjs, the LOCAL_MODULE is "libkjs" (the
build system adds the appropriate suffix -- .so .dylib .dll). For app
modules, use LOCAL_PACKAGE_NAME instead of LOCAL_MODULE. We're planning
on switching to ant for the apps, so this might become moot.
Ø TARGET_SIMULATOR:設(shè)置是否要編譯成simulator <true or false>;
Ø TARGET_BUILD_TYPE:設(shè)置是debug還是release版本 <release or debug>;
Set this to debug or release if you care. Otherwise, it defaults to release for arm and debug for the simulator.
Ø HOST_BUILD_TYPE:設(shè)置Host目標(biāo)是debug版還是release版;
<release or debug, default is debug>
Ø DEBUG_MODULE_ModuleName:配置單個(gè)模塊的版本是debug還是release;<ture or false>
Ø TARGET_TOOLS_PREFIX:工具名前綴,默認(rèn)為NULL
Ø HOST_CUSTOM_DEBUG_CFLAGS/ TARGET_CUSTOM_DEBUG_CFLAGS:增加額外的編譯選項(xiàng)LOCAL_CFLAGS。
LOCAL_CFLAGS:If you have additional flags to pass into the C or C++
compiler, add them here. For example: LOCAL_CFLAGS +=
-DLIBUTILS_NATIVE=1
Ø CUSTOM_LOCALES:增加額外的LOCALES到最總的image;
Any locales that appear in CUSTOM_LOCALES but not in the locale list for
the selected product will be added to the end of PRODUCT_LOCALES.
Ø OUT_DIR:編譯之后文件保存路徑。默認(rèn)為<build-root>/out目錄;
Ø ADDITIONAL_BUILD_PROPERTIES:指定(增加)額外的屬性文件;
Ø NO_FALLBACK_FONT:設(shè)置是否只支持英文(這將減少image的大。。<true, false>
Ø WEBCORE_INSTRUMENTATION:webcore支持;
Ø ENABLE_SVG:SVG支持;
Ø BUILD_ENV_SEQUENCE_NUMBER:編譯系列號(hào);
轉(zhuǎn)自:http://quanminchaoren.iteye.com/blog/840917
|
|