作者:随便他们好了 | 来源:互联网 | 2023-05-25 06:04
我在Android Studio中制作了一个使用两个库的应用程序.一个带有Android包装器和jar库的本机库.出于某种原因,如果将其他jar库编译到项目中,则不会加载本机库.因此,如果我只使用本机库运行应用程序,一切正常.我将另一个jar库添加到我的gradle文件并繁荣...一个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的问题,但这些都没有为我的问题提供解决方案.如果它是我使用的唯一库,我加载本机库没有问题...
1> Skywalker10..:
我发现了这个问题.其他的罐子我想添加内部使用C++库的支持armeabi
,armeabi-v7a
,x86
和mips
.我一直使用的本机库只支持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)目录中.