Android 源码编译指南


AndroidAndroidAndroidAndroid 编译 大全 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=/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 文件 。其内 容如下 : ###DONOTEDITTHISFILE### include build/core/main.mk ###DONOTEDITTHISFILE### 可以 看出, 实际上 控制编 译的文 件是: 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/ ² 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 文件 的定义 ; Ø 设定 通用的 名称; Ø Include 必要 的子配 置文件 ; 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 文件 , 请将 该文件 拷贝到 根目 录下面 ,并命 名为 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 ; ØTARGET_BUILD_TYPE:设 置是 debug 还是 release 版本 ; 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 版; Ø DEBUG_MODULE_ModuleName:配 置单个 模块的 版本是 debug 还是 release; Ø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:编 译之后 文件保 存路径 。默认 为 /out 目录 ; ØADDITIONAL_BUILD_PROPERTIES:指 定(增 加)额 外的属 性文件 ; ØNO_FALLBACK_FONT:设 置是否 只支持 英文( 这将减 少 image 的大 小)。 ØWEBCORE_INSTRUMENTATION:webcore 支持 ; ØENABLE_SVG:SVG支持 ; ØBUILD_ENV_SEQUENCE_NUMBER:编 译系列 号;
还剩18页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 7 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

apacrazy

贡献于2013-03-20

下载需要 7 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf