Android编译系统介绍
Android编译系统介绍
张长青
adamzhang@126.com
目录CONTENTS
一、背景知识
二、设计思想
三、主要流程
四、关键模块
五、 APK编译过程
六、 Android.mk文件
七、使用示例
一、背景知识
本章主要介绍学习Android编译系统所需要具备的一些背景知识。
1、关于Make
• make 是一个命令行工具,它解释 Makefile 中的规则。
• 在 Makefile 文件中描述了整个工程中所有文件的编译顺
序、编译规则和编译命令。
• Makefile有自己的书写格式、关键字、函数,而且在
Makefile中可以使用系统 shell 所提供的任何命令来完成
想要的工作。
1、关于Make
• Makefile 文件的规则包含了文件之间的依赖关系和更新
此规则目标所需要的命令,例如:
目标: [依赖]
[命令]
• Makefile已经在绝大多数的 IDE 开发环境中都在使用,
已经成为一种工程化的编译方法。
1、关于Make
在默认的方式下,在当前目录提示符下输入"make"命令,
系统将自动完成以下操作。
(1 )make工具会在当前目录下查找名为"Makefile"或
"makefile"的文件,GNU Make 工具在当前工作目录中按
照GNUmakefile、makefile、Makefile的顺序搜索
makefile执行文件。
(2 )如果找到,它会查找文件中的第一个目标去执行。如
果目标文件不存在,或是目标所依赖的文件修改时间较晚,
系统就会执行后面定义的命令来生成目标文件。
1、关于Make
(3 )如果目标所依赖的文件不存在,make会继续查找依赖
文件的生成规则,make会一层一层地去查找文件的依赖关
系,直到最终编译出第一个目标文件。
在查找的过程中,如果出现错误,比如最后被依赖的文件没
有找到,make就会直接退出并报错。
1、关于Make
Makefile 文件中主要包含了5项内容: 显式规则、隐晦规则
、宏定义、文件指示和注释。
1、关于Make
(1 )显式规则
显式规则说明如何生成一个或多个目标文件。这由makefile
的书写者明确指出,包括要生成的文件,生成目标文件需要
的依赖文件,生成目标文件的命令。例如:
foo.o : foo.c defs.h # foo模块,目标和依赖之间使用分号分割
cc -c -g foo.c
foo.o是目标,foo.c和defs.h是目标所依赖的源文件,命令
为"cc -c -g foo.c" (此行一定要以Tab键开头)。这个规则
包括以下两个主要内容:文件的依赖关系:foo.o依赖于
foo.c和defs.h文件,如果foo.c和defs.h的文件日期要比
foo.o新,或是foo.o不存在,那么依赖关系发生。cc命令说
明了如何生成foo.o文件。
1、关于Make
(2 )隐晦规则
由于make有自动推导的功能,它会根据依赖关系决定源文件
是否要重新编译以及源文件之间的编译顺序,所以隐晦规则可
以让程序员简单方便地书写makefile文件。
(3 )宏(变量)的定义
在makefile中需要定义一系列的宏(变量),宏(变量)一般
都是字符串,类似于C语言中的宏。当makefile被执行时,其
中的变量都会被扩展到相应的引用位置上,这一内容在前