导入包含.so文件的aar库后出现UnsatisfiedLinkError

时间:2016-03-03 10:19:07

标签: android java-native-interface aar

我尝试在我的应用中添加一些新功能,所以我导入了一个包含a.so文件的aar库。但导入后,由于java.lang.UnsatisfiedLinkError,我的应用程序每次都崩溃了。在我的应用程序的lib目录(/data/app/my.package/lib/arm)中找不到所有本机库。如果我不进口aar lib,一切都很好。我该怎么做才能做到对?感谢。

3 个答案:

答案 0 :(得分:1)

首先,检查您使用的设备是否正确。

如果您已经这样做,那么架构之间肯定存在一些不兼容性。在我的例子中,例如我有一个只有armeabi拱的库,另一个库有armeabi和armeabi-v7。当我删除最后一个库的armeabi-v7时,一切正常。

答案 1 :(得分:1)

原因仍然未知,但我通过在app mudule的build.gradle中添加这些代码来解决这个问题:

android {
    ......
    packagingOptions {
        exclude 'lib/armeabi-v7a/libnative.so'
        exclude 'lib/x86/libnative.so'
    }
}

答案 2 :(得分:0)

我遇到了同样的问题!我可以告诉你如何以我的方式解决这个问题。 您的aar库必须是AndroidStudio库项目。 使用代码将其导入您的应用。库项目中的build.gradle必须声明.so文件路径。

sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
}

确保jniLibs.srcDirs正确无误!您可以在my blog

中看到这一点

我希望这会对你有所帮助!