為什么遷移
現(xiàn)在來(lái)說(shuō),那就又是去年的事情了。到目前為止,androidx 庫(kù)很多版本已經(jīng)推出了正式穩(wěn)定版,版本詳情戳這里。對(duì)比以前 support 包, androidx 將各個(gè) library 分開(kāi)設(shè)立單獨(dú)的版本管理,這樣的好處顯而易見(jiàn)。第一沒(méi)有了之前 v4 v7 的繁瑣依賴(lài)。第二可以精確指定需要導(dǎo)入 library ,避免不必要的導(dǎo)入,從而減少代碼體積。關(guān)鍵新的 library 版本完全遵循 Semantic Versioning,而不是跟著 Android API 版本走。這樣讓我們通過(guò)版本號(hào)就能明確和當(dāng)前代碼是否兼容。
還有一點(diǎn),現(xiàn)在很多開(kāi)源項(xiàng)目已經(jīng)陸續(xù)完成 androidx 遷移,并且基本不再對(duì) support 提供最新支持。如果你不跟上這個(gè)節(jié)奏,那么今后你就沒(méi)法升級(jí)相關(guān)依賴(lài),老版本 bug 修復(fù)你也得不到任何支持。
怎么遷移
遷移已經(jīng)超級(jí)超級(jí)簡(jiǎn)單。Google 已經(jīng)考慮到我們的遷移成本,在 Android Studio 中已經(jīng)支持一鍵遷移。
這個(gè)的前提是你得更新你的 Android Studio 版本和 gradle 的版本。請(qǐng)注意,這兩個(gè)的版本都要更新。Android Studio 最低要求是 3.2 的版本,現(xiàn)在正式穩(wěn)定版本是 3.4.1
,gradle 支持 androidx 的最低版本是 3.2.1 ,請(qǐng)注意,一定要升級(jí)對(duì)應(yīng)的 gradle 版本。
接著就在頂部菜單欄中選擇 Refactor > Migrate to AndroidX 就可以完成相關(guān)遷移啦,這時(shí)候會(huì)出現(xiàn)一個(gè)提示框。

備份那個(gè)勾選可以去掉,然后點(diǎn)擊 Migrate 。接下來(lái) Android Studio 會(huì)遍歷你的工程文件,進(jìn)行相關(guān)包名和導(dǎo)包替換,并且會(huì)在你的 gradle.propertier 文件中增加兩個(gè)屬性。
android.useAndroidX=true
android.enableJetifier=true
上面說(shuō)了,項(xiàng)目導(dǎo)包啥的都會(huì)自動(dòng)替換,你自己確定就行。那么依賴(lài)的庫(kù)呢,enableJetifier 這個(gè)屬性設(shè)置為 true 時(shí)就會(huì)將你依賴(lài)的庫(kù)在打包時(shí)自動(dòng)替換為對(duì)應(yīng)的 androidx ,是不是很流弊。詳情請(qǐng)看官方文檔
遷移完成,build.gradle 中的相關(guān)依賴(lài)也會(huì)自動(dòng)更換,不過(guò)它更換的版本可能不是對(duì)應(yīng)的穩(wěn)定版本,而是最新的 beta 版本,咱們得手動(dòng)更新到對(duì)應(yīng)的穩(wěn)定版本。那么這個(gè)穩(wěn)定版本是多少呢,去查看相關(guān)文檔是不是很糾結(jié)。已經(jīng)有人幫我做了對(duì)應(yīng)插件,超帥。
還有 @NonNull ,在新版本中非空可空都已添加明確注解,這些細(xì)節(jié)地方可能也需要手動(dòng)去更新下。
怎么驗(yàn)證
傻瓜式遷移搞定后,一切來(lái)得太快太順利都讓自己開(kāi)始懷疑遷移是否完成,項(xiàng)目是否還 OK 。
驗(yàn)證其實(shí)也很簡(jiǎn)單,首先,你得驗(yàn)證項(xiàng)目能編譯過(guò),沒(méi)有 error ,lint 沒(méi)有額外的警告。我的經(jīng)驗(yàn)是遷移之后,導(dǎo)包更換成功,但是使用該類(lèi)時(shí)又會(huì)帶上全路徑,這個(gè)時(shí)候 lint 是能刷出來(lái)的,需要手動(dòng)改一改。接著,你得確定 support 包是否已經(jīng)被完全替換,不應(yīng)該出現(xiàn)兩者共存的情況。這里就有很多方法,我提供三種方案:直接查看工程文件最下方的 External Libraries 是否還有 support 依賴(lài);使用 ./gradlew -q :app:dependencies > dependencies.txt'看看對(duì)應(yīng)依賴(lài)關(guān)系中是否還有 support 依賴(lài);反編譯自己的包,看看里面還有沒(méi)有 support 相關(guān)的類(lèi)。