Flutter中解決AndroidX包與Support包衝突問題

本文轉載來至https://www.jianshu.com/p/034254874ca9

最近在項目開發中遇到AndroidX兼容性問題,如下圖

BUILD FAILED in 15s
*******************************************************************************************
The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See https://goo.gl/CP92wY for more information on the problem and how to fix it.
*******************************************************************************************
Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

具體來說就是項目中同時用到了AndroidX包和Support包,而這兩種包只能存在一個,要麼全部引用AndroidX包,要麼全部引用Support包。

一.AndroidX是什麼

根據官方文檔,AndroidX 是對 android.support.xxx 包的整理後產物。由於之前的support包過於混亂,所以,google推出了 AndroidX。由於在後續版本中,會逐步放棄對support 的升級和維護,所以,我們的項目後續得逐步遷移到 AndroidX.
當然,官方博客中也有說道,爲了給開發者一定遷移的時間,28.0.0的穩定版本還是採用android.support,但是所有後續的功能版本都將採用androidx。

對比.PNG

二.解決衝突

解決AndroidX包衝突有兩種方式:

  • 全部引用AndroidX包
  • 全部引用Support包

首先我們來講講轉AndroidX包的方法,這裏官方提供了兩種方法,一種是自動轉(官方推薦),一種是手動轉(麻煩,容易出錯)。

使用Android Studio自動升級AndroidX包

Flutter中,首先確保Android Studio版本是最新版,或者至少3.2以上。然後在我們在項目上右鍵選擇.android文件件,Flutter -> Open Android module in Android Studio

Open Android module.png

在新建的Android Studio窗口中選擇Refactor -> Migrate to AndroidX

 

Migrate to AndroidX.png

 

在接下來的步驟中點擊Do Refactor按鈕即可完成AndroidX的遷移工作。

手動升級AndroidX

1)打開android/gradle/wrapper/gradle-wrapper.properties,修改distributionUrl的值,

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

2)打開android/build.gradle,修改com.android.tools.build:gradle 到3.3.0

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.0'
}

3)打開android/gradle.properties,添加兩行

android.enableJetifier=true
android.useAndroidX=true

4)打開android/app/build.gradle,在android{}裏面,確保compileSdkVersion 和 targetSdkVersion 值爲28,
替換所有過時的依賴庫android.support到androidx。

不升級AndroidX包,全部引用Support包

這種方式也就是將項目中用到AndroidX包的地方全部轉爲引用Support包。在Flutter中,有些第三方庫在最近一段時間陸續都改爲支持AndroidX包,而我們項目中需要全部只支持Support包,就必須將第三方庫的版本號改爲其轉AndroidX前的最後一個版本號。
參考Flutter官方文檔上對AndoridX遷移的工作:https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility

這些是flutter/plugins AndroidX之前的所有軟件包的最新可用版本:

android_intent:0.2.1
battery:0.3.0
camera:0.2.9 + 1
cloud_firestore:0.8.2 + 3
cloud_functions:0.0.5
connectivity:0.3.2
device_info:0.3.0
firebase_admob:0.7.0
firebase_analytics:1.1.0
firebase_auth:0.7.0
firebase_core:0.2.5 + 1
firebase_database:1.0.5
firebase_dynamic_links:0.1.1
firebase_messaging:2.1.0
firebase_ml_vision:0.2.1
firebase_performance:0.0.8 + 1
firebase_remote_config:0.0.6 + 1
firebase_storage:1.0.4
google_maps_flutter:0.1.0
google_sign_in:3.2.4
image_picker:0.4.12 + 1
local_auth:0.3.1
package_info:0.3.2 + 1
path_provider:0.4.1
quick_actions:0.2.2
sensors:0.3.5
share:0.5.3
shared_preferences:0.4.3
url_launcher:4.1.0 + 1
video_player:0.9.0
webview_flutter:0.2.0

總結

Android在後續版本中,會逐步放棄對support 的升級和維護,所有項目轉到AndroidX是大勢所趨。但目前很多第三方庫還沒升級到AndroidX,如果項目中用到的第三方庫有的升級了,有的沒升級,而沒升級的第三方庫也必須要用到,爲了避免出現AndroidX兼容性問題,我們就得看看項目中用到的已經升級到AndroidX的第三方庫在升級前的最後一個版本號是多少,然後將引入的版本號改爲對應的版本號就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章