如何从Android NDK中删除工具链?

如何从Android NDK中删除工具链?,android,android-ndk,toolchain,Android,Android Ndk,Toolchain,我有很多Android NDK版本,从6版到最新的14版(用于测试本机代码的构建)。为了节省存储空间,我已经从/toolschains/(更详细地说,从android ndk 10c)中删除了mips*工具链,因为我不需要它们 现在,在尝试使用Gradle构建库代码时,我遇到以下错误: 在NDK toolchains文件夹中找不到前缀为mipsel linux android的ABI的工具链 虽然在Application.mk中,我只有armeabi-v7和x86: APP_ABI:=armea

我有很多Android NDK版本,从6版到最新的14版(用于测试本机代码的构建)。为了节省存储空间,我已经从
/toolschains/
(更详细地说,从android ndk 10c)中删除了
mips*
工具链,因为我不需要它们

现在,在尝试使用Gradle构建库代码时,我遇到以下错误:

在NDK toolchains文件夹中找不到前缀为mipsel linux android的ABI的工具链

虽然在
Application.mk
中,我只有
armeabi-v7
x86

APP_ABI:=armeabi-v7a x86

build.gradle
中,我有:

android {
  compileSdkVersion 16
  buildToolsVersion "25.0.0"

  defaultConfig {
    ...

    ndk {
      abiFilters 'armeabi-v7a', 'x86'
    }
  }

  externalNativeBuild {
    ndkBuild {
      path 'jni/Android.mk'
    }
  }

  ...
}

如何正确删除不必要的工具链?

如果您想使用gradle,则不能。Gradle检查所有工具链,作为健全性检查的一部分


如果您使用的是绝对最新的NDK(r15 beta 2)和canary Studio/Gradle,那么您可以通过将删除的工具链标记为“已弃用”来完成此操作在
$NDK/meta/abis.json

中,我能够删除一些没有任何错误的工具链,因此我仍然很好奇检查工具链存在性的Gradle算法是什么。在旧NDK版本中测试代码的可构建性似乎没有什么价值。NDK版本与旧平台的向后兼容性相当好(只有目前仍处于测试阶段的r15放弃了android-9,至少转向了android-14,覆盖了5月2日仍处于活动状态的99%的设备)。无论如何,您的gradle集成只能使用一个NDK修订版。保持最新,并保留此修订版的所有工具链。这不是100%正确。V8需要工具链的特定版本,这在最新版本中是不存在的。链接也有一些重要的变化,例如10e和11之间存在差异(
将libc++的内联名称空间更改为std::u ndk1以防止平台libc++
)的ODR问题),这导致该库可以与10e链接,但不能与11链接为什么值得确保NDK 10e上的代码可编译性?