Android 編譯大全
Android編譯大全(一)
1. 編譯前的準備
1.1. 編譯環境準備
v 先構建一個Ubuntu 9.10虛擬機
v 在虛擬機中確認下面的包是否已經安裝:
n sudo apt-get install build-essential
n sudo apt-get install make
n sudo apt-get install gcc
n sudo apt-get install g++
n sudo apt-get install libc6-dev
n sudo apt-get install flex
n sudo apt-get install bison
n sudo apt-get install patch
n sudo apt-get install texinfo
n sudo apt-get install libncurses-dev
n sudo apt-get install git-core gnupg //(gnupg系統可能已自帶)
n sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
n sudo apt-get install ncurses-dev
n sudo apt-get install zlib1g-dev
n sudo apt-get install valgrind
n sudo apt-get install python2.5 (Ubuntu可能已經自帶)
n sudo apt-get install sun-java5-jdk (Ubuntu9.10裏面已經用1.6替換了1.5,需要重新下載一個1.5)
v 下載repo腳本,加上可執行權。
n $ curl http://android.git.kernel.org/repo > repo
n $ sudo chmod a+x repo
注:本文檔以Froyo版本爲基礎進行編譯。
1.2. Source code的獲取
v 在源碼存放目錄android中執行
$ repo init -u git://codeaurora.org/platform/manifest.git -b carrot.cupcake
-m M7201JSDCBALYA6380.xml
就可以獲得代碼了
關於-b 和 -m參數的說明參見:
https://www.codeaurora.org/wiki/QAEP
v 執行repo sync就可以開始下載源碼了
$ repo sync
(漫長的過程,視速度而言需要半天以上)
Android編譯大全(二)
2. 編譯源代碼
v 執行ls -la /bin/sh命令,如果輸出如下:
rwxrwxrwx 1 root root 4 2010-02-10 17:14 /bin/sh -> dash
請執行$sudo dpkg-reconfigure dash命令修改sh版本,並選擇“否”;
此處如果不改好的話,編譯時會出現錯誤。
v 執行source build/envsetup.sh命令
v 執行choosecombo命令,出現選擇對話框
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]
如果執行這個命令的時候,報錯:/bin/sh: Syntax error: "(" unexpected
#請執行$sudo dpkg-reconfigure dash命令,並選擇“否”;
v 配置環境變量
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 執行make命令
如果安裝的是java1.6,將報錯,如下:
Your version is: java version "1.6.0_15".
The correct version is: 1.5.
解決java編譯錯誤,如下:
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變爲可執行權限
$sudo chmod a+x jdk-1_5_0_21-linux-i586.bin
3) 在命令行下執行./jdk-1_5_0_21-linux-i586.bin安裝sdk
4) 建立一個軟連接到jdk目錄
$sudo ln jdk1.5.0_21/ java-5-sun -s
5) 然後配置環境變量:sudo gedit/etc/enviroment在其中添加兩行:
CLASSPATH=/usr/lib/jvm/java-5-sun/lib
JAVA_HOME=/usr/lib/jvm/java-5-sun
如果在出現類似使用了舊版api的錯誤,請先按照提示執行make update-api命令。該命令執行結束之後,再繼續執行make命令就可以編譯成功了。
在配置好shell命令類型之後,也可以新建一個shell腳本如下,進行自動編譯:
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. 驗證編譯之後的模塊
$export ANDROID_PRODUCT_OUT=<SrcDir>/out/target/product/generic
$cd ./out/host/linux-x86/bin
$./emulator
4. 編譯完成之後的代碼結構
Android編譯完成後,將在根目錄中生成一個out文件夾,所有生成的內容均放置在這個文件夾中。out文件夾如下所示:
out/
|-- CaseCheck.txt
|-- casecheck.txt
|-- host
| |-- common
| `-- linux-x86
`-- target
|-- common
`-- product
主要的兩個目錄爲host和target,前者表示在主機(x86)生成的工具,後者表示目標機(模認爲ARMv5)運行的內容。
host目錄的結構如下所示:
out/host/
|-- common
| `-- obj (JAVA庫)
`-- linux-x86
|-- bin (二進制程序)
|-- framework (JAVA庫,*.jar文件)
|-- lib (共享庫*.so)
`-- obj (中間生成的目標文件)
host目錄是一些在主機上用的工具,有一些是二進制程序,有一些是JAVA的程序。
target目錄的結構如下所示:
out/target/
|-- common
| |-- R (資源文件)
| |-- docs
| `-- obj (目標文件)
`-- product
`-- generic
其中common目錄表示通用的內容,product中則是針對產品的內容。
在common目錄的obj中,包含兩個重要的目錄:
APPS 中包含了JAVA應用程序生成的目標,每個應用程序對應其中一個子目錄,將結合每個應用程序的原始文件生成Android應用程序的APK包。
JAVA_LIBRARIES 中包含了JAVA的庫,每個庫對應其中一個子目錄。
在默認的情況下,Android編譯將生成generic目錄,如果選定產品還可以生成其他的目錄。generic包含了以下內容:
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應用,與common/APPS相對應,但是已經打成了APK包。
system目錄是主要的文件系統,data目錄是存放數據的文件系統。
obj/SHARED_LIBRARIES中存放所有動態庫。
obj/STATIC_LIBRARIES中存放所有靜態庫。
幾個以img爲結尾的文件是幾個目標映像文件,其中ramdisk是作爲內存盤的根文件系統映像,system.img是主要文件系統的映像,這是一個比較大的文件,data.img是數據內容映像。這幾個image文件是運行時真正需要的文件。
5. make SDK
5.1. sdk編譯
在編譯完整個系統之後,再運行make sdk,就可以進行sdk的編譯了。make sdk將各種工具和image打包,供開發和調試使用。
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. 驗證編譯之後的模塊
將out/host/linux-x86/sdk/android-sdk_eng.huangjx_linux-x86.zip解壓到本地目錄。進入tools目錄,輸入下面的命令創建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
輸入下面的命令,啓動模擬器:
$ ./emulator -avd froyo -partition-size 160 &
Android編譯大全(四)
6. 編譯詳細分解
6.1. build系統簡介
6.1.1.build系統文件結構
./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,以及根據你的Host和Target選擇相應的工具以及設定相應的通用編譯選項:
config文件
說明
build/core/config.mk
Config文件的概括性配置
build/core/envsetup.mk
generate目錄構成等配置
build/target/product
產品相關的配置
build/target/board
硬件相關的配置
build/core/combo
編譯選項配置
這裏解釋下這裏的board和product。board主要是設計到硬件芯片的配置,比如是否提供硬件的某些功能,比如說GPU等等,或者芯片支持浮點運算等等。product是指針對當前的芯片配置定義你將要生產產品的個性配置,主要是指APK方面的配置,哪些APK會包含在哪個product中,哪些APK在當前product中是不提供的。
config.mk是一個總括性的東西,它裏面定義了各種module編譯所需要使用的HOST工具以及如何來編譯各種模塊,比如說 BUILT_PREBUILT就定義瞭如何來編譯預編譯模塊。envsetup.mk主要會讀取由envsetup.sh寫入環境變量中的一些變量來配置編譯過程中的輸出目錄,combo裏面主要定義了各種Host和Target結合的編譯器和編譯選項。
² 模塊組織類
這類文件主要定義瞭如何來處理Module的Android.mk,以及採用何種方式來生成目標模塊,這些模塊生成規則都定義在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是清楚本地變量之外,其他所有的都對應了一種模塊的生成規則,每一個本地模塊最後都會include其中的一種來生成目標模塊。大部分上面的.mk都會包含base_rules.mk,這是對模塊進行處理的基礎文件,建議要寫本地模塊的都去看看,看明白了爲什麼 Android.mk要這麼寫就會大致明白了。
² 單個模塊編譯類
本地模塊的Makefile文件就是我們在Android裏面幾乎上隨處可見的Android.mk。Android進行編譯的時候會通過下面的函數來遍歷所有子目錄中的Android.mk,一旦找到就不會再往層子目錄繼續尋找(所有你的模塊定義的頂層Android.mk必須包含自己定義的子目錄中的 Android.mk)。
subdir_makefiles += \
$(shellbuild/tools/findleaves.sh --prune="./out" $(subdirs) Android.mk)
不同類型的本地模塊具有不同的語法,但基本上是相通的,只有個別變量的不同,如何添加模塊在前面的帖子已經說過了,大家可以參考。
Android通過LOCAL_MODULE_TAGS來決定哪些本地模塊會不會編譯進系統,通過PRODUCT和LOCAL_MODULE_TAGS來決定哪些應用包會編譯進系統,如果用戶不指定LOCAL_MODULE_TAGS,默認它的值是user。此外用戶可以通過buildspec.mk來指定你需要編譯進系統的模塊。用戶也可以通過mm來編譯指定模塊,或者通過make clean-module_name來刪除指定模塊。
² 系統生成類
這主要指的是build/core/Makefile這個文件,它定義了生成各種img的方式,包括ramdisk.img userdata.img system.img update.zip recover.img等。我們可以看看這些img都是如何生成的,對應着我們常用的幾個make goals。
在實際的過程中,我們也可以自己編輯out目錄下的生成文件,然後手工打包相應生成
相應的img,最常用的是加入一些需要集成進的prebuilt file。所有的Makefile都通過build/core/main.mk這個文件組織在一起,它定義了一個默認goals:droid,當我們在TOP目錄下敲Make實際上就等同於我們執行make droid。當Make include所有的文件,完成對所有make文件的解析以後就會尋找生成droid的規則,依次生成它的依賴,直到所有滿足的模塊被編譯好,然後使用相應的工具打包成相應的img。
Android編譯大全(六)
6.2. makefile文件
控制整個android系統編譯的make文件。其內容如下:
### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###
可以看出,實際上控制編譯的文件是:build/core/main.mk
6.3. Make命令
² make droid:等同於make命令。droid是默認的目標名稱。
² make all: make all將make所有make droid會編譯的項目。同時,將編譯LOCAL_MODULE_TAGS定義的不包括android tag的模塊。這將確保所有的在代碼樹裏面同時有Android.mk文件的模塊。
² clean-$(LOCAL_MODULE)和clean-$(LOCAL_PACKAGE_NAME):
刪除某個模塊的目標文件。例如:clean-libutils將刪除所有的libutils.so以及和它相關的中間文件;clean-Home將刪除Home應用。
² make clean:刪除本次配置所編譯輸出的結果文件。類似於:rm –rf ./out/ <configuration>
² make clobber:刪除所有配置所編譯輸出的結果文件。類似於: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:在編譯的時候顯示腳本的命令,而不是顯示編譯的簡報。用於調試腳本。
² make LOCAL_MODULE:編譯一個單獨得模塊(需要有Android.mk文件存在)。
² make targets:將輸出所有擬可以編譯的模塊名稱列表。
注:還有一些命令,從make文件裏面應該可以找到。本文不做探討。
6.4. build/core/config.mk
config.mk文件的主要內容如下:
Ø 頭文件的定義;(各種include文件夾的設定)
在定義頭文件的部分,還include了pathmap.mk,如下:
include $(BUILD_SYSTEM)/pathmap.mk
該文件設置include目錄和frameworks/base下子目錄等的信息。
Ø 編譯系統內部mk文件的定義; <Build system internal files>
Ø 設定通用的名稱;<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版本號;
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.
Ø 設置常用工具的常量;< Generic tools.>
Ø 設置目標選項;< Set up final options.>
Ø 遍歷並設置SDK版本;
Android編譯大全(七)
6.5. buildspec.mk
默認情況下,buildspec.mk文件是不存在的,表示使用的多少默認選項。Android只提供了buildspec.mk文件的模板文件build/buildspec.mk.default。如果需要使用buildspec.mk文件,請將該文件拷貝到<srcDir>根目錄下面,並命名爲buildspec.mk。同時,需要將模板文件裏面的一些必要的配置項啓用或者修改爲你所需要的目標選項。
buildspec.mk文件主要配置下面的選項:
Ø TARGET_PRODUCT:設置編譯之後的目標(產品)類型;
可以設置的值在:build/target/product/中定義。比如,product目錄下有下面幾個mk文件:
² AndroidProducts.mk
² core.mk
² full.mk
² generic.mk
² languages_full.mk
² languages_small.mk
² sdk.mk
² sim.mk
那麼,在這裏可以設置的值就爲上面幾個mk文件的前綴名稱(generic等)。
Ø TARGET_BUILD_VARIANT:設置image的類型;
包括三個選項:user、userdebug、eng。
usr: 出廠時候面向用戶的image;
userdebug: 打開了一些debug選項的image;
eng: 爲了開發而包含了很多工具的image
Ø CUSTOM_MODULES:設置額外的總是會被安裝到系統的模塊;
這裏設置的模塊名稱採用的是簡單目標名,比如:Browser或者MyApp等。這些名字在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:設置是否要編譯成simulator <true or false>;
Ø TARGET_BUILD_TYPE:設置是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:設置Host目標是debug版還是release版;
<release or debug, default is debug>
Ø DEBUG_MODULE_ModuleName:配置單個模塊的版本是debug還是release;<ture or false>
Ø TARGET_TOOLS_PREFIX:工具名前綴,默認爲NULL
Ø HOST_CUSTOM_DEBUG_CFLAGS/ TARGET_CUSTOM_DEBUG_CFLAGS:增加額外的編譯選項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:編譯之後文件保存路徑。默認爲<build-root>/out目錄;
Ø ADDITIONAL_BUILD_PROPERTIES:指定(增加)額外的屬性文件;
Ø NO_FALLBACK_FONT:設置是否只支持英文(這將減少image的大小)。<true, false>
Ø WEBCORE_INSTRUMENTATION:webcore支持;
Ø ENABLE_SVG:SVG支持;
Ø BUILD_ENV_SEQUENCE_NUMBER:編譯系列號;
綠色通道:好文要頂關注我收藏該文與我聯繫
android編譯大全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Android Build 系統詳解
winceos
2020-07-02 05:33:23
使用Qt Creator提高程序開發效率,解決煩惱和頭疼的問題
DrAbel
2020-05-31 11:20:00
FFmpeg的代碼結構和編譯系統
ericbars
2020-02-23 16:22:48
Makefile 中:= ?= += =的區別
adazone
2019-02-14 19:26:34
詞法分析器flex的簡單用法
wlym123
2018-09-03 17:55:21
理解 Android Build 系統
yapingmcu
2018-09-03 15:05:27
Mac OS Create case-sensitive build environment
winceos
2018-09-02 08:58:36
編譯系統搭建 小例子 ----- ydb
dongbinyu
2018-08-30 21:33:55
android編譯系統解析,執行make bootimage後mk文件的調用順序詳解
RadianceBlau
2018-08-22 00:51:31