安卓无法加载'.so.1'文件



嗨,我正在开发一个Android原生应用程序。

有依赖于某些"xyz.so.1"文件的"abc.so"文件。在构建之前,所有必需的文件都可以在项目结构中使用,但".so.1"不是生成的.apk文件的一部分(我通过解压缩检查了apk文件)。

这会导致在尝试运行应用程序时出现"'java.lang.UnsatisfiedLinkError'无法从加载程序 dalvik 加载'abc.so.1'"。

我不想推送 .so.1 文件,因为手机没有植根并在生产版本上运行。如何将 .so.1 文件作为 APK 的一部分包含在内?

谢谢。

我认为您还没有通过JNI将本机库加载到Java的概念。

首先,您在 java 中定义本机方法并在本机中执行相应的实现并编译它(您必须按照命名约定 1) 注册本机方法 2) 在 jni_onload 中注册本机方法......我想你一定已经这样做了,如果不检查 http://www.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html)

接下来,必须先加载库,然后才能对本机进行任何调用。这必须完成一次。您可以通过定义以下内容在活动中执行此操作:

静态{

System.loadLibrary("mylib.so");

}

请注意,在编译库时,您将获得 libXYZ.so 库名称,但是在java中加载库时,应省略"lib",只需system.loadlibrary(XYZ.so)如果您使用的是 NDK,该库已经复制到 Java 项目中> 库> armeabi 文件夹中,如果没有,您必须在那里复制您的 lib.so

现在,如果您有多个共享库,则应首先加载依赖项最少 lib.so,然后是第二个等。

静态 {

System.loadLibrary(independent_lib.so);//应该只依赖于 android libs System.loadLibrary(next_dependent_lib1.so);可以依赖安卓库和independent_lib.so System.loadLibrary(next_dependent_lib2.so);可以依赖安卓库,independent_lib.so,next_dependent_lib1.so...........

}

如果混乱,VM 将无法链接库并引发未满足的链接错误。

最后,所有这些.so s将成为您的apk的一部分,并且只会推送到系统库运行时。除非它是有根的手机,否则您无法提取 .so。如果您遵循上述方法,则无需将任何 .so 推送到系统。仅构建在 eclipse/cygwin 上并运行

希望这有帮助,

问候什里什

最新更新