编译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库
我照着做了,然后接着又会报类似错误:
没有规则可以创建benchmarks需要的目录core-tests停止
这两个错误的根源就在于 :
其实看了这张图,解决问题的突破口已经十分明显了,而我采取和上面那个博客里类似的解决办法:
把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。
网友评论