歡迎您光臨本站 註冊首頁

Android AndroidX的遷移

←手機掃碼閱讀     limiyoyo @ 2020-06-18 , reply:0

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字樣。因為類似還有GridLayoutManagerFragmentTransaction;`等。

4.2 第三方庫衝突

support庫和androidx是不能共存的,

  • 情況1 :當遷移結束之後,理論上講自己的項目使用的是androidx,但是老項目中導入了許多第三方的庫,這些舊版本的庫使用的是support

  • 情況2:這種情況發生在未進行遷移的項目中,由於導入了最新版的第三方庫,而該庫使用了androidx,也會報錯。

解決方法:

  • 情況1,更新第三方庫到最新版本或使用androidx的版本,如果這個庫沒有使用androidx的版本,那就要找其他的方案代替吧(不知道是否是正確的解決方案)。

  • 情況2:使用舊版本的第三方庫。

總之,就是多build,根據異常信息解決問題。

5 參考資料

AndroidX預覽

官方遷移教程

谷歌開發者-是時候遷移至 AndroidX 了

 


[limiyoyo ] Android AndroidX的遷移已經有268次圍觀

http://coctec.com/docs/android/show-post-238985.html