运行项目后报出如下异常:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.oray.sunlogincontroldemo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.oray.sunlogincontroldemo-2/lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "libplugin_interface.so"
couldn't find "libplugin_interface.so 这里说不能加载到so包,看到APP下的build.gradle:
defaultConfig {
applicationId "com.xxxxx.xxxx.xxxxx"
minSdkVersion 15
targetSdkVersion 26
versionCode 2
versionName "1.0.1.1"
ndk {
abiFilters 'armeabi-v7a'//, 'x86_64', 'x86' , 'armeabi','arm64-v8a'
}
}
splits {
abi {
enable true
reset()
include 'armeabi', 'x86', 'armeabi-v7a','x86_64', 'arm64-v8a'
universalApk true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这里是新添加了spilts代码块后的,因为在安装应用时 安装失败了,弹出提示如下:
Installation failed with message INSTALL_FAILED_NO_MATCHING_ABIS.
It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.
WARNING: Uninstalling will remove the application data!
Do you want to uninstall the existing application?
于是我查找解决方案添加以下代码,同时在NDK添加了其余的cup类型,成功解决安装问题:
splits {
abi {
enable true
reset()
include 'armeabi', 'x86', 'armeabi-v7a','x86_64', 'arm64-v8a'
universalApk true
}
}
这段代码作用大概就是生成不同ABI版本的配置,这是我项目demo只给到这么一种,可以看到我的libs目录下只有armeabi-v7a这一种类型的so文件:
结果就是产生了一个新的异常,也就是UnsatisfiedLinkError 加载不到so包,苦思过后将spits 代码块删除,运行项目,神奇的是安装问题解决了,UnsatisfiedLinkError so包加载问题也解决了。
WTF! (TO_OT)。