AndroidX終極遷移指南

AndroidX是啥?

關于這個問題直接引用官方的原話,相信大家就一目了然了。

AndroidX 是 Android 團隊用于在 Jetpack 中開發、測試、打包和發布庫以及對其進行版本控制的開源項目。

AndroidX 對原始 Android 支持庫進行了重大改進。與支持庫一樣,AndroidX 與 Android 操作系統分開提供,并與各個 Android 版本向后兼容。AndroidX 完全取代了支持庫,不僅提供同等的功能,而且提供了新的庫。此外,AndroidX 還包括以下功能:

  • AndroidX 中的所有軟件包都使用一致的命名空間,以字符串 androidx 開頭。支持庫軟件包已映射到對應的 androidx.* 軟件包。有關所有舊類到新類以及舊編譯工件到新編譯工件的完整映射,請參閱軟件包重構頁面。
  • 與支持庫不同,AndroidX 軟件包會單獨維護和更新。從版本 1.0.0 開始,androidx 軟件包使用嚴格的語義版本控制。您可以單獨更新項目中的 AndroidX 庫。
  • 所有新支持庫的開發工作都將在 AndroidX 庫中進行。這包括維護原始支持庫工件和引入新的 Jetpack 組件。

為什么要遷移到AndroidX?

關于這個問題很顯然主要是以下幾點:

  1. Support庫從28.0.0之后將不再更新

    不更新意味著就算你發現28.0.0里有bug官方也不會再改了,只會在androidx里改,官方依然這么任性,除非你不需要官方的support庫,否則的話遲早都要升級。

  2. Android Jetpack組件

    官方在jetpack中發布了很多組件來提高我們的開發效率、降低開發的復雜度。相信很多小伙伴已經愛上了jetpack組件,比如大家耳熟能詳的ViewModel、LiveData、Lifecycles、Room等。當然這些好用的組件都是需要Androidx的。

  3. 減少app體積

    Androidx針對混亂的support庫進行了重構,將支持庫拆分的更加精細,我們再也不會出現為了使用某個Api而引入整個的v4、v7庫。

    例如:我們之前要使用android.support.v7.widget.RecyclerView就需要導入v7庫,但androidx的話我們只需要導入androidx.recyclerview庫即可。

遷移終極攻略

在進入遷移之前,要注意下幾點:

  1. 請使用3.2及更高版本的Android Studio。
  2. 請在單獨的分支中進行遷移
  3. 在AndroidX遷移的時候千萬不要做任何版本開發、代碼重構工作,因為androidx遷移會涉及項目絕大部分的源碼文件。(當然也不要過于擔心影響app的原有功能,只是對support庫中涉及到的包名和類名進行改動)
  4. 一定要擦亮眼睛(因為就算用工具遷移,也會存在遺漏的地方,需要少量手動遷移)
  5. 沉得住氣、沉得住氣、沉得住氣(因為不同的項目依賴的三方庫各不相同,會遇到不同問題,但也就那幾類,不用害怕)
  6. 切記:要一步步來,不要一口吃個大胖子(按步驟走,可以在錯的時候更加精確的鎖定哪一步錯了)。

下面就正式開始了?。。?/p>

step1 升級版本

將compileSdkVersion調整為28,將項目的support庫版本升級到28.0.0。

因為androidx 1.0.0版本和support庫的28.0.0版本在二級制層面是等效的,也就是說這兩個版本的差異之處僅限于代碼包名稱,一切的API都是相同的。這樣你就只需要做最少的事情來解決28.0.0到androidx之前的遷移問題。

step2 開啟Jetifier

在項目的gradle.properties文件內添加如下代碼

android.useAndroidX=true
android.enableJetifier=true

useAndroidX=ture

android 插件會使用對應的 AndroidX 庫(而非支持庫)。

enableJetifier=ture

Android 插件會通過重寫其二進制文件來自動遷移現有的第三方庫以使用 AndroidX。

Jetifier絕對不會改變你的源碼還有你生成的代碼。

step3 更新依賴

將app依賴的三方庫盡量都升級到支持androidx的版本,這樣可以避免在遷移中發生沖突。

注意:如果你使用了kotlin,請將annotationProcessor替換為kapt

Step4 使用Android Sutdio遷移

使用 Android Studio 3.2 及更高版本,只需從菜單欄中依次選擇 Refactor > Migrate to AndroidX,即可初步完成將現有項目遷移到 AndroidX的工作。

當然一般情況,這一步執行完以后還有很多support庫的引用沒有更換為androidx。

如果使用Android Studio比較卡,可以參考支持庫映射文檔將支持庫替換androidx的庫,然后直接執行step5操作。

Step5 使用Bash script

事先聲明,這個腳本是比較暴力的查找替換腳本,使用完請做好測試工作

首先感謝Daniel Lew提供的腳本官方提供的映射文件可以幫助我們完成AndroidStudio遺漏的部分

image

請將腳本和映射文件下載到本地后,對腳本文件進行配置

MAPPING_FILEPROJECT_DIR是需要替換為您的實際路徑的

MAPPING_FILE 就是官方映射文件的路徑

PROJECT_DIR 就是項目目錄的路徑

配置完成后,直接將腳本文件拖入終端敲回車執行。

若報找不到sed之類的錯誤,請安裝gnu-sed

# 在終端執行如下命令
brew install gnu-sed

若報permission denied,請對腳本文件進行授權

# xxx.sh為你的腳本文件路徑
chmod 777 xxx.sh

Step6 收尾

前面的步驟執行完畢以后基本上沒有錯誤,或者一些簡單的小錯誤了。

祝大家遷移順利。。。

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。