从NDK版本16更新到NDK版本17时出错

时间:2018-06-20 16:26:53

标签: android android-studio cmake android-ndk

这是将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?谢谢。

1 个答案:

答案 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'
  }
}