内容发布更新时间 : 2024/11/17 19:33:04星期一 下面是文章的全部内容请认真阅读。
Android 编译过程
第1页
Contents
1. 背景 ........................................................................................................................................ 3 2. 编译系统架构 ........................................................................................................................ 3 3. 编译步骤 ................................................................................................................................ 4 3.1 source build/envsetup.sh .......................................................................................................... 4 3.2 lunch ......................................................................................................................................... 5 3.3 make ......................................................................................................................................... 5 4. 5. 6.
AT Command ....................................................................................... 错误!未定义书签。 相关AT Command .............................................................................. 错误!未定义书签。 AT Command实例 ................................................................................................................ 6
第2页
1. 背景
Android编译系统(build system)集中于Android源码下的build/core下,其下有多个*.mk文件,另外还有一些shell脚本。
在android.git.kernel.org上可以看到Android build system作为一个项目一直在更新,因此,对于其编译系统的维护也是一个相当复杂的项目。为了实现Android在除ARM平台(x86、mips甚至一个全新的架构)上移植,必须深入了解Android编译系统。
2. 编译系统架构
Android编译系统完成的并不仅仅是对目标(主机)系统二进制文件、java应用程序的编译、链接、打包等,而且还有包括生成各种依赖关系、确保某个模块的修改引起相依赖的文件的重新编译链接,还包括目标文件系统的生成,配置文件的生成等,因此Android编译系统具有支持多架构(linux-x86、windows、arm等)、多语言(汇编、C、C++、Java等)、多目标、多编译方式。这些目标和结构决定其架构也很重要。
Android编译系统集中于build/core下,几个很重要的*.mk文件如下: main.mk(主控Makefile)
base_rules.mk(对一些Makefile的变量规则化)
config.mk(关于编译参数、编译命令的一些配置)
definations.mk(定义了很多编译系统中用到的宏,相当于函数库)
Makefile(这个Makefile特指build/core下的Makefile,此文件主要控制生成system.img,ramdisk.img,userdata.img,以及recorvery image,sdk等)
Binary.mk(控制如何生成目标文件)
Clear_vars.mk(清除编译系统中用到的临时变量)
Combo/linux-arm.mk(控制如何生成linux-arm二进制文件,包括ARM相关的编译器,编译参数等的设置)
Copy_headers.mk(将头文件拷贝到指定目录)
分散于各个目录下的Android.mk(控制生成局部模块的源码,名称所需头文件路径,依赖库等特殊选项)
Build/envsetup.mk(编译环境初始化,定义一些实用的shell函数,方便编译使用)
第3页