【问题标题】:How to remove toolchains from Android NDK?如何从 Android NDK 中删除工具链?
【发布时间】:2017-10-24 17:03:13
【问题描述】:

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

现在在尝试使用 Gradle 构建库代码时出现以下错误:

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

虽然在Application.mk 我只有armeabi-v7x86

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

  ...
}

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

【问题讨论】:

  • 用旧的 NDK 版本测试代码的可构建性似乎没有什么价值。 NDK 版本很好地保持了与旧平台的向后兼容性(只有 r15,目前仍处于测试阶段,已经放弃了 android-9,最低转移到 android-14,覆盖了 5 月 2 日仍处于活动状态的 99% 的设备)。无论如何,您的 gradle 集成只能与一个 NDK 修订版一起使用。保持最新,并保留此版本的所有工具链。
  • 这不是 100% 正确的。例如。 V8 需要特定版本的工具链,而最新版本中没有。链接方面也有一些重大变化,例如10e 和 11 (Changed libc++’s inline namespace to std::__ndk1 to prevent ODR issues with platform libc++) 之间存在差异,导致该库可以与 10e 链接,但不能与 11 链接
  • 为什么值得在 NDK 10e 上确保代码可编译性?

标签: android android-ndk toolchain


【解决方案1】:

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

如果您使用的是绝对最新的 NDK (r15 beta 2) 和 Canary Studio/Gradle,那么您可能可以通过在$NDK/meta/abis.json.

【讨论】:

  • 我能够删除一些工具链而没有任何错误,所以我仍然很好奇什么是 Gradle 算法来检查工具链是否存在
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2018-09-14
  • 2021-06-12
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2013-08-13
相关资源
最近更新 更多