Android Studio 版本升級,一些你可能不知道的東西

亦楓發表於2017-03-08

寫在前面


Android Studio 版本迭代更新比較頻繁,如果每次都解除安裝重灌,翻牆下載幾百兆的新版安裝包,體驗一定很差。浪費翻牆流量不說,每次都要重新配置之前的個性化設定等相關內容。所以,採取差異補丁包的增量升級方式顯然明智許多。

關於 Android Studio 的版本更新,其實很簡單,本沒有寫的必要,直接選擇 Check for Updates...,然後下載安裝補丁包即可。但是,如果當前版本和最新版本之間相差很多個版本,比如以前有次我使用的是 Android Studio 1.5.0 版本,而當時最新版本是 2.1.1 版本,就無法利用 Android Studio 本身提供的自動更新功能,怎麼辦呢?不妨跟著我一起嘗試一下。

準備工具


想要在大陸境內順利完成 Android Studio 版本更新的相關事宜,除了保證基本的網速,科學上網也是硬性條件。網路上的翻牆代理工具五花八門,這裡給大家安利一款我常用的 —— 雲梯,速度和穩定性目前是我所接觸過的代理工具中最穩定的一個,使用下面的推薦連結註冊賬戶還能優惠 10 元:

buytizi.com/?r=225bb619…

另外補充一點:本文所描述的內容都是基於 Mac OS X 系統中 Android Studio 的版本升級,Windows 系統中的操作大同小異,不再贅述。

手動更新


舉個例子。首先,檢查版本確認是否需要更新:[Android Studio] ==》[Check for Updates...], 如果不能翻牆,檢查失敗,會得到如下提示:

Android Studio 版本升級,一些你可能不知道的東西
check error.png

翻牆成功並且存在新版本時,顯示如下:

Android Studio 版本升級,一些你可能不知道的東西
check for updates.png

可以看到 Android Studio 在特定渠道下的當前版本和最新版本資訊。這裡需要說明一下,如果當前版本與最新版本之間相差的版本比較少,上圖中的第二個按鈕將顯示為“Update and Restart”,點選即可下載版本之間的 patch 包,完成自動更新。如果差距太大,下載按鈕就會顯示為上圖中的 "Download",點選將會進入最新版本的完整安裝包下載頁面。關於版本跨越太多無法使用 patch 包更新的問題後面再提,我們先來看下其它地方。

點選圖中 [ Updates ] 連結文字可以配置更新渠道等相關資訊。一般來說,Android Studio 的版本釋出會經歷四個階段,按時間順序依次如下:

  1. Canary Channel:金絲雀版本,開放新功能,同時 BUG 也很多。想第一時間嚐鮮的開發人員可以選擇這個渠道;

  2. Dev Channel:開發者版本,到了這個版本很多 BUG 已經得到了解決;

  3. Beta Channel:測試版,BUG 出現概率相對較小;

  4. Stable Channel:穩定版,官方釋出的正式版,釋出日期較晚。這是 Android Studio 預設的更新設定,也是大多數開發人員青睞使用的版本。

可以看出,例子中的 Android Studio 當前版本太低,無法使用自動更新功能。那麼我們怎麼知道新版本支援補丁包增量更新方式的相關舊版本有哪些呢?不妨開啟這個網址:

dl.google.com/android/stu…

網頁中包含各渠道最新版本所支援的 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 版本升級,一些你可能不知道的東西
IOException.png

更新完成之後,重啟 Android Studio,再檢視當前版本資訊:

Android Studio 版本升級,一些你可能不知道的東西
當前版本資訊.png

如圖所示,當前版本已經為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 版本,進行下一步更新操作了。

Gradle 更新


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)可以看看相關程式碼:

Android Studio 版本升級,一些你可能不知道的東西

在製作生成 patch 包時,Google只允許接近最新版本的有限個版本,比如上圖中的 patch 包,只支援最新版本前6個版本。關於這一點,我想 Google 也是為了避免由於版本跨越太多導致補丁太大而加大更新出錯的概率,同時也可以避免為每個舊版本都製作最新版本的差異包從而導致補丁包數量劇增。

之所介紹這個,就是想著我們在開發自己的 app 並實現版本增量更新的時候,不妨可以學習借鑑一下 Google 的做法。

歡迎關注我的微信公眾號


安卓筆記俠:專注 於Android 開發。

Android Studio 版本升級,一些你可能不知道的東西

相關文章