如何在Application.mk中设置APP-PLATFORM以匹配Android Studio 3.2.1中的targetSDKVersion

时间:2018-12-20 21:39:50

标签: android android-studio android-ndk android-gradle

我正在尝试将Y.C.Tung's AndroidLibSVM导入到我的项目中,但是当我在Android 6.0.1 Tablet上运行代码时,出现此错误:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy"

根据this postthis 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还是很陌生。感谢帮助!

1 个答案:

答案 0 :(得分:0)

你不知道。您的NDK API版本需要与您的minSdkVersion相匹配。不保证您的应用程序可以在低于NDK API版本的任何版本上运行。 externalNativeBuild自动处理此问题。如果您需要将API 28用于NDK库,则需要将minSdkVersion设置为28。

但是,我认为这不是问题所在。在过去的两周中,这个问题已经出现了三遍。看起来AndroidLibSVM是针对android-24或更高版本构建的。因此,它不能在早于该API级别的设备上使用(所有其他问题都试图在android-23上使用它)。