转自: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包中)。

posted on 2012-03-10 15:41  且听风止  阅读(1033)  评论(0编辑  收藏  举报