目录
一、为什么有模块化编译
假如修改了一部分的源码,就没有必要全部编译一遍了,那是相当痛苦的。
https://blog.csdn.net/weixin_44021334/article/details/106944138
二、模块的概念
就是哪个目录有Android.mk文件,这个目录就是个模块,可以被单独编译。
三、模块化编译教程
技巧:将envsetup.sh配置到环境变量
https://blog.csdn.net/hare_lee/article/details/6914248
https://blog.csdn.net/u011913612/article/details/52415948
Android 编译时:m、mm、mmm、mma、mmma的区别
https://www.cnblogs.com/onelikeone/p/9309238.html
https://blog.csdn.net/weixin_44021334/article/details/106944138
mm、mmm命令源码解析:https://blog.csdn.net/Google_huchun/article/details/58592998
mmm命令格式:
mmm <dir-1> <dir-2> ... <dir-N>[:module-1,module-2,...,module-M]
,其中,dir-1、dir-2、dir-N都是包含有Android.mk文件的目录。在最后一个目录dir-N的后面可以带一个冒号,冒号后面可以通过逗号分隔一系列的模块名称module-1、module-2和module-M,用来表示要编译前面指定的Android.mk中的哪些模块。
1.模块化编译遇到的坑
- 在执行mmm指令多次之后,make snod生成镜像的指令无效了,报错:
build/core/Makefile Warning: with dexpreopt enabled, you may need a full rebuild. make: *** 没有规则可以创建“snod”需要的目标“out/target/product/generic/root/file_contexts”。 停止。
目前我还不知道这是个什么错误,只能照着提示重新编译一遍了。
现在,我好像知道这个错误是怎么产生的了,就是在make snod的时候要把模拟器、Monitor啥的全部关闭。 - make:
没有规则可以创建“out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/import_includes”需要的目标“out/host/linux-x86/obj/SHARED_LIBRARIES/libcutils_intermediates/export_includes”。 停止
修改了memcmp.c文件,然后突然之间系统就无法编译。我还原之前修改的mk文件,把整个系统重新make也是如此。
而且,无论我make那个模块,都会出现这个错误:
将最近修改的源码所在的模块文件:system 、bionic、dalvik使用下载部分源码的方法重新下载,然后重新编译就没有问题了。可能是之前修改mk的方法不规范,导致错误一时难以发现,现在这个贯穿整个make过程,怎么也无法清除。
编译libcore的时候,上面类似错误再次出现:
https://blog.csdn.net/class_brick/article/details/71629756,按照博客改了,源码重新download了,再mmm编译还是报错。按照https://blog.csdn.net/Hearbeat/article/details/48445037重新执行make -j8之后,libcore仍然无法编译通过。(可能是系统源码的问题)
研究了好几天,问题终于解决:记一次Android4.4源码编译libcore模块的心酸经历
-
make: Nothing to be done for `all_modules'.问题解决
https://blog.csdn.net/newbie_zhu/article/details/50847647
出现这个问题,其实也不一定就是缓存。有可能是编译的时候,由于target(比如不同的cpu架构)所依赖的文件并不包括你修改的这个文件,你单方面地以为修改的文件会被依赖。 -
找不到mmm命令
https://blog.csdn.net/wu20093346/article/details/41929423
执行一下:. build/envsetup.sh
0 条评论