1. 前言 AndroidX replaces the original support library APIs with packages in the androidx namespace. Only the package and Maven artifact names changed; ...
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工件名
發生改變。
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或更高版本,(當前最新版已經到了4.0)。
gradle-wrapper.properties
中Gradle插件版本不低於4.6。
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
- 如果代碼在版本控制器中,建議在單獨的分支中遷移。
2.2 執行遷移
- 在gradle.properties文件中添加下列項。
# Android 插件會使用對應的 AndroidX 庫而非支持庫。
android.useAndroidX=true
# Android 插件會通過重寫現有第三方庫的二進位文件,自動將這些庫遷移為使用 AndroidX,但並不完全自動。
android.enableJetifier=true
- 如果是AS 3.2或更高版本,則提供了一鍵遷移,選擇菜單
Refactor-> Migrate to AndroidX
,會提示備份當前工程,勾選Backup project as Zip file
,可以自動幫你備份。
- 左下角提示,點擊
Do Refactor
3 遷移結果
在一鍵遷移之後,gradle文件中implementation的所有support庫被androidx替換,比如
implementation 'com.android.support:appcompat-v7:28.0.0'
變為
implementation 'androidx.appcompat:appcompat:1.0.0'
相應類名也會發生改變
import android.support.v7.app.AppCompatActivity;
變為
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:這種情況發生在未進行遷移的項目中,由於導入了最新版的第三方庫,而該庫使用了
androidx
,也會報錯。
解決方法:
- 情況1,更新第三方庫到最新版本或使用
androidx
的版本,如果這個庫沒有使用androidx
的版本,那就要找其他的方案代替吧(不知道是否是正確的解決方案)。 - 情況2:使用舊版本的第三方庫。
總之,就是多build,根據異常信息解決問題。
5 參考資料
AndroidX預覽
官方遷移教程
谷歌開發者-是時候遷移至 AndroidX 了
本文若有出入,請指正!
我是小小範同學。
本文由博客一文多發平臺 OpenWrite 發佈!