良心解析 | 搭建NDK环境历程及问题记录 暨 Android Studio 2.3.3 to 3.3 填坑之路(Update坑 + AVD坑 + NDK坑)...

前言(历程概况)


(前言部分有点日记性质,对整个历程做了一个概况,如果你时间紧迫,可以跳过这部分直接看正文部分正文部分分点分部分给出问题的描述和对应的解决方法)

去年差不多也是这个时候,补了TensorFlow的坑,今年补AS的,莫名倒是有点喜感。

话说前头,这里强调一下,本文所有下载加载过程都是没有使用VPN的,也就是说不用科学上网,但!!!需要优质的网络,优质的网络!!就是,昨天之前的话本文这些坑笔者怕是要费好大力气才搞的定,因为昨天在学校,要么用校园网——绝对填不了这些坑,点击AS的help菜单里面的check for updates以及SDK Manager的安装检测都被和谐掉了;要么用流量或者,找一个不是校园网的网络。。。在学校这显然也挺折腾的

废话不多说,解释一下标题,好多坑对吧,其实本文所有坑的起因,就是我寒假要开始了解NDK开发了,NDK开发之前我们需要搭一个环境,

在搭环境的时候,需要更新各种SDK各种tools,于是便到SDK Manager那边更新了一波SDK Platform 或SDK Tools (SDK和NDK等等包都更新到最新版),更新完之后,便开始出现各种错误了,

  • 首先,No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel64el-linux-android,这个先放下,文末详细说;

  • 然后Waiting for target device to come online解决之后模拟器变成了初代Android机?很骚;

  • 到这里SDK最新了,其他又没有报错,我暂时是没辙了,只能走最后一条路,更新 AS,2.3.3 到 3.3(这个时候其实已经解决了上面NDK的问题,文末详细说),也就是本文的大boss了,接着又遇到很多bug,逐一解决之后,模拟器的问题还是依旧是初代android机,这里果断删掉重新create一个模拟器,通过AVD Manager解决了这个问题;

  • 最后解决AS更新的遗留问题;


总的来说,本文解决了三个方面的坑:
  • Update坑:Android Studio 2.3.3 更新到 3.3 的普适坑;
  • AVD坑:模拟器莫名编程初代Android机,这里记录了我的解决方法;
  • NDK坑:No toolchains found in the NDK toolchains。。。


具体目录:

  • 0.NDK环境的搭建
  • 1.解决问题:运行程序时候,IDE一直停留在 "Waiting for target device to come online"
  • 2.升级Android Studio!
  • 3.最后通过AVD Manager解决“初代模拟器”问题
  • 4.接下来解决AS更新后遗留的普适问题
  • 5.解决No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel64el-linux-android

本文参考文章汇总





正文



0.NDK环境的搭建

NDK环境的搭建其实很简单,关键是找到一个相对优质网络,网速快,不要有什么对应的限制(不用科学上网,但是校园网是不行的),
具体操作:

  • 点击Tools,在下拉菜单中进入SDK Manager;
    9125154-8f1cb401723cce8c.png
  • 勾选LLDB、CMake、NDK,点击Apply进行下载即可:
    9125154-59c62afef9b2ba44.png


1. 解决问题:运行程序时候,IDE一直停留在 "Waiting for target device to come online"
  • 问题描述:在搭建NDK环境的时候,在SDK Manager处下载了NDK工具包,顺带更新了SDK,更新完毕之后,运行程序,出现下图这个问题;

    9125154-8806b2d29d5d8a6c.png

  • 主要原因:Build-Tools或者SDK Platform 或SDK Tools 有更新,造成版本不一致。笔者这个时候只更新了SDK Platforms到API 28,还没更新SDK Tools;

  • 解决办法:下载并安装更新所有对应的包(Status栏下面带Update的都给更新一波):

    9125154-07d934cf824dc8fc.png

  • 结果:更新完毕,运行;然后。。原来好端端的模拟器变成这样子。。很骚吧。。
    9125154-32a506f215ba6d74.png


2. 升级Android Studio!
  • 问题描述:续上,SDK Platform-Tools 和 SDK Tools 也都更新到最新了,其他地方也没什么不妥,然而我们发现虚拟机的问题还是存在;

  • 解决方法:无可奈何背水一战了,参考 Android studio2.3.3 to 3.0.1版本在线更新教程把 AS 2.3.3更新到最新版本(文章是3.0.1,现如今最新版本已是3.3了);

  • 结果:更新好了之后,打开一个旧项目,还是各种报错,如下图。。。

    9125154-9d4730264b2a5bf0.png

  • 再..解决办法:根据提示解决诸多问题(各种replaced),

  • 再..结果:运行起来虚拟机还是这样子。。。

    9125154-566d7eb30e322e72.png



3. 最后通过AVD Manager解决“初代模拟器”问题
  • 问题描述:续上,缘起搭建NDK环境,更新SDK Platform 后,出现两个问题,
    第一:运行程序时候,IDE一直停留在 Waiting for target device to come online,我们通过更新SDK Tools 解决;
    第二:解决第一个问题之后,运行程序,模拟器变成初代安卓机的问题,我们更新了Android Studio到最新版本,没有解决这个问题;

  • 解决之前的碰壁:
    好在更新之后 AS 3.3友好了很多,给出了提示:

    9125154-cb118333ea267e49.png

    觉得SDK Tools没问题啊,都已经更新到最新版本了;SDK Tools是没问题,可你忘了SDK Platforms(原来用的模拟器是 API 24的):
    9125154-781ee6b0b4c836b2.png

    行吧那更新一波:
    9125154-3d170c78fde12508.png

  • “碰壁”结果:自然还是没用,运行程序时模拟器还是初代android机;

  • 解决方法:果断地放下API 24了,使用AS3.3 创建新项目的时候AS已经提醒85%的设备已经被API 25覆盖,所以,干脆换个模拟器得了。。

进入AVD Manager(截图中API 24 的那个模拟器已经看不到了,因为被笔者删了...):
9125154-14fda2945f1bd046.png

Download一下新的API:


9125154-a0d4e90e3473e7f2.png

然后Next,Finish即可:
9125154-4cecd4beac0802c1.png
  • 结果:最后成功运行HelloWorld:
    9125154-700945e53452607f.png


4. 接下来解决AS更新后遗留的普适问题
  • 问题描述:方才更新了AS,新建了一个项目并成功跑出了HelloWorld,对吧,但是这是在AS3.3上新建的项目,自然没什么问题,对于原来AS2.3.3上创建的旧项目呢?毫无疑问,打开一个旧项目,编译时各种报错:
    9125154-5942bace0092aab0.png

发现它完全不买账对吧,AS2.3.3的产物根本就不想理你AS3.3的IDE,app的build.gradle文件都跟刚刚成功运行的Helloworld项目一模一样,可复制到了旧项目就是不行;

  • 解决方法:
    当然“不行”肯定是要带个双引号的咯,笔者翻了翻简书,还是有先行者将这个问题解决了,方法很简单,Add Google Maven repository and sync project嘛,就是在根目录(注意是根目录,IDE的报错都把你引到app目录下了)对应的build.gradle中加入google()mavenCentral()即可:(参考文章Android Studio 3.0 踩坑记录
    9125154-1250b676015134b5.png
allprojects {
    repositories {
        jcenter()
        google()
        mavenCentral()
    }
}
  • 结果:行了,到此便完美解决,运行一下:
    9125154-7a71c8b196823aaf.png


5. 解决No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel64el-linux-android
  • 问题描述:基于AS2.3.3我们把NDK包更新到最新版的r19,随后编译时出现报错——No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel64el-linux-android

  • 解决方法:把AS2.3.3升级到最新版(这里是AS3.3)即可;

  • 为什么呢?为什么把AS2.3.3升级到最新版(这里是AS3.3)就能解决了?

首先, 关于参考文章:No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel64el-linux-android
这篇文章的参考价值是它给了我NDK的下载地址,然而它的解决方法并不太适合笔者的情况。
文中说明这情况报错的原因是NDK包缺失。参考这篇文章, 到官网上下载对应的包,切取缺失的文件到本地ndk目录即可。这里官网是需要科学上网的,所以其实它适合的情况是你AS原来的NDK包是你自己去网上找来下载的,由此缺失时,可以用这种方法。
但其实我们到SDK Manager这里,只要网络质量好一些,是可以直接下载的,不用科学上网;

所以笔者是因为什么情况报这个错呢?
笔者不是因为包的缺失,我们看报错里面的关键词——No toolchains,再看一下官网对于NDK 19的描述——“不需要独立的工具链”,“Clang会自动找到它们”,看到这里其实可以说是水落石出了;

9125154-135fd1212e19c57e.png

究其原因,应该就是 “不需要独立的工具链”,“Clang会自动找到它们”这个新特性对于AS2.3.3来说,没能Hold住,因此报错,
No toolchains,其实人家r19都不需要 toolchains,自然就 No toolchains呗,只是AS2.3.3没有Hold住Clang而已。

所以若是基于AS2.3.3把NDK包更新到最新版的r19报这个错,只要升级一下AS到最新版(如笔者AS3.3),便解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌川江雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值