【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )
生活随笔
收集整理的這篇文章主要介紹了
【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、報錯信息
- 二、解決方案 ( 指定 APK 打包動態庫的 CPU 架構 )
一、報錯信息
外部引用 so 動態庫 , 如果只有一個 armeabi-v7a 的動態庫 , 那么如果在 arm64 的手機上執行 , 就會報如下出錯誤 ;
2021-04-25 10:06:47.317 13637-13688/kim.hsl.webp E/libc: Access denied finding property "vendor.debug.egl.profiler" 2021-04-25 10:06:47.331 13637-13637/? E/AndroidRuntime: FATAL EXCEPTION: mainProcess: kim.hsl.webp, PID: 13637java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/kim.hsl.webp-BVtfbEbSAp4Nev90KIUIGg==/base.apk"],nativeLibraryDirectories=[/data/app/kim.hsl.webp-BVtfbEbSAp4Nev90KIUIGg==/lib/arm64, /system/lib64]]] couldn't find "libwebp.so"at java.lang.Runtime.loadLibrary0(Runtime.java:1012)at java.lang.System.loadLibrary(System.java:1669)at kim.hsl.webp.MainActivity.<clinit>(MainActivity.kt:17)at java.lang.Class.newInstance(Native Method)at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)at android.app.Instrumentation.newActivity(Instrumentation.java:1215)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6718)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)二、解決方案 ( 指定 APK 打包動態庫的 CPU 架構 )
上述報錯在低版本的 Gradle 插件 和 Gradle 中可以自動兼容 , 不需要進行額外設置 ;
在如下配置中 , 只有一個 armeabi-v7a 的動態庫 , 系統會自動兼容配置 , 運行時如果在 arm64 的手機上會自動向下兼容使用 armeabi-v7a 的動態庫 ;
如果在高版本的 Gradle 插件與 Gradle 中 , 如下配置 , 就會報上述錯誤 ;
這時就需要指定 APK 打包動態庫的 CPU 架構 , 在 Module 下的 build.gradle 構建腳本中 , 進行如下設置 ;
android {defaultConfig {//配置 APK 打包 哪些動態庫// 示例 : 如在工程中集成了第三方庫 , 其提供了 arm, x86, mips 等指令集的動態庫// 那么為了控制打包后的應用大小, 可以選擇性打包一些庫 , 此處就是進行該配置ndk{// 打包生成的 APK 文件指揮包含 ARM 指令集的動態庫abiFilters "armeabi-v7a" /*, "arm64-v8a", "x86", "x86_64"*/}} }完整配置文件 :
plugins {id 'com.android.application'id 'kotlin-android' }android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "kim.hsl.webp"minSdkVersion 14targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//配置 APK 打包 哪些動態庫// 示例 : 如在工程中集成了第三方庫 , 其提供了 arm, x86, mips 等指令集的動態庫// 那么為了控制打包后的應用大小, 可以選擇性打包一些庫 , 此處就是進行該配置ndk{// 打包生成的 APK 文件指揮包含 ARM 指令集的動態庫abiFilters "armeabi-v7a" /*, "arm64-v8a", "x86", "x86_64"*/}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'implementation files('libs\\libwebp.jar')testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }總結
以上是生活随笔為你收集整理的【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】NDK 导入外部 so 动态
- 下一篇: 【Android 安装包优化】WebP