我正在尝试将Y.C.Tung's AndroidLibSVM导入到我的项目中,但是当我在Android 6.0.1 Tablet上运行代码时,出现此错误:
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy"
根据this post或this one等,可以通过升级NDK的application.mk / android.mk中的APP-PLATFORM以匹配targetSDKversion来修复错误。应用。但是,我找不到这些.mk文件。他们应该是
“在项目的jni /目录的子目录中”,
但是我也不知道那在哪里。这是我的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.krautkremer.nils.mymirror"
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
我对NDK不太了解,我对Java / Android / Android Studio / Gradle还是很陌生。感谢帮助!
答案 0 :(得分:0)
你不知道。您的NDK API版本需要与您的minSdkVersion
相匹配。不保证您的应用程序可以在低于NDK API版本的任何版本上运行。 externalNativeBuild
自动处理此问题。如果您需要将API 28用于NDK库,则需要将minSdkVersion
设置为28。
但是,我认为这不是问题所在。在过去的两周中,这个问题已经出现了三遍。看起来AndroidLibSVM是针对android-24或更高版本构建的。因此,它不能在早于该API级别的设备上使用(所有其他问题都试图在android-23上使用它)。