导入包含 .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'
}
}
我试图向我的应用程序添加一些新功能,因此我导入了一个包含 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'
}
}