java.lang.UnsatisfiedLinkError:找不到本机方法。解决与其他共享库的冲突

时间:2015-08-28 03:47:17

标签: java android android-ndk java-native-interface shared-libraries

原来说明下面描述的地址问题还可以。如此沮丧的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);
        }
    }

0 个答案:

没有答案