转自:http://www.cnblogs.com/mengshu-lbq/archive/2011/11/19/2255566.html#2323758
如果直接在一个JAR中的/libs/armeabi下放个XXX.SO文件,然后导出成JAR包的后,如A.JAR,
在一个Android的程序中引用这个A.JAR,那么编译的时候就会出现一下的错误:
The library 'A.jar' contains native libraries that will not run on the device. The following libraries were found: - libs/armeabi/libXXX.so |
网上搜素索了下,还是没有找到解决方法。
只能采用如下的方式:
1.像科大讯飞那样(/Msc/assets/lib/msc.jet:文件前4个字节为:.ELF,而且文件末尾可以看到类是JNI的函数
直接将.SO文件改个扩展名,然后放到assert中,导出到JAR中,然后在启动的时候/或者首次被调用的时候将其拷贝到
调用程序的目录下,手动加载SO库文件
2.就是直接将JAR中的.SO文件放到目标程序的/libs/armeabi下,即可。
(以上提到的.SO文件都是针对ARM架构的,如果是x86的,注意将上文中的相应目录修改成/libs/x86/目录即可)
总之:Android将某个工程打成JAR包的时候,最好只包括源代码,另外就是可以包含一些文件,如assert或者自己定义的一些文件个数,
但不要保护资源文件(/res下所有文件内容都不要放在JAR包中)。