首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android编译系统(1)

2012-09-10 
Android编译系统(一)Android编译系统介绍:Android使用一个自定义的编译系统生成工具,程序,和文档。这篇文档

Android编译系统(一)
Android编译系统

介绍:
Android使用一个自定义的编译系统生成工具,程序,和文档。这篇文档提供了
Android编译系统一览和简单编译指令。

Android编译系统是基于make的,要求GNU Make的最新版本(注意Android使用GNU Make的高级特性,可能在GNU Make网站上还没有)。在编译之前,检查下你make版本,运行 make –v.如果你没有3.8及以上的版本,就需要升级你的make.

了解Android编译系统

了解makefile
一个makefile定义怎样编译程序。Makefile一般包含下列元素:

1.名字: 编译名称(LOCAL_MODULE := <build_name>)

2. 本地变量: 清除本地变量用CLEAR_VARS (include $(CLEAR_VARS)).

3. 文件:决定你的程序需要哪些文件:(LOCAL_SRC_FILES := main.c).

4. 标记:定义一些标记(LOCAL_MODULE_TAGS := eng development)

5. 库:
定义是否链接到其他库
(LOCAL_SHARED_LIBRARIES := cutils)

6. 模版文件:
包含让make工具生成特定目标的模版文件。(include $(BUILD_EXECUTABLE)).

下面的片断演示了一个典型的makefile
LOCAL_PATH := $(my-dir)include $(CLEAR_VARS)LOCAL_MODULE := <buil_name>LOCAL_SRC_FILES := main.cLOCAL_MODULE_TAGS := eng developmentLOCAL_SHARED_LIBRARIES := cutilsinclude $(BUILD_EXECUTABLE)(HOST_)EXECUTABLE, (HOST_)JAVA_LIBRARY, (HOST_)PREBUILT, (HOST_)SHARED_LIBRARY,
(HOST_)STATIC_LIBRARY, PACKAGE, JAVADOC, RAW_EXECUTABLE, RAW_STATIC_LIBRARY,
COPY_HEADERS, KEY_CHAR_MAP


上面的片断为了容易看清楚,人为地加上了换行符。




编译层次包含了下表描述的抽象层。

每一层都与一个或多个层相关联。例如,一个arch有多个board,每个board有多个device。

你可以在一个层中定义一个元素,以达到排除复制,简化维护的目的。

Layer

Example

Description

Product


myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk


产品层定义完整的移植产品的语法。


定义要编译哪些模块,怎么配置。基于区域或者基于特性,比如照相机,你可能要提供几个不同的版本。

Device

myDevice, myDevice_eu, myDevice_eu_lite


设备层代表设备的物理层。例如,北美设备可能包含QWERTY键盘,而在法国售卖的设备可能包含AZERTY键盘。外围设备一般与设备层连接。

Board


sardine, trout, goldfish


电路板层代表产品的原始图。可能还有外围设备连接到这一层。




Arch


arm (arm5te) (arm6), x86, 68k


体系层描述了在电路版上运行的处理器。


产品定义文件

产品定义文件定义产品专用变量。一个产品定义文件可以从别的产品定义文件继承,可以减少复制和简化维护。

在产品定义文件中维护的变量包括:


·
PRODUCT_DEVICE




·
LOCALES




·
BRANDING_PARTNER




·
PROPERTY_OVERRIDES



下面的片断演示了一个典型的产品定义文件:

//device/target/product/core.mkPRODUCT_PACKAGES := Home SettingsProvider ...//device/target/product/generic.mkPRODUCT_PACKAGES := Calendar Camera SyncProvider ...$(call inherit-product, target/product/core.mk)PRODUCT_NAME := generic//device/partner/google/products/core.mkPRODUCT_PACKAGES := Maps GoogleAppsProvider ...$(call inherit-product, target/product/core.mk)//device/partner/google/products/generic.mkPRODUCT_PACKAGES := Gmail GmailProvider ...$(call inherit-product, partner/google/products/core.mk)$(call inherit-product, target/product/generic.mk)PRODUCT_NAME := google_generic


编译Android平台

这一节描述了怎样编译Android默认的版本,一旦你顺利地编译了通用版本,你就可以开始为你的目标设备修改Android.


设备代码

下面两个选项,第一个产生更稳定的结果。

选项1:

创建buildspec.mk的本地版本。最容易的方法是进入你的设备目录,

执行下列指令:

% cp buildspec.mk.default buildspec.mk ; chmod u=rw buildspec.mk


默认的buildspec.mk.文件,所有的选项都是被注释的,为了建立个性化的配置环境,可以编辑buildspec.mk.



一旦你建立了你配置文件,你就能够通过执行make编译设备代码,在你第一次执行这个命令的时候,会花费很长时间,在双核机器上,考虑使用’-j2’(甚至’j4’)以加速编译。




% make -j2



选项2:

做一个通用的版本,
执行
source //device/envsetup.sh, 这个文件包含了必要的变量和函数定义,下面有描述:

% cd $TOP % . envsetup.sh % partner_setup generic
//select generic as the product % make -j4 PRODUCT-generic-user
你也可以用eng替换user, 生成一个调式版。

% make -j4 PRODUCT-generic-eng

热点排行