Android 系统提供了三种指令用于编译,他们分别为make、mmm、mm,这三个指令编译的优缺点如下:
1. make:不带任何参数,用于编译整个系统,编译时间比较长,除非是进行初次编译否则不建议此种做法;
例如:make MediaProvider z这种模式对应于单个模块的编译。它的优点是:会把该模块依赖的其他模块一起跟着编译。例如:make libmedia 就会把libmedia依赖库全部编译好。当然缺点也会很明显,那就是它会搜索整个源码来定位MediaProvider 模块所使用的Android.mk文件。并且还要判断该模块依赖的其他模块是否有修改。所以编译时间比较长。
2. mmm pacKages/providers/MediaProvider:该命令编译指定目录下的目标模块,而不编译它所依赖其他模块。所以,若是初次编译,采用此种模式编译一个模块往往会报错,错误的原因就在于它依赖的其他模块没有一起编译。
3. mm 这种编译方式一般需要cd 进入pacKages/providers/MediaProvider目录,然后执行mm指令。该命令会编译当前目录下的模块。它和mmm一样,只编译目标模块。mm和mmm编译的速度都很快。
从使用者的角度来考虑:
1. 如果只知道目标模块的名称,则建议使用 make 模块名 的方式编译目标模块。例如:如果要编译 libmedia 。则直接使用make libmedia即可,另外,初次编译时也要采用这种方法。
2. 如果不知道目标模块的名称,但知道目标模块所在的目录时,则可使用mm或者mmm 命令来编译。当然初次编译还必须使用make命令,以后编译就可以使用mmm或者mm了,这样会帮助我们节约不少时间。
注意:一般的编译方式都会采用增量编译,即只编译发生变化的目标文件,但有时则需要重新编译所有目标文件,那么就可以使用make 命令行的-B选项。例如:mm -B 模块名,或者mm -B、mmm -B。在mm 和 mmm内部也是调用make命令的,而make的-B选项将强制编译所有的目标文件。
来源:CSDN
作者:hanfengzqh
链接:https://blog.csdn.net/hanfengzqh/article/details/52806760