笔记二--Android的编译

来源:互联网 发布:js 数组增加键 编辑:程序博客网 时间:2024/06/03 15:53

Android的编译有自己的一套规则,主要利用的是mk文件。网上有太多关于它的解说了,这里不再赘述,只简单地介绍其编译工序:

进入源码目录(以笔者的开发环境为例,也就是cd/develop/download_froyo):

执行.build/envsetup.sh,这个脚本用来设置Android的编译环境。

执行choosecombo命令,这个命令用来选择编译目标(如目标硬件平台、eng还是user等)。一般而言,手机厂商会设置自己特有的编译选项。

执行完上面几个步骤后,就可以编译系统了。Android平台提供了三个命令用于编译,它们分别是make、mmm和mm,这三个命令的使用方法及其优劣如下:

make:不带任何参数,它用于编译整个系统,时间较长,笔者不推荐这种做法,除非读者想编译整个系统。

make MediaProvider:下面几个例子都以编译MediaProvider为例。这种方式对应于单个模块编译。它的优点是,会把该模块依赖的其他模块也一起编译。例如make libmedia,就会把libmedia依赖的库全部编译好。其缺点也很明显,它需要搜索整个源码来定位MediaProvider模块所使用的Android.mk文件,并且还要判断该模块所依赖的其他模块是否有修改。整体编译时间较长。

mmm packages/providers/MediaProvider:该命令将编译指定目录下的目标模块,而不编译它所依赖的模块。所以,如果读者是初次编译,采用这种方式编译一个模块往往会报错。错误的原因是因为它依赖的模块没有被编译。

mm:这种方式需要先用cd命令进入packages/providers/MediaProvider目录,然后执行mm命令。该命令会编译当前目录下的模块。它和mmm一样,只编译目标模块,mm和mmm命令编译的速度都很快。

从使用的角度来看,笔者有如下建议:

如果只知道目标模块的名称,则应使用make模块名的方式来编译目标模块。例如,如果要编译libmedia,则直接使用make libmedia即可。另外,初次编译时也要采用这种方法。

如果不知道目标模块的名称,但知道目标模块所处的目录,则可使用mmm或mm命令来编译。当然,初次编译还必须使用make命令,以后的编译就可使用mmm或mm了,这样会节约不少时间。

注意 一般的编译方式都使用增量编译,即只编译发生变化的目标文件,但有时则需重新编译所有目标文件,那么就可使用make命令的-B选项。例如make-B模块名,或者mm-B、mmm-B。在mm和mmm内部,也是调用make命令的,而make的-B选项将强制编译所有目标文件。

0 0
原创粉丝点击