Android Studio 版本迭代更新比较频繁,如果每次都卸载重装,翻墙下载几百兆的新版安装包,体验一定很差。浪费翻墙流量不说,每次都要重新配置之前的个性化设置等相关内容。所以,采取差异补丁包的增量升级方式显然明智许多。
关于 Android Studio 的版本更新,其实很简单,本没有写的必要,直接选择 Check for Updates...,然后下载安装补丁包即可。但是,如果当前版本和最新版本之间相差很多个版本,比如以前有次我使用的是 Android Studio 1.5.0 版本,而当时最新版本是 2.1.1 版本,就无法利用 Android Studio 本身提供的自动更新功能,怎么办呢?不妨跟着我一起尝试一下。
想要在大陆境内顺利完成 Android Studio 版本更新的相关事宜,除了保证基本的网速,科学上网也是硬性条件。网络上的翻墙代理工具五花八门,这里给大家安利一款我常用的 —— 云梯,速度和稳定性目前是我所接触过的代理工具中最稳定的一个,使用下面的推荐链接注册账户还能优惠 10 元:
http://buytizi.com/?r=225bb619613ec09e
另外补充一点:本文所描述的内容都是基于 Mac OS X 系统中 Android Studio 的版本升级,Windows 系统中的操作大同小异,不再赘述。
举个例子。首先,检查版本确认是否需要更新:[Android Studio] ==》[Check for Updates…], 如果不能翻墙,检查失败,会得到如下提示:
翻墙成功并且存在新版本时,显示如下:
可以看到 Android Studio 在特定渠道下的当前版本和最新版本信息。这里需要说明一下,如果当前版本与最新版本之间相差的版本比较少,上图中的第二个按钮将显示为“Update and Restart”,点击即可下载版本之间的 patch 包,完成自动更新。如果差距太大,下载按钮就会显示为上图中的 “Download”,点击将会进入最新版本的完整安装包下载页面。关于版本跨越太多无法使用 patch 包更新的问题后面再提,我们先来看下其它地方。
点击图中 [ Updates ] 链接文字可以配置更新渠道等相关信息。一般来说,Android Studio 的版本发布会经历四个阶段,按时间顺序依次如下:
Canary Channel:金丝雀版本,开放新功能,同时 BUG 也很多。想第一时间尝鲜的开发人员可以选择这个渠道;
Dev Channel:开发者版本,到了这个版本很多 BUG 已经得到了解决;
Beta Channel:测试版,BUG 出现概率相对较小;
Stable Channel:稳定版,官方发布的正式版,发布日期较晚。这是 Android Studio 默认的更新设置,也是大多数开发人员青睐使用的版本。
可以看出,例子中的 Android Studio 当前版本太低,无法使用自动更新功能。那么我们怎么知道新版本支持补丁包增量更新方式的相关旧版本有哪些呢?不妨打开这个网址:
https://dl.google.com/android/studio/patches/updates.xml
网页中包含各渠道最新版本所支持的 patch 包详细情况。这里截取其中的一段用来展示说明:
<channel feedback="https://code.google.com/p/android/issues/entry?template=Android+Studio+bug" id="AI-2-eap" majorVersion="2" name="Android Studio updates"status="eap" url="http://tools.android.com/recent"> <build apiVersion="AI-143.1821.5" number="AI-143.2821654" version="2.1.1"> <message> <![CDATA[ <html>A new Android Studio 2.1.1 is available in the canary channel.<p/> <b>Please update to Android Studio v2.1.1</b>. This fixes a serious security vulnerability in all older versions of Android Studio.<br/></html> ]]> </message> <button download="true" name="Download" url="http://tools.android.com/download/studio/canary/latest/"/> <button name="Release Notes" url="http://tools.android.com/recent"/> <patch from="141.2456560" size="82"/> <!-- 1.5.1.0 --> <patch from="143.2664576" size="42"/> <!-- 2.1.0.0 --> <patch from="143.2682553" size="42"/> <!-- 2.1.0.1 --> <patch from="143.2712822" size="42"/> <!-- 2.1.0.2 --> <patch from="143.2730271" size="42"/> <!-- 2.1.0.3 --> <patch from="143.2739321" size="18"/> <!-- 2.0.0.20 --> <patch from="143.2759333" size="42"/> <!-- 2.1.0.5 --> <patch from="143.2765781" size="42"/> <!-- 2.1.0.6 --> <patch from="143.2771856" size="42"/> <!-- 2.1.0.7 --> <patch from="143.2783836" size="14"/> <!-- 2.1.0.8 --> <patch from="143.2790544" size="3"/> <!-- 2.1.0.9 --> </build> </channel>可以看出,在这些信息中包含有 Android Studio 的当前最新版本及其所支持使用 patch 包增量更新的所有版本信息和对应补丁大小。比如本例中的最新版本为 2.1.1,版本号为 AI-143.2821654,支持增量更新的最低版本为1.5.1.0,版本号为 141.2456560。而目前使用的是 1.5.0 版本,所以为了使用增量更新的方式更新到最新版本,至少先将本地 Android Studio 升级到 1.5.1.0 版本。
补丁包的下载链接格式如下,其中 $FROM 表示当前版本的版本号,$TO 表示要更新版本的版本号:
https://dl.google.com/android/studio/patches/AI-$FROM-$TO-patch-mac.jar通过选择 Android Studio ==> About Android Studio 可以查看当前 Android Studio 的版本号。所以,从 1.5.0 版本升级到1.5.1.0 版本的 patch 包下载链接为:
https://dl.google.com/android/studio/patches/AI-141.2422023-141.2456560-patch-mac.jar下载完成之后,使用系统或者 Android Studio 提供的命令行工具进入到 Android Studio安装包目录下( Contents 同级目录),输入如下命令并执行,经过短暂的等待便可完成手动更新的过程(注意 patch 包的路径,根据实际情况另行修改):
java -classpath /Users/yifeng/Desktop/AI-141.2422023-141.2456560-patch-mac.jar com.intellij.updater.Runner install Contents/注意:如果上述命令执行的目录位置错误,比如进入到了 Contents 目录里面,会出现如下错误:
更新完成之后,重启 Android Studio,再查看当前版本信息:
如图所示,当前版本已经为1.5.1,符合使用 Android Studio 自动更新功能升级至 最新版本2.1.1的最低版本要求。
执行 Android Studio ==> Check for Updates…,此时弹出的版本信息对话框的下载更新按钮显示为:Update and Restart,点击即可完成自动升级。
Android Studio 每次启动时默认自动检查更新,包括自身版本以及使用的插件版本。可能有时候我们想忽略某个版本的更新,可以在更新提示的弹窗中选择 Ignore This Update 操作,这样在下次执行检查更新时便会忽视该版本。但如果你误按了这个按钮,会发生什么呢?
比如当前使用 Android Studio 是 2.2 版本,最新版本为 2.3 版本,由于之前误操作选择了忽略 2.3 版本,执行检查更新时会得到如下提示:
You already have the latest version of Android Studio (Preview) installed.
实际上,我们知道不是最新版本,怎么办呢?在系统目录下有专门的文件存储着更新相关的配置。在以前比较旧的版本中,使用 other.xml 文件存储,路径如下:
~/Library/Preferences/AndroidStudioPreview/options/other.xml
注意,后来有所改变,使用 updates.xml 文件存储,路径如下:
Users/yifeng/Library/Preferences/AndroidStudio2.2/options/updates.xml
在 updates.xml 有这么一个 <ignoredBuildNumbers> 标签,控制着忽略配置,部分内容如下:
<ignoredBuildNumbers> <item value="162.2228.14" /> ...... </ignoredBuildNumbers>可以看到,其中 162.2228.14 正是之前误操作忽略的 Android Studio 2.3 版本的版本号。删除这一项 item,重启 Android Studio,便会自动检测到 2.3 版本,进行下一步更新操作了。
Android Gradle 插件伴随着 Android Studio 的更新而更新,似乎成为了必然。比如这次 Android Studio 2.3 版本需要 Gradle 3.3 版本才能使用 Instant Run 功能。然而不幸的是,Gradle 更新更加缓慢,很容易就使项目进入漫长的等待当中,让我们处于一个既不能继续开发又不能退出 Stop Task 的进退两难境界:
Refreshing ‘XXX’ Gradle project
当然你可以打开 module 目录 gradle/wrapper 下的 gradle-wrapper.properties 文件,修改 distributionUrl 一项,将其设置为电脑中已有的低版本 gradle ,避免更新操作。但这样就无法使用新版 Android Studio 中的一些新功能。怎么办呢?
复制 distributionUrl 对应链接,使用浏览器下载 gradle 文件,将其放置到自己的服务器上,获取新 Url 链接,替换 distributionUrl 值,重新同步 gradle 即可。或者,我们还可以找到系统中存放 gradle 的目录,比如 Mac OS 中的路径如下:
~/.gradle/wrapper/dists/
这个目录下存放着所有版本的 gradle 文件。将下载好的 gradle 文件复制至此,然后在项目中同步 gradle,这样也不失为一种不错的解决方案。
关于 Android Studio 的增量更新包的版本跨越限制的问题,我们通过反编译一个补丁包(patch)可以看看相关代码:
在制作生成 patch 包时,Google只允许接近最新版本的有限个版本,比如上图中的 patch 包,只支持最新版本前6个版本。关于这一点,我想 Google 也是为了避免由于版本跨越太多导致补丁太大而加大更新出错的概率,同时也可以避免为每个旧版本都制作最新版本的差异包从而导致补丁包数量剧增。
之所介绍这个,就是想着我们在开发自己的 app 并实现版本增量更新的时候,不妨可以学习借鉴一下 Google 的做法。
安卓笔记侠:专注于 Android 开发。