Android make编译的那些事


首先要理解编译三个m的含义:
m,是make
mm ,在编译单一模块的时候可以在当前目录下使用
mmm 编译指定目录

其中mmm后面要跟模块的根目录,不是所有的目录下都有子模块,那些含有Android.mk档案目录才是模块的根目录。

1、单独编译某模块,需要在mmm后面指定模块路径
如:mmm frameworks/base/native/video/jni

2、或者可以跳转到你想编译模块相对应目录下执行“mm”命令。
           就可以编译单独的模块,事实上,这个命令与mmm命令没有本质的区别。

3、用 m 编译全部的模块
         也可以在src目录下直接执行

修改APK应用:在packages中的应用如果修改后都可以单独编译。先执行
$. build/envsetup.sh #初始化
$mmm packages/providers/ContactsProvider/
##用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把system文件夹打包为system.img
##可以使用make snod将模块打包到system.img中,也可以使用 adb install *.apk安装
注:通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app
这时候通过 adb install out/target/product/generic/system/app/xxx.apk 安装你刚修改过的apk就可以在模拟器上看到你修改的效果了。

修改framework:如果在Contacts.java中修改了,必须重新编译下framework。先执行
$ . build/envsetup.sh #初始化
#网上有的说要执行 make update-api,实际上直接make PRODUCT-sdk-sdk就可以将修改后的framework编译到sdk中。 #编译framework后,那些修改了的应用可以不用再单独编译了。4~6分钟
$ make PRODUCT-sdk-sdk #重新生成SDK 10~20分钟

不是android的一个,但是经常用。make 2&>txt
将make的信息输出到txt中,如果make > txt则无法输入
Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出
make &>test
表示标准和错误全部输出
4、make -n &>txt
make -n 是现实编译命令,但是不去执行,非常有用
5.显示详细的编译过程信息(ndk)
在definitions.mk中有定义。

ifeq ($(V),1)
hide = $(empty)
else
hide = @
endif

要想把所有的编译命令输出来,只需要先export V=1就可以了。
输出NDK详细log
$NDK/ndk-build V=1 2>&1 | tee log.txt

相关内容