java.lang.UnsatifiedLinkError:未找到本机方法。解决与其他共享LIB的冲突
结果表明,下面描述的地址问题是正常的。太沮丧了 ======================================================== 事实证明,这与下载v7无关。我还发现,当崩溃发生时,它在同一地址加载了另一个共享库。为什么会这样?如有任何建议,将不胜感激java.lang.UnsatifiedLinkError:未找到本机方法。解决与其他共享LIB的冲突,java,android,android-ndk,java-native-interface,shared-libraries,Java,Android,Android Ndk,Java Native Interface,Shared Libraries,结果表明,下面描述的地址问题是正常的。太沮丧了 ======================================================== 事实证明,这与下载v7无关。我还发现,当崩溃发生时,它在同一地址加载了另一个共享库。为什么会这样?如有任何建议,将不胜感激 08-26 21:10:24.640 D/dalvikvm(13686): Trying to load lib /data/data/com.xxx/mylib/libcodec_v7.so 0x41d3d748
08-26 21:10:24.640 D/dalvikvm(13686): Trying to load lib /data/data/com.xxx/mylib/libcodec_v7.so 0x41d3d748
08-26 21:10:24.875 D/dalvikvm(13686): Added shared lib /data/data/com.xxx/mylib/libcodec_v7.so 0x41d3d748
08-26 21:10:24.875 D/dalvikvm(13686): No JNI_OnLoad found in /data/data/com.xxx/mylib/libcodec_v7.so 0x41d3d748, skipping init
08-26 21:10:24.890 D/dalvikvm(13686): Trying to load lib /mnt/asec/com.xxx-1/lib/libfont.so 0x41d3d748
08-26 21:10:24.937 D/dalvikvm(13686): Added shared lib /mnt/asec/com.xxx-1/lib/libfont.so 0x41d3d748
08-26 21:10:24.937 W/dalvikvm(13686): No implementation found for native Lcom/xxx/xxxCodecWrapper;.decode:(I[B[BII)I
08-26 21:10:24.937 W/dalvikvm(13686): threadid=66: thread exiting with uncaught exception (group=0x41720700)
==============================以下是旧的描述============================
我的应用程序有一个内置的“a_v5.so”,并将在wifi下自动下载“a_v7.so”。使用System.load加载“a_v7.so”(如果存在)。
除了约0.1%的用户因“java.lang.UnsatifiedLinkError:Native method not found”而崩溃外,所有操作都正常。只坠毁过一次
以下是一些关键代码:
1. download finished thread
String tempPath = getTempPath();
if (null != tempPath && !tempPath.equals("")) {
deleteDirectory(tempPath);
File dir = new File(tempPath);
if (dir.mkdir()) {
FileUtils.uncompressZip(zipPath, tempPath);
synchronized (SOME) {
if (!alreadyUsingV7) {
deleteDirectory(dstPath);
FileUtils.rename(tempPath, dstPath);
}
}
}
}
2. loading thread
synchronized(SOME) {
boolean soFileExist = new File(libPath).exists();
if (soFileExist) {
try {
// load v7
System.load(libPath);
} catch (UnsatisfiedLinkError e) {
// load v5
SoLoadUtil.loadSoByName(ctx, libName);
}
} else {
// load v5
SoLoadUtil.loadSoByName(ctx, libName);
}
}
忘了记住,只有cpu架构师armv7和armv8的手机才会下载并使用这个armv7 soI。我发现我错过了使用过的jobject和jclass,我想这就是原因。