一、为什么有模块化编译

假如修改了一部分的源码,就没有必要全部编译一遍了,那是相当痛苦的。
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模块的心酸经历


0 条评论

发表回复

您的电子邮箱地址不会被公开。