首页 > 解决方案 > 如何在 Application.mk 中设置 APP-PLATFORM 以匹配 Android Studio 3.2.1 中的 targetSDKVersion

问题描述

我正在尝试将YCTung 的 AndroidLibSVM导入到我的项目中,但是当我在我的 Android 6.0.1 平板电脑上运行代码时,出现此错误:

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

根据这篇文章或其他一些文章,可以通过升级 NDK 的application.mk / android.mk中的 APP-PLATFORM以匹配应用程序的 targetSDK 版本来修复该错误。但是,我找不到这些 .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 还是很陌生。感谢帮助!

标签: androidandroid-studioandroid-ndkandroid-gradle-plugin

解决方案


你没有。您的 NDK API 版本需要与您的minSdkVersion. 不保证您的应用程序可以在低于您的 NDK API 版本的任何版本上运行。externalNativeBuild自动处理这个。如果您需要为您的 NDK 库使用 API 28,则需要将您的设置minSdkVersion为 28。

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


推荐阅读