首先介绍一下android的编译系统。与Linux kernel的编译系统相比较,内核依赖于makefile文件,从顶层的makefile递归调用子目录中的makefile文件,完成对源码文件的编译。Android的编译系统不在依赖于makefile文件,而是make文件Android.mk。android由一个脚本会搜索目录和子目录第一个出现Android.mk文件,根据Android.mk的内容去编译系统。Android.mk指定了如何将本地的源码编译成模块。
下面是android编译系统的框图:
Android模块的概念和Linux kernel的驱动模块没有任何关系。Android 源码中包含了许多的模块,模块的类型有很多种,例如:Java 库,C/C++ 库,APK 应用,以及可执行文件等。并且,Java 或者 C/C++ 库还可以分为静态的(.a)或者动态(.so)的,库或可执行文件既可能是针对设备(target)的,也可能是针对主机(host)的。不同类型的模块的编译步骤和方法是不一样,每种模块会调用不同的make文件进行编译。
Android有多少这样的模块呢?