美文网首页
记一次Android4.4源码编译libcore模块的心酸经历

记一次Android4.4源码编译libcore模块的心酸经历

作者: 修符道人 | 来源:发表于2020-01-09 14:59 被阅读0次

编译libcore模块,报错:

Copying: out/target/common/obj/JAVA_LIBRARIES/core-tests-support_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/core-tests-support_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/core-tests-support_intermediates/classes.jar
target Static Jar: core-tests-support (out/target/common/obj/JAVA_LIBRARIES/core-tests-support_intermediates/javalib.jar)
make: *** 没有规则可以创建“out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes-full-debug.jar”需要的目标“out/target/common/obj/JAVA_LIBRARIES/sqlite-jdbc_intermediates/javalib.jar”。 停止。
make: Leaving directory `/home/chenzhang/android_source_code/4.4'

删除libcore源码,重新下载,整个工程build可以通过。但是mmm ./libcore单独编译还是不通过。最终,通过不懈的努力,我终于解决了问题。我记录一下失败的经历和最终成功解决的办法。

失败的经历

对于我这个makefile的小白,对于错误当然只有百度了,只找到一个资料:https://blog.csdn.net/class_brick/article/details/71629756
他的实际的作用就是不生成core-tests库

coretest.jpg
我照着做了,然后接着又会报类似错误:
没有规则可以创建benchmarks需要的目录core-tests停止

这两个错误的根源就在于 :

mk.jpg
其实看了这张图,解决问题的突破口已经十分明显了,而我采取和上面那个博客里类似的解决办法:
把libcore里的include $(LOCAL_PATH)/benchmarks/Android.mk这行代码注释掉
编译,确实通过了,但是系统卡在android字样界面起不来。

成功的解决办法

上面这张图已经把解决问题的突破口指明了:找不到sqlite-jdbc。
最开始出现的错误:

make: *** 没有规则可以创建“out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes-full-debug.jar”需要的目标“out/target/common/obj/JAVA_LIBRARIES/sqlite-jdbc_intermediates/javalib.jar”。 停止。
make: Leaving directory `/home/chenzhang/android_source_code/4.4'

看我这篇文章https://www.jianshu.com/p/227fd539dc8e,充分理解makefile编译原理之后就能知道没有规则可以创建xxx需要的目标A停止这类错误其实就是A库找不到,搜索生成这个库的mk文件。

grep 'LOCAL_MODULE := sqlite-jdbc' -Inrw  --include=*.mk

先在libcore目录找,没有找到,然后在源码根目录找到


image.png

执行

mmm ./external/javasqlite/

再次执行

mmm ./libcore/

报了另外的错:


image.png

同理,找库所在mk并编译


image.png
mmm ./external/mockwebserver/

再次执行

mmm ./libcore/

然后,还是出现了一系列的错误,都是external目录下相关的库。看一下external目录,有171个mk,我不可能一个个去编译一遍吧?其实也没有这么恐怖,只要把下面的这些库重新编译一下就行了(可能某个库又依赖了其它的库,也需要mmm一下)。


image.png

所以,问题的根本是make并没有把所有的mk都会执行一遍,比如test相关的,需要我们自己手动=去make。

相关文章

网友评论

      本文标题:记一次Android4.4源码编译libcore模块的心酸经历

      本文链接:https://www.haomeiwen.com/subject/ifdyactx.html