这是将JNI与NDK结合使用的Android项目。我正在使用Android Studio 3.0.1构建该项目。我最近将NDK从版本16更新到版本17,希望可以提供更多的编译器优化。更新后,出现以下错误:
CMake错误位于C:/Users/John/AppData/Local/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake:312(消息): 无效的Android ABI:armeabi。 (不再支持armeabi。使用 armeabi-v7a。) 呼叫堆栈(最近的呼叫优先): C:/Users/John/AppData/Local/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/CMakeDetermineSystem.cmake:98(包括) CMakeLists.txt CMake错误:EnableLanguage之后未设置CMAKE_C_COMPILER CMake错误:EnableLanguage之后未设置CMAKE_CXX_COMPILER -配置不完整,发生了错误!
对于每个已弃用的ABI armeabi,mips和mips64,我都收到此错误。我知道应该从构建中删除这些ABI,但是找不到有关如何执行此操作的说明。我没有使用Application.mk,也没有在任何地方指定ABI。如何从Android Studio项目中删除这些未使用的ABI,或者更好的方法是,如何将项目设置为仅使用当前未弃用的ABI?谢谢。
答案 0 :(得分:5)
在根(项目) build.gradle 脚本中将gradle插件升级到3.1.2或更高版本就足够了。建议使用最新的插件,不仅要与最新的NDK兼容:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
}
您还必须更改 gradle / wrapper / gradle-wrapper.properties :
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip v.4.4
如果您负担不起这样的更改,则可以尝试跳过不推荐使用的ABI进行构建和打包:
android {
defaultConfig {
ndk {
abiFilters 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
packagingOptions {
doNotStrip '*/mips/*.so'
doNotStrip '*/mips64/*.so'
}
}