遷移AndroidX

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工件名發生改變。android

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 執行遷移

  1. 在gradle.properties文件中添加下列項。
# Android 插件會使用對應的 AndroidX 庫而非支持庫。
android.useAndroidX=true
# Android 插件會經過重寫現有第三方庫的二進制文件,自動將這些庫遷移爲使用 AndroidX,但並不徹底自動。
android.enableJetifier=true
  1. 若是是AS 3.2或更高版本,則提供了一鍵遷移,選擇菜單Refactor-> Migrate to AndroidX,會提示備份當前工程,勾選Backup project as Zip file,能夠自動幫你備份。
  2. 左下角提示,點擊Do Refactor

3 遷移結果

在一鍵遷移以後,gradle文件中implementation的全部support庫被androidx替換,好比app

implementation 'com.android.support:appcompat-v7:28.0.0' 
變爲
implementation 'androidx.appcompat:appcompat:1.0.0'

相應類名也會發生改變gradle

import android.support.v7.app.AppCompatActivity;
變爲
import androidx.appcompat.app.AppCompatActivity;

因此,能夠先看看上面兩項結果,若是沒有替換成功,可手動替換,相應替換可查閱官方提供的CSV格式的依賴庫映射文件類映射文件ui

rebuild project,若是編譯經過,那麼恭喜你了,我反正是失敗了。google

4 遷移出錯

4.1 可手動糾正的錯

  1. 有的文件中沒能替換掉,須要按照上述兩項映射手動替換。
  2. 檢查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是不能共存的,spa

  • 狀況1 :當遷移結束以後,理論上講本身的項目使用的是androidx,可是老項目中導入了許多第三方的庫,這些舊版本的庫使用的是support
  • 狀況2:這種狀況發生在未進行遷移的項目中,因爲導入了最新版的第三方庫,而該庫使用了androidx,也會報錯。

解決方法:插件

  • 狀況1,更新第三方庫到最新版本或使用androidx的版本,若是這個庫沒有使用androidx的版本,那就要找其餘的方案代替吧(不知道是不是正確的解決方案)。
  • 狀況2:使用舊版本的第三方庫。

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

5 參考資料

AndroidX預覽
官方遷移教程
谷歌開發者-是時候遷移至 AndroidX 了code


本文如有出入,請指正!
我是小小范同窗。教程


本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索