如何解决UnsatisfiedLinkError?

时间:2018-08-13 15:20:50

标签: android android-studio gradle android-ndk

我正在使用Android Studio 3,并且试图在设备上使用OpenCL。 APK会在以下位置编译并失败:

  

java.lang.UnsatisfiedLinkError:dlopen失败:库“ libcutils.so”未找到

这是我的build.gradle:

apply plugin: 'com.android.application'
def appDir = getProjectDir().toString()
def includeDir = appDir + "/src/main/cpp/include/"
def libDir = appDir + "/src/main/jniLibs/"
def arm64lib = libDir + "/arm64-v8a/"
def armeabilib = libDir + "/armeabi-v7a/"

android {

compileSdkVersion 28
defaultConfig {
    applicationId "com.example.miche.androidopencltest"
    minSdkVersion 23
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        cmake {
            cppFlags "-frtti -fexceptions"
            cppFlags "-I${includeDir}".toString()
            cppFlags '-std=c++11'
        }
    }

}

splits{
    abi{
        enable true
        reset()
        include "armeabi-v7a"
        universalApk false
    }
}


project.ext.versionCodes = ['armeabi-v7a': 1]


buildTypes {
    release {
        //minifyEnabled false
        //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

我在哪里做错了?

编辑

即使在设备的/ lib /文件夹中,我也找不到正确的.so。

1 个答案:

答案 0 :(得分:1)

  

即使在设备的/ lib /文件夹中,我也找不到正确的.so。

根据https://developer.android.com/about/versions/nougat/android-7.0-changes

  

应用程序不应使用NDK中未包含的本机库,因为它们可能会在不同版本的Android之间更改或删除。

libcutils.so是私有NDK库之一。

如果该应用程序的目标API级别为24或更高,则您的应用程序将因为您尝试访问私有库而崩溃。请注意,您的应用通过设置targetSdkVersion 28来定位28。