【问题标题】:Android studio: UnsatisfiedLinkError: findLibrary returned null - loading native libraryAndroid工作室:UnsatisfiedLinkError:findLibrary返回null - 加载本机库
【发布时间】:2015-03-24 16:30:38
【问题描述】:

我正在使用两个库的 Android Studio 中制作应用程序。带有 Android 包装器和 jar 库的本机库。 由于某种原因,如果将其他 jar 库编译到项目中,则不会加载本机库。因此,如果我仅使用本机库运行该应用程序,则一切正常。我将另一个 jar-library 添加到我的 gradle-file 并繁荣...... UnsatisfiedLinkError:

java.lang.UnsatisfiedLinkError: Couldn't load MobileOcrEngine from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.app-1, /vendor/lib, /system/lib]]]: findLibrary returned null

当我使用这个时,我的应用程序运行良好:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
    compile 'com.android.support:support-v13:21.0.2'
    compile project(':wheel')
}

尝试时出现错误:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
    compile 'com.android.support:support-v13:21.0.2'
    compile project(':wheel')
    compile files('libs/realm-0.78.0.jar')
}

或者当我尝试使用相同的库但使用 Maven 存储库时:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
    compile 'com.android.support:support-v13:21.0.2'
    compile project(':wheel')
    compile 'io.realm:realm-android:0.78.0'
}

或者如果我尝试将 jar 放在 jniLibs 文件夹中:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'src/main/jniLibs')
    compile 'com.android.support:support-v13:21.0.2'
    compile project(':wheel')
}

我不知道问题的根源在哪里。使用两个库之一,Android Studio 还是我做错了什么?

注意: 我知道 StackOverflow 上有很多关于 UnsatisfiedLinkErrors 的问题,但这些都没有为我的问题提供解决方案。如果它是我使用的唯一库,我加载本机库没有问题...

【问题讨论】:

    标签: android android-studio gradle realm unsatisfiedlinkerror


    【解决方案1】:
    defaultConfig {
        ...
    
        ndk {
            abiFilters "armeabi-v7a", "x86", "armeabi", "mips"
        }
    
    }
    

    【讨论】:

    • 您能否稍微解释一下为什么有人应该将此代码复制到他们的应用程序中?
    【解决方案2】:

    我发现了问题。我想添加的另一个 jar 在内部使用了一个支持 armeabiarmeabi-v7ax86mips 的 C++ 库。我一直使用的原生库只支持armeabi

    我用于测试的设备是 armeabi-v7a 设备。一直以来,当我使用本机库时,设备都会在我的 libs 目录的 armeabi-v7a 中检查库。如果在那里找不到,它会尝试 armeabi 目录。

    当我加载支持 4 种不同架构的另一个 jar 时,设备会加载 armeabi-v7a 库。当它为 jar 找到一个 armeabi-v7a 库时,它将尝试为相同架构加载本机库。如果没有找到该库,它将不会检查 armeabi 目录作为备份,因此 findLibrary 返回 null,因此 UnsatisfiedLinkError

    我通过为 armeabi 架构创建一个目录并将 armeabi-v7a 目录的 .so-library 复制到其中来解决它。

    【讨论】:

    • 您能解释一下如何解决您的问题
    • 在您的 jniLibs 目录中,有一个 armeabi 和 armeabi-v7a 的子目录。复制您的库,使其出现在两个架构(armeabi 和 armeabi-v7a)目录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多