Flutter项目minSdkVersion设为19/21时Dex编译失败求助
问题
使用Flutter 3.19.2、Android Studio Iguana | 2023.2.1(2024年2月22日构建)及Gradle 7.6开发项目,将minSdkVersion改为24时项目可正常运行,但设置为19或21时,构建出现Dex编译失败错误:
ERROR:D8: com.android.tools.r8.kotlin.H FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeDexDebug'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Failed to transform play-services-measurement-api-21.5.1.aar (com.google.android.gms:play-services-measurement-api:21.5.1) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=19, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingWithClasspathTransform: /home/---/.gradle/caches/transforms-3/49f516b4e0cb096adcf638dba9621d3b/transformed/jetified-play-services-measurement-api-21.5.1-runtime.jar. > Error while dexing. > Failed to transform firebase-auth-22.3.1.aar (com.google.firebase:firebase-auth:22.3.1) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=19, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingWithClasspathTransform: /home/----/.gradle/caches/transforms-3/ae74ccf15751eaa27d72e95a9c344e0a/transformed/jetified-firebase-auth-22.3.1-runtime.jar. > Error while dexing. > Failed to transform recaptcha-18.4.0.aar (com.google.android.recaptcha:recaptcha:18.4.0) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=19, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingWithClasspathTransform: /home/----/.gradle/caches/transforms-3/ee3c9277022a423a54cec16e68f37c58/transformed/jetified-recaptcha-18.4.0-runtime.jar. > Error while dexing.
项目相关配置:
android/app/build.gradle
plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" id 'com.google.gms.google-services' } android { namespace "com.example" compileSdk 34 ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } defaultConfig { applicationId "com.example" minSdkVersion 19 targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release // signingConfig signingConfigs.debug } } bundle { storeArchive { enable = false } } } dependencies { implementation(platform("com.google.firebase:firebase-bom:32.7.3")) implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-auth' implementation 'com.google.android.gms:play-services-auth' implementation 'com.google.android.gms:play-services-ads' implementation 'com.android.support:multidex:2.0.1' }
android/settings.gradle
plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "7.4.2" apply false id "org.jetbrains.kotlin.android" version "1.8.20" apply false id "com.google.gms.google-services" version "4.4.1" apply false }
pubspec.yaml
environment: sdk: '>=3.1.0 <4.0.0' dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.6 google_mobile_ads: ^4.0.0 firebase_storage: ^11.0.0 cloud_firestore: ^4.0.0 firebase_auth: ^4.0.0 flutter_share: ^2.0.0 firebase_core: ^2.0.0 firebase_messaging: ^14.0.0 intl: 0.18.1 flutter_localizations: sdk: flutter
需解决该Dex编译失败问题,使项目能在minSdkVersion 19或21下正常构建运行。
解决方案
1. 升级Gradle及Android Gradle Plugin版本
当前Gradle 7.6和Android Gradle Plugin 7.4.2对低版本minSdk的Dex支持有限,建议升级到兼容版本:
- 修改
android/settings.gradle中的Android Gradle Plugin版本为7.4.4:id "com.android.application" version "7.4.4" apply false - 同步项目后,按提示升级Gradle到对应版本(7.4.4适配Gradle 7.5+,推荐用7.6.1)。
2. 启用完整核心库Desugaring
低版本Android系统不支持Java 8+部分语法,需开启Desugaring:
- 在
android/app/build.gradle的android块中添加配置:compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 coreLibraryDesugaringEnabled true } - 在
dependencies块中添加Desugaring依赖:coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
3. 降级Firebase BOM版本
当前Firebase BOM 32.7.3对应的库版本对minSdk 19/21支持不佳,可降级到兼容版本:
- 修改
android/app/build.gradle中的Firebase BOM版本为31.5.0:implementation(platform("com.google.firebase:firebase-bom:31.5.0")) - 同步后,Firebase相关库会自动适配为兼容minSdk 19的版本。
4. 清理Gradle缓存并重建
缓存损坏可能导致编译失败,执行以下操作:
- 终端运行:
./gradlew clean(Windows用gradlew clean) - 删除项目根目录
.gradle文件夹及android/.gradle文件夹 - 重新执行:
flutter run
5. 替换不兼容第三方依赖
部分库可能不再支持低版本minSdk:
google_mobile_ads: ^4.0.0虽支持minSdk 19,若仍有问题可尝试降级到3.0.0flutter_share: ^2.0.0若存在兼容性问题,可替换为其他支持低版本的分享库
内容的提问来源于stack exchange,提问作者Qqq
相关产品推荐
相关产品推荐

