首页 > 解决方案 > 从 Android Sudio 3.2.1 切换到 4.1.2 后的 java.lang.UnsatisfiedLinkError

问题描述

我有一个使用带有 ffmpeg*.so 库的 IJKPlayer 的 android 应用程序。在一个小型测试应用程序中,IJKPlayer 库是这样的引用:

apply plugin: 'com.android.library'

android {
    // http://tools.android.com/tech-docs/new-build-system/tips
    //noinspection GroovyAssignabilityCheck
    compileSdkVersion rootProject.ext.compileSdkVersion
    //noinspection GroovyAssignabilityCheck
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion 25
        targetSdkVersion rootProject.ext.targetSdkVersion
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs 'src/main/libs'
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

apply from: new File(rootProject.projectDir, "tools/gradle-on-demand.gradle");

这适用于 Android Studio 3.2.1。在什么都不做之后,使用 Android Studio 4.1.2 打开项目并构建/运行它,应用程序失败并出现错误:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.nvp.test.nvptest-N7MgBlkuRYXx_vQKF6j4jw==/base.apk"],nativeLibraryDirectories=[/data/app/com.nvp.test.nvptest-N7MgBlkuRYXx_vQKF6j4jw==/lib/arm64, /system/lib64, /system/vendor/lib64]]] couldn't find "libijkffmpeg.so"

知道为什么吗?查看错误消息,这些是android搜索库的目录吗: /lib/arm64, /system/lib64, /system/vendor/lib64

在这种情况下,它必须失败,因为库存储在/lib/armeabi-v7a. 必须做什么才能让android搜索这条路径?那么,为什么它不适用于 3.2.1 呢?

欢迎任何提示。

标签: androidjava-native-interfaceijkplayer

解决方案


我从头开始创建了一个新项目,并将其从 android studio 3.2.1 移至 4.1.2。现在它起作用了。因此,问题必须隐藏在android版本混乱的某个地方。


推荐阅读