遷移至AndroidX(Migrate to AndroidX)
瞭解AndroidX
谷歌的文件工作做得比國內任何一家網際網路公司都要好,直接參考安卓開發者網站: ofollow,noindex">AndroidX Overview
遷移到AndroidX
-
儲存當前工作空間狀態,萬一遷移出錯可以恢復當前狀態。當然Android Studio已經想到了這一點,在開始遷移(migrate)之前可以選擇幫你打一個zip包進行另存(Backup project as Zip file)。
Backup project as Zip file
-
如果當前Android Studio是3.2及以上版本,直接點選單欄Refactor > Migrate to AndroidX
報錯及修改:
- You need to have at least have compileSdk 28 set in your module build.gradle to migrate to AndroidX.
之前建立的老專案依賴版本一般都不會到28,故需要修改到最新的28,新建立的專案也得注意依賴版本得是28以上才行。
修改: 主Module的 build.gradle 中
compileSdkVersion 28
- The gradle plugin version in your project build.gradle file needs to be set to at least com.android.tools.build:gradle:3.2.0 in order to migrate to AndroidX.
同理保證gradle外掛是最新版本。
修改project 的 build.gradle :
classpath 'com.android.tools.build:gradle:3.2.0'
報錯如下:
Minimum supported Gradle version is 4.6. Current version is 4.4.
修改 gradle-wrapper.properties 中:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
到這裡常規遷移工作已經全部完成了。
- 找不到android.support.annotation.CallSuper; android.support.annotation.UiThread
以上提醒事項都完成之後編譯還是出錯了。發現在build目錄自動生成的所有XXXactivity_ViewBinding都報找不到註解 @UiThread @CallSuper,看這個自動生成類的名字大概就可以猜到是ButterKnife出問題了
想到之前看到過JakeWharton早就為ButterKnife相容了androidX,
找到ButterKnife的倉庫看到已經升級到9.0.0-rc1了,升級至9.0.0-rc1後再次編譯一次。
- 此時已經可以運行了,但是build還是會報錯
ERROR: [TAG] Failed to resolve variable '${animal.sniffer.version}' ERROR: [TAG] Failed to resolve variable '${junit.version}'
上網一查: stackoverflow
直接File->Invalidate Caches / restart,不再報錯了。
- 如果是老專案中引入了第三方框架,自動遷移過程中在gradle.properties已經自動為我們添加了兩個配置,如果是手動遷移需要自己新增:
With Android Studio 3.2 and higher, you can quickly migrate an existing project to use AndroidX by selecting Refactor > Migrate to AndroidX from the menu bar. If you have any Maven dependencies that have not been migrated to the AndroidX namespace, the Android Studio build system also migrates those dependencies for you when you set the following two flags to true in your gradle.properties file: android.useAndroidX=true android.enableJetifier=true To migrate an existing project that does not use any third-party libraries with dependencies that need converting, you can set the android.useAndroidX flag to true and the android.enableJetifier flag to false.
修正優化gradle中的版本
如果你的工程中將version都集中到了versions.gradle檔案中或其他地方,android studio的自動遷移功能只會修改build.gradle檔案中的相應版本,所以需要自己再次整理gradle檔案。
- 參考官網的對映表: androidx-class-mapping
可以直接下載: androidx-class-mapping - 一些特殊的名稱變化
com.android.support:designcom.google.android.material:material:1.0.0-rc01