AndroidX是啥?
關于這個問題直接引用官方的原話,相信大家就一目了然了。
AndroidX 是 Android 團隊用于在 Jetpack 中開發、測試、打包和發布庫以及對其進行版本控制的開源項目。
AndroidX 對原始 Android 支持庫進行了重大改進。與支持庫一樣,AndroidX 與 Android 操作系統分開提供,并與各個 Android 版本向后兼容。AndroidX 完全取代了支持庫,不僅提供同等的功能,而且提供了新的庫。此外,AndroidX 還包括以下功能:
為什么要遷移到AndroidX?
關于這個問題很顯然主要是以下幾點:
-
Support庫從
28.0.0
之后將不再更新不更新意味著就算你發現28.0.0里有bug官方也不會再改了,只會在androidx里改,官方依然這么任性,除非你不需要官方的support庫,否則的話遲早都要升級。
-
Android Jetpack組件
官方在jetpack中發布了很多組件來提高我們的開發效率、降低開發的復雜度。相信很多小伙伴已經愛上了jetpack組件,比如大家耳熟能詳的
ViewModel
、LiveData
、Lifecycles
、Room
等。當然這些好用的組件都是需要Androidx的。 -
減少app體積
Androidx針對混亂的support庫進行了重構,將支持庫拆分的更加精細,我們再也不會出現為了使用某個Api而引入整個的v4、v7庫。
例如:我們之前要使用
android.support.v7.widget.RecyclerView
就需要導入v7庫,但androidx的話我們只需要導入androidx.recyclerview
庫即可。
遷移終極攻略
在進入遷移之前,要注意下幾點:
- 請使用3.2及更高版本的Android Studio。
- 請在單獨的分支中進行遷移
- 在AndroidX遷移的時候千萬不要做任何版本開發、代碼重構工作,因為androidx遷移會涉及項目絕大部分的源碼文件。(當然也不要過于擔心影響app的原有功能,只是對support庫中涉及到的包名和類名進行改動)
- 一定要擦亮眼睛(因為就算用工具遷移,也會存在遺漏的地方,需要少量手動遷移)
- 沉得住氣、沉得住氣、沉得住氣(因為不同的項目依賴的三方庫各不相同,會遇到不同問題,但也就那幾類,不用害怕)
- 切記:要一步步來,不要一口吃個大胖子(按步驟走,可以在錯的時候更加精確的鎖定哪一步錯了)。
下面就正式開始了?。。?/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遺漏的部分
請將腳本和映射文件下載到本地后,對腳本文件進行配置
MAPPING_FILE
和PROJECT_DIR
是需要替換為您的實際路徑的
MAPPING_FILE
就是官方映射文件的路徑
PROJECT_DIR
就是項目目錄的路徑
配置完成后,直接將腳本文件拖入終端敲回車執行。
若報找不到sed之類的錯誤,請安裝gnu-sed
# 在終端執行如下命令
brew install gnu-sed
若報permission denied,請對腳本文件進行授權
# xxx.sh為你的腳本文件路徑
chmod 777 xxx.sh
Step6 收尾
前面的步驟執行完畢以后基本上沒有錯誤,或者一些簡單的小錯誤了。
祝大家遷移順利。。。