1. 前言
AndroidX replaces the original support library APIs with packages in the androidx namespace. Only the package and Maven artifact names changed; class, method, and field names did not change.
宾舅,Google不再對(duì)android support
庫進(jìn)行維護(hù)彩倚,android support
中的API由命名空間AndroidX
下的軟件包進(jìn)行替換扶平,即相應(yīng)的包名
和Maven工件名
發(fā)生改變。
2. 遷移AndroidX
2.1 遷移之前的準(zhǔn)備
- 原有項(xiàng)目的
support
庫版本升級(jí)至28(Android 9)哥谷,這也是support library
的最后版本麻献,SDK 28 和AndroidX 1.0 是等效的。This is because AndroidX artifacts with version 1.0.0 are binary equivalent to the Support Library 28.0.0 artifacts.
勉吻,
compileSdkVersion 28
- 建議使用Android studio 3.2或更高版本,(當(dāng)前最新版已經(jīng)到了4.0)惑惶。
-
gradle-wrapper.properties
中Gradle插件版本不低于4.6短纵。
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
- 如果代碼在版本控制器中,建議在單獨(dú)的分支中遷移香到。
2.2 執(zhí)行遷移
- 在gradle.properties文件中添加下列項(xiàng)。
# Android 插件會(huì)使用對(duì)應(yīng)的 AndroidX 庫而非支持庫雷绢。
android.useAndroidX=true
# Android 插件會(huì)通過重寫現(xiàn)有第三方庫的二進(jìn)制文件理卑,自動(dòng)將這些庫遷移為使用 AndroidX,但并不完全自動(dòng)藐唠。
android.enableJetifier=true
- 如果是AS 3.2或更高版本,則提供了一鍵遷移踪宠,選擇菜單
Refactor-> Migrate to AndroidX
妈嘹,會(huì)提示備份當(dāng)前工程,勾選Backup project as Zip file
,可以自動(dòng)幫你備份他去。
image - 左下角提示倒堕,點(diǎn)擊
Do Refactor
image
3 遷移結(jié)果
在一鍵遷移之后,gradle文件中implementation的所有support庫被androidx替換媳搪,比如
implementation 'com.android.support:appcompat-v7:28.0.0'
變?yōu)?implementation 'androidx.appcompat:appcompat:1.0.0'
相應(yīng)類名也會(huì)發(fā)生改變
import android.support.v7.app.AppCompatActivity;
變?yōu)?import androidx.appcompat.app.AppCompatActivity;
所以骤宣,可以先看看上面兩項(xiàng)結(jié)果,如果沒有替換成功鲜结,可手動(dòng)替換活逆,相應(yīng)替換可查閱官方提供的CSV格式的依賴庫映射文件和類映射文件。
rebuild project
蔗候,如果編譯通過,那么恭喜你了锈遥,我反正是失敗了。
4 遷移出錯(cuò)
4.1 可手動(dòng)糾正的錯(cuò)
- 有的文件中沒能替換掉丽惶,需要按照上述兩項(xiàng)映射手動(dòng)替換爬立。
- 檢查gradle中通過
implementation
引入的庫,比如implementation androidx.recyclerview:recyclerview:1.0.0'
侠驯,則一鍵遷移后導(dǎo)入的類為import androidx.appcompat.widget.RecyclerView;
,需要替換為import androidx.recyclerview.widget.RecyclerView;
儒士,猜測(cè)只是全局替換掉support
字樣檩坚。因?yàn)?code>類似還有GridLayoutManager
诅福、FragmentTransaction
;
`等睹酌。
4.2 第三方庫沖突
support
庫和androidx
是不能共存的剩檀,
- 情況1 :當(dāng)遷移結(jié)束之后,理論上講自己的項(xiàng)目使用的是
androidx
沪猴,但是老項(xiàng)目中導(dǎo)入了許多第三方的庫,這些舊版本的庫使用的是support
壶辜。 - 情況2:這種情況發(fā)生在未進(jìn)行遷移的項(xiàng)目中担租,由于導(dǎo)入了最新版的第三方庫,而該庫使用了
androidx
奋救,也會(huì)報(bào)錯(cuò)。
解決方法:
- 情況1演侯,更新第三方庫到最新版本或使用
androidx
的版本背亥,如果這個(gè)庫沒有使用androidx
的版本,那就要找其他的方案代替吧(不知道是否是正確的解決方案)狡汉。 - 情況2:使用舊版本的第三方庫。
總之嵌莉,就是多build捻脖,根據(jù)異常信息解決問題。
5 參考資料
AndroidX預(yù)覽
官方遷移教程
谷歌開發(fā)者-是時(shí)候遷移至 AndroidX 了
本文若有出入可婶,請(qǐng)指正!
我是小小范同學(xué)椎扬。
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!