没有比这
http://www.netmite.com/android/mydroid/development/pdk/docs/index.html
更官方的android开发指导材料了,闲着无事就翻译了。
本文为Android平台开发人员和Android设备制造商提供了底层开发指导。如果你对Android的上层应用开发很感兴趣,请访问Android Developers Site。
关于这份指导书
这份指导书按照逻辑划分为几个部分(见目录)。在一个持续的开发过程中,Android是一个复杂的工程项目,随着版本和API的改变,这份指导书将会不断更新。
至使用者
对于精通嵌入式Linux的工程师而言,这本书非常有价值。但是,它的重点并不在普通的嵌入式Linux开发,而是更多提供Android平台的特色。
初学Android
对于初识Android的人而言,建议阅读以下文档:
Android Develop site:这个网页提供了高版本的SDK文档;
Android Open Source Project site:这个网页指导你如何获取源代码,建立开发环境和从事简单的工程开发。
如果你准备在你的目标系统上定制和移植Android系统,请阅读系统编译概述。
Android用一个定制的编译系统产生一系列工具,编译文件和文档。这一小节概述了Android编译系统和如何建立一个简单的编译环境。
Android的编译系统是以GNU Make为基础,并且要求最新的版本(注意:Android所使用的最新的GNU Make规则可能并不会出现在GNU Make的网页上)。在开始之前,首先通过“make -v”检查下你的编译环境的版本。如果你不是3.80或者更高版本的话,你需要升级你的GNU Make版本。
理解makefile
makefile文件定义了如何去建立一个系统的编译规则。典型的makefile包含以下一些元素:
1. 名称:为你的编译目标取一个名称(LOCAL_MODULE := <build_name>);
2. 局部变量:用CLEAR_VARS清除局部变量(include $ (CLESR_VARS));
3. 所需要编译的文件:注明你的目标需要链接哪些源文件(LOCAL_SRC_FILES := main.c);
4. 标记:编译选项(LOCAL_MODULE_TAGS := eng development);
5. 库:定义你的目标所需要链接的库文件(LOCAL_SHARED_LIBRARIES := cutils);
6. 模板文件:所包含的这些模板文件定义了生成目标的类型,同时包含了生成此种目标的编译工具(include $(BUILD_EXECUTABLE))。
下面一段代码举例说明一个典型的makefile:
LOCAL_PATH := $(my-dir) include $(CLEAR_VARS) LOCAL_MODULE := <buil_name> LOCAL_SRC_FILES := main.c LOCAL_MODULE_TAGS := eng development LOCAL_SHARED_LIBRARIES := cutils include $(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
为了提高代码的可读性,上面这段代码中包含了一些的书写风格。
Layers
下表描述了编译系统所包含的抽象层。
每一个抽象层都是以一对多的关系和上面一层相关。例如,一种处理器架构可以运行在很多种目标板上,而每一个目标板又有很多设备。你可以在给定的抽象层上定义一个元素作为同一层元素的一个特例,这样就避免了复制和简化了维护。
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
架构层描述了你目标系统的处理器架构
编译Android系统
这部分说明如何编译缺省的Android版本。一旦你熟悉了普通的编译过程,你就可以尝试着编译一个能运行在你自己的设备上的Android系统。
设备编码
为了做一个普通Android编译过程,源码中build/envsetup.sh中包含了一些环境变量和函数定义。例如: