UnsatisfiedLinkError 加载so包失败解决方案

运行项目后报出如下异常:

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)。

发布了46 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/FooTyzZ/article/details/84062417