No toolchains found in the NDK toolchains错误解析与解决。

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: No toolchains found in the NDK toolchains错误解析与解决。

No toolchains found in the NDK toolchains错误解析与解决。

错误详情

之前的android项目中没有集成ndk,后来在sdk中下载了ndk相关文件,再次打开一个没有集成ndk的项目后,构建时会出现如下异常:

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

错误原因分析

解决错误第一步,去Google,然后我就找到了完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android这篇文章,按照步骤去官网下载最新的ndk包,发现toolchains目录下并没有mips64el-linux-android前缀的文件。

去官网下载最新的ndk,ndk下载地址,我这里下载是最新稳定版本r19c,如下图所示:

我们的期望效果是toolchains目录下会包含mips64el-linux-android前缀的文件,如下所示:

但现实很无情,并没有这个文件。效果如下:

最开始我以为是我没下载对文件,但比对文件的sha1值后发现一致,这就说明我没下载错。

另外,上面那篇blog中作者下载ndk版本是r16b,我这里下载的版本是r19c。如果简单粗暴的将r16b中的mips64el-linux-android前缀的文件copy进r19c的文件中,及时问题得到了解决,那也是不合理的,没有解释清楚为什么新版中没有mips64el-linux-android前缀的文件。

那我们就去看下为什么mips64el-linux-android前缀的文件在新版ndk中被移除了。

我们先去看下ndk的版本日志。ndk版本更新日志-r18

在这个页面的Known Issues模块中,我们发现有下面这段话,它的意思就是,这版的ndk所示不兼容Android Gradle插件的3.0及以下版本的。如果你在这类版本中看到了No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android这类提示,就升级你的gradle插件版本到3.1及以上。

检查了下当前项目的gradle plugin版本,是3.0.0。

解决方式——升级gradle插件版本

通过以上分析,我们只需要升级android项目中的gradle插件版本就可以了。

Android项目中Gradle插件的版本是在哪儿设置的呢?在项目根目录下的build.gradle配置文件中,据图如下所示:

具体版本号我们又该如何修改呢?请参看Android Gradle plugin。这里有个小技巧,如果你不知道最新的Gradle版本如何写,那么你创建一个新的Android项目,看下as默认使用的gradle插件版本号是多少,抄过来即可。这里我们选择3.2.1,设置完成后如下所示:

同步下gradle配置,会发现出现了下面这个错误提示,提示我们升级gradle版本,当前版本是4.1,最少需要升级到4.6。如下所示:

我们打开/gradle/wrapper/gradle-wrapper.properties文件,进行修改,具体指需要将版本号4.6修改为4.6即可。
修改之前:

修改之后:

接着我们同步下gradle文件即可。

参考

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

ndk下载地址

ndk版本更新日志-r18

Android Gradle plugin

相关文章
|
Java 图形学
Unity打包符号表 使用ndk addr2line.exe+符号表 将崩溃内存地址解析成函数名
符号表的路径,符号表发布出来的时候是一个zip文件要把它解压出来,里面会有两个文件:arm64-v8a(64位)、armeabi-v7a(32位)不过unity默认打包出来的都是64位的程序,所以这个前面加上你的真实路径+arm64-v8a\libil2cpp.sym.so就可以了。
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(一)
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(一)
537 0
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(一)
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )
【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )
205 0
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(三)
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(三)
354 0
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(二)
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )(二)
455 0
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
770 0
|
Java Android开发 C++
【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )(二)
【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )(二)
735 0
|
Java Android开发 对象存储
【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )(一)
【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )(一)
916 0
|
Java 编译器 Linux
【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )
【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )
606 0
|
Linux 编译器 Android开发
【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )
【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )
601 0

推荐镜像

更多