AndroidX是啥?
關(guān)于這個(gè)問題直接引用官方的原話,相信大家就一目了然了玩郊。
AndroidX 是 Android 團(tuán)隊(duì)用于在 Jetpack 中開發(fā)、測試始苇、打包和發(fā)布庫以及對(duì)其進(jìn)行版本控制的開源項(xiàng)目。
AndroidX 對(duì)原始 Android 支持庫進(jìn)行了重大改進(jìn)筐喳。與支持庫一樣催式,AndroidX 與 Android 操作系統(tǒng)分開提供,并與各個(gè) Android 版本向后兼容避归。AndroidX 完全取代了支持庫荣月,不僅提供同等的功能,而且提供了新的庫梳毙。此外哺窄,AndroidX 還包括以下功能:
- AndroidX 中的所有軟件包都使用一致的命名空間,以字符串
androidx
開頭。支持庫軟件包已映射到對(duì)應(yīng)的androidx.*
軟件包萌业。有關(guān)所有舊類到新類以及舊編譯工件到新編譯工件的完整映射坷襟,請(qǐng)參閱軟件包重構(gòu)頁面。- 與支持庫不同生年,AndroidX 軟件包會(huì)單獨(dú)維護(hù)和更新婴程。從版本 1.0.0 開始,
androidx
軟件包使用嚴(yán)格的語義版本控制抱婉。您可以單獨(dú)更新項(xiàng)目中的 AndroidX 庫档叔。- 所有新支持庫的開發(fā)工作都將在 AndroidX 庫中進(jìn)行。這包括維護(hù)原始支持庫工件和引入新的 Jetpack 組件蒸绩。
為什么要遷移到AndroidX衙四?
關(guān)于這個(gè)問題很顯然主要是以下幾點(diǎn):
-
Support庫從
28.0.0
之后將不再更新不更新意味著就算你發(fā)現(xiàn)28.0.0里有bug官方也不會(huì)再改了,只會(huì)在androidx里改患亿,官方依然這么任性传蹈,除非你不需要官方的support庫,否則的話遲早都要升級(jí)步藕。
-
Android Jetpack組件
官方在jetpack中發(fā)布了很多組件來提高我們的開發(fā)效率卡睦、降低開發(fā)的復(fù)雜度。相信很多小伙伴已經(jīng)愛上了jetpack組件漱抓,比如大家耳熟能詳?shù)?code>ViewModel、
LiveData
恕齐、Lifecycles
乞娄、Room
等。當(dāng)然這些好用的組件都是需要Androidx的显歧。 -
減少app體積
Androidx針對(duì)混亂的support庫進(jìn)行了重構(gòu)仪或,將支持庫拆分的更加精細(xì),我們再也不會(huì)出現(xiàn)為了使用某個(gè)Api而引入整個(gè)的v4士骤、v7庫范删。
例如:我們之前要使用
android.support.v7.widget.RecyclerView
就需要導(dǎo)入v7庫,但androidx的話我們只需要導(dǎo)入androidx.recyclerview
庫即可拷肌。
遷移終極攻略
在進(jìn)入遷移之前到旦,要注意下幾點(diǎn):
- 請(qǐng)使用3.2及更高版本的Android Studio。
- 請(qǐng)?jiān)趩为?dú)的分支中進(jìn)行遷移
- 在AndroidX遷移的時(shí)候千萬不要做任何版本開發(fā)巨缘、代碼重構(gòu)工作添忘,因?yàn)閍ndroidx遷移會(huì)涉及項(xiàng)目絕大部分的源碼文件。(當(dāng)然也不要過于擔(dān)心影響app的原有功能若锁,只是對(duì)support庫中涉及到的包名和類名進(jìn)行改動(dòng))
- 一定要擦亮眼睛(因?yàn)榫退阌霉ぞ哌w移搁骑,也會(huì)存在遺漏的地方,需要少量手動(dòng)遷移)
- 沉得住氣、沉得住氣仲器、沉得住氣(因?yàn)椴煌捻?xiàng)目依賴的三方庫各不相同煤率,會(huì)遇到不同問題,但也就那幾類乏冀,不用害怕)
- 切記:要一步步來蝶糯,不要一口吃個(gè)大胖子(按步驟走,可以在錯(cuò)的時(shí)候更加精確的鎖定哪一步錯(cuò)了)煤辨。
下面就正式開始了I烟巍!众辨!
step1 升級(jí)版本
將compileSdkVersion調(diào)整為28端三,將項(xiàng)目的support庫版本升級(jí)到28.0.0
。
因?yàn)閍ndroidx 1.0.0版本和support庫的28.0.0版本在二級(jí)制層面是等效的鹃彻,也就是說這兩個(gè)版本的差異之處僅限于代碼包名稱郊闯,一切的API都是相同的。這樣你就只需要做最少的事情來解決28.0.0到androidx之前的遷移問題蛛株。
step2 開啟Jetifier
在項(xiàng)目的gradle.properties
文件內(nèi)添加如下代碼
android.useAndroidX=true
android.enableJetifier=true
useAndroidX=ture
android 插件會(huì)使用對(duì)應(yīng)的 AndroidX 庫(而非支持庫)团赁。
enableJetifier=ture
Android 插件會(huì)通過重寫其二進(jìn)制文件來自動(dòng)遷移現(xiàn)有的第三方庫以使用 AndroidX。
Jetifier絕對(duì)不會(huì)改變你的源碼還有你生成的代碼谨履。
step3 更新依賴
將app依賴的三方庫盡量都升級(jí)到支持androidx的版本欢摄,這樣可以避免在遷移中發(fā)生沖突。
注意:如果你使用了kotlin笋粟,請(qǐng)將
annotationProcessor
替換為kapt
Step4 使用Android Sutdio遷移
使用 Android Studio 3.2 及更高版本怀挠,只需從菜單欄中依次選擇 Refactor > Migrate to AndroidX,即可初步完成將現(xiàn)有項(xiàng)目遷移到 AndroidX的工作害捕。
當(dāng)然一般情況绿淋,這一步執(zhí)行完以后還有很多support庫的引用沒有更換為androidx。
如果使用Android Studio比較卡尝盼,可以參考支持庫映射文檔將支持庫替換androidx的庫吞滞,然后直接執(zhí)行step5操作。
Step5 使用Bash script
事先聲明盾沫,這個(gè)腳本是比較暴力的查找替換腳本裁赠,使用完請(qǐng)做好測試工作
首先感謝Daniel Lew提供的腳本和官方提供的映射文件可以幫助我們完成AndroidStudio遺漏的部分
請(qǐng)將腳本和映射文件下載到本地后,對(duì)腳本文件進(jìn)行配置
MAPPING_FILE
和PROJECT_DIR
是需要替換為您的實(shí)際路徑的
MAPPING_FILE
就是官方映射文件的路徑
PROJECT_DIR
就是項(xiàng)目目錄的路徑
配置完成后赴精,直接將腳本文件拖入終端敲回車執(zhí)行组贺。
若報(bào)找不到sed之類的錯(cuò)誤,請(qǐng)安裝gnu-sed
# 在終端執(zhí)行如下命令
brew install gnu-sed
若報(bào)permission denied祖娘,請(qǐng)對(duì)腳本文件進(jìn)行授權(quán)
# xxx.sh為你的腳本文件路徑
chmod 777 xxx.sh
Step6 收尾
前面的步驟執(zhí)行完畢以后基本上沒有錯(cuò)誤失尖,或者一些簡單的小錯(cuò)誤了啊奄。
祝大家遷移順利。掀潮。菇夸。