
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不再對android support庫進行維護,android support中的API由命名空間AndroidX下的軟件包進行替換,即相應的包名和Maven工件名發(fā)生改變。
2. 遷移AndroidX
2.1 遷移之前的準備
- 原有項目的
support庫版本升級至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或更高版本,(當前最新版已經(jīng)到了4.0)。
-
gradle-wrapper.properties中Gradle插件版本不低于4.6。
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
- 如果代碼在版本控制器中,建議在單獨的分支中遷移。
2.2 執(zhí)行遷移
- 在gradle.properties文件中添加下列項。
# Android 插件會使用對應的 AndroidX 庫而非支持庫。
android.useAndroidX=true
# Android 插件會通過重寫現(xiàn)有第三方庫的二進制文件,自動將這些庫遷移為使用 AndroidX,但并不完全自動。
android.enableJetifier=true
- 如果是AS 3.2或更高版本,則提供了一鍵遷移,選擇菜單
Refactor-> Migrate to AndroidX,會提示備份當前工程,勾選Backup project as Zip file,可以自動幫你備份。
image - 左下角提示,點擊
Do Refactor
image
3 遷移結果
在一鍵遷移之后,gradle文件中implementation的所有support庫被androidx替換,比如
implementation 'com.android.support:appcompat-v7:28.0.0'
變?yōu)?implementation 'androidx.appcompat:appcompat:1.0.0'
相應類名也會發(fā)生改變
import android.support.v7.app.AppCompatActivity;
變?yōu)?import androidx.appcompat.app.AppCompatActivity;
所以,可以先看看上面兩項結果,如果沒有替換成功,可手動替換,相應替換可查閱官方提供的CSV格式的依賴庫映射文件和類映射文件。
rebuild project,如果編譯通過,那么恭喜你了,我反正是失敗了。
4 遷移出錯
4.1 可手動糾正的錯
- 有的文件中沒能替換掉,需要按照上述兩項映射手動替換。
- 檢查gradle中通過
implementation引入的庫,比如implementation androidx.recyclerview:recyclerview:1.0.0',則一鍵遷移后導入的類為import androidx.appcompat.widget.RecyclerView;,需要替換為import androidx.recyclerview.widget.RecyclerView;,猜測只是全局替換掉support字樣。因為類似還有GridLayoutManager、FragmentTransaction;
`等。
4.2 第三方庫沖突
support庫和androidx是不能共存的,
- 情況1 :當遷移結束之后,理論上講自己的項目使用的是
androidx,但是老項目中導入了許多第三方的庫,這些舊版本的庫使用的是support。 - 情況2:這種情況發(fā)生在未進行遷移的項目中,由于導入了最新版的第三方庫,而該庫使用了
androidx,也會報錯。
解決方法:
- 情況1,更新第三方庫到最新版本或使用
androidx的版本,如果這個庫沒有使用androidx的版本,那就要找其他的方案代替吧(不知道是否是正確的解決方案)。 - 情況2:使用舊版本的第三方庫。
總之,就是多build,根據(jù)異常信息解決問題。
5 參考資料
AndroidX預覽
官方遷移教程
谷歌開發(fā)者-是時候遷移至 AndroidX 了
本文若有出入,請指正!
我是小小范同學。
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

