原来说明下面描述的地址问题还可以。如此沮丧的T T
=============================================== =========
原来这与下载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.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"并将自动下载" a_v7.so"在wifi下。正在加载" a_v7.so"如果它存在使用System.load。 所有工作正常,除了约0.1%的用户与" java.lang.UnsatisfiedLinkError崩溃:未找到本地方法"。并且只撞了一次。
这里有一些关键代码:
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);
}
}