I、 遭遇
由于项目后续开发需要,不能直接连子库,需要将子库编译成jar或其他方式添加到主工程中。我想到的最简单的方法就是把子工程export成jar,然后将此jar添加到主工程。
跟想象的一样,很顺利,编译也通过了,但在运行的时候突然提示出错:
[2018-05-04 10:54:28 - Test4Unity13] The library 'libcv.jar' contains native libraries that will not run on the device.
[2018-05-04 10:54:28 - Test4Unity13] The following libraries were found:
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libnative_camera_r2.2.0.so
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libnative_camera_r2.3.3.so
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libnative_camera_r3.0.1.so
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libnative_camera_r4.0.0.so
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libopencv_java.so
[2018-05-04 10:54:28 - Test4Unity13] - libs/armeabi-v7a/libopencv_java3.so
……
然后就去请教度娘,n多同道中人指点如下方法:
在Perferences页面中,将Force error when extenal jars cpmtain native libraries中的选项勾去掉,然后Clean即可。
该配置项的位置:Eclipse->windows->Perferences->Android->Build
于是我也尝试了一下,编译通过,但运行的时候结果还是如此。
然后,我想既然上面的so文件系统不知道,那不如直接将库工程中的所有so,jar都copy到主工程中,然后再export 库工程的jar,这是很朴素的想法,相信很多xdjm也想到了:)
接着我按照上述思路,进行了如下尝试:
1)将缺失的so文件都copy到主工程lib下(我这里没有jar)
2)重新导出库工程的jar,注意这个时候就不要包括已经copy出来的这些so了
3)将新导出的jar copy到主工程的lib下
然后Clean,编译通过,跟预期的一样。
最关键的时刻来了,运行,成功!说明上述工作让编译系统找到了so了,接下来就要看看牵扯到的子库工程是不是好使了。
猜对了!
一切正常,问题解决。
II、总结
遇到此类文件,解决方法有:
方案一:
在Perferences页面中,将Force error when extenal jars cpmtain native libraries中的选项勾去掉,然后Clean重新编译。
该配置项的位置:Eclipse->windows->Perferences->Android->Build
方案二:
按照如下操作,然后编译运行:
1)将缺失的so文件都copy到主工程lib下(我这里没有jar)
2)重新导出库工程的jar,注意这个时候就不要包括已经copy出来的这些so了
3)将新导出的jar copy到主工程的lib下
总结一下:
如果导入库工程直接编译不通过(前提是文件不少哈),考虑用方案一,如果好使了就没问题了。不行再用方案二。
如果方案二还是解决不了,又没有好的思路,时间又紧急,那只能用最后的杀手锏——
把库工程整个挪过去(有点low哈,慎用-_-)
PS:再提醒xdjm,导入库工程时,一定要注意库工程是否有服务,广播之类(在manifest里面),一定要挪到主工程中去。
最后
以上就是冷酷眼神最近收集整理的关于The library 'xxx.jar' contains native libraries that will not run on the device. 解决方法(Eclipse)I、 遭遇II、总结的全部内容,更多相关The内容请搜索靠谱客的其他文章。
发表评论 取消回复