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

UnsatisfiedLinkError after importing a aar library which contains a .so file

我试图向我的应用程序添加一些新功能,因此我导入了一个包含 a.so 文件的 aar 库。但是导入后,我的应用程序每次都崩溃,因为 java.lang.UnsatisfiedLinkError。在我的应用程序的库目录 (/data/app/my.package/lib/arm) 中找不到所有本机库。如果我不导入 aar 库,一切都很好。我应该怎么做才能使它正确?谢谢。

我遇到了同样的问题!我可以告诉你如何以我的方式解决这个问题。 您的 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

中看到这个

希望对您有所帮助!

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

如果你已经这样做了,那一定是架构之间存在一些不兼容的问题。以我为例,我有一个库只有 armeabi arch,而另一个库有 armeabi 和 armeabi-v7。当我删除最后一个库的 armeabi-v7 时,一切正常。

原因仍然未知,但我通过在应用模块的 build.gradle 中添加这些代码解决了这个问题:

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