[解决]No toolchains found in the NDK toolchains folder for ABI with prefix,

解决:Expected caller to ensure valid ABI: MIPS等等错误,

转载:https://www.jianshu.com/p/fd3d49c7f1f8

写在前面:通过我的实践发现,NDK编译报错,多半是Android studio的版本和NDK的版本不匹配,2.3的Android studio,用17年发布的14b的NDK可以使用,3.1的使用最新的NDK不会报错,所以如果下载NDK不能使用,根据Android studio发布时间找到对应NDK发布时间,应该就不会错了,

由于我自己使用的Android studio是2.3,自动下载的ndk缺是最新的,所以报错,我换了旧的,编译通过,点击这里下载不同版本NDK

 

通过Android Studio 的Sdk Manager安装NDK,安装完之后编译失败,报错信息如下:

No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

 

网上查了一通,答案大同小异,但都无法解决我的问题,只能自己研究了.

翻一翻NDK的文档,看到这样一段:

找到自己本地的android-sdk,如果下载了ndk的相关sdk,会有一个叫“ndk-bundle”的文件夹

里边有一个叫“toolchains”的文件夹

 

我们注意到里边确实没有mips64el相关的文件

 

解决办法如下:

  1. 点击这里通过浏览器单独下载NDK的包.
  2. 解压之后打开“toolchains”文件夹,跟android-sdk->ndk-bundle->toolchains文件夹做对比,找到其缺少的文件夹,复制过去

 

3.重新编译,问题解决.

最新补充

有同学反馈说下载的包里并没有找到我说的这个文件夹(mips64el...-4.9),我注意到官方最近确实新发了一版,最新的稳定版本(r18b)中确实已经移除了这个文件夹,大家可以去下载历史版本,r17c、16b版本中都可以找到这个文件夹

 另外,在最新的稳定版本(r18b)的变更日志中,我们可以看到这样一段话:

This version of the NDK is incompatible with the Android Gradle plugin version 3.0 or older. If you see an error like No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android, update your project file to use plugin version 3.1 or newer. You will also need to upgrade to Android Studio 3.1 or newer.

大概的意思就是说,这个版本与Gradle 3.0之前的版本不兼容,会报我们遇到的这个问题,所以,有一个更简单的解决办法:
如果项目允许的话,将Gradle版本升级到高于3.0的版本,同时也需要将Android Studio升级到3.1或更高的版本.

当然,还有一种更简单更纯粹的应付办法:报缺少哪个,就在前文提到的目录下新建一个对应名字的空文件夹即可。

 

### 问题分析 在 Android 构建过程中,出现错误 `No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android` 表明构建系统尝试为 `mipsel-linux-android` 这个 ABI 查找对应的工具链时失败。NDK 的工具链目录中没有与该 ABI 对应的编译器前缀,导致无法完成原生代码的构建。 此问题通常出现在以下几种情况: - 使用了较新版本的 NDK,但项目配置仍然依赖旧版 NDK 的工具链结构。 - 构建脚本中显式指定了不被当前 NDK 支持的 ABI。 - NDK 安装不完整或路径配置有误,导致某些工具链缺失。 - 项目兼容性配置不当,例如从低版本 AGP(Android Gradle Plugin)迁移至高版本时未调整相关参数。 --- ### 解决方案 #### 1. 检查并更新 NDK 版本 部分 NDK 版本不再支持 `mipsel-linux-android` 工具链,尤其是 NDK r18 及以后版本已移除了对 MIPS 架构的支持。若项目需要构建 MIPS 架构的库,需使用 NDK r17 或更早版本[^3]。 确认当前使用的 NDK 版本,并根据需求选择是否降级: ```bash $ANDROID_NDK_HOME/ndk-build --version ``` 如需更换 NDK 版本,可在 Android Studio 中进入 **File > Project Structure > SDK Location** 修改 NDK 路径,或通过 `local.properties` 文件指定: ```properties ndk.dir=/path/to/ndk-r17c ``` #### 2. 移除或过滤不支持的 ABI 如果项目并不强制要求构建 `mipsel-linux-android` 架构的二进制文件,可以在 `build.gradle` 中移除该 ABI 的构建目标,避免构建过程尝试查找不存在的工具链: ```groovy android { defaultConfig { ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86_64" } } } ``` 该方法适用于大多数现代设备,因为它们主要运行在 ARM 或 x86 架构上。 #### 3. 手动创建工具链软链接(仅限高级用户) 对于特定场景下仍需使用 MIPS 架构的构建任务,可尝试手动创建工具链软链接以模拟对应 ABI 的存在。例如,在 NDK 的 `toolchains` 目录下执行: ```bash cd $ANDROID_NDK/toolchains mklink /j mipsel-linux-android aarch64-linux-android-4.9 ``` 此操作将 `mipsel-linux-android` 映射到 `aarch64-linux-android-4.9` 工具链,可能在部分项目中绕过构建限制,但并不能保证完全兼容所有构建逻辑[^3]。 #### 4. 清理并重新安装 NDK 若怀疑当前 NDK 安装损坏或不完整,可通过 SDK Manager 删除现有 NDK 并重新下载安装: ```bash sdkmanager --uninstall "ndk;20.0.5594570" sdkmanager "ndk;20.0.5594570" ``` 确保 NDK 安装路径正确配置并在 `build.gradle` 中指定有效的 `ndkVersion`: ```groovy android { ndkVersion "20.0.5594570" } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值