我正在使用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。
答案 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。