Flutter Android构建失败:JetifyTransform转换activity等AAR失败
Flutter空安全升级后Android构建失败排查方案
问题描述
旧Flutter应用升级为空安全版本后,iOS端构建正常,Android端反复构建失败,使用Flutter 3.3.7版本。控制台报错如下:
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeDebugAssets'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Failed to transform activity-1.6.1.aar (androidx.activity:activity:1.6.1) to match attributes {artifactType=android-assets, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for JetifyTransform: /Users/moiz/.gradle/caches/modules-2/files-2.1/androidx.activity/activity/1.6.1/23139afb40f2e445f869f2a5f07eb056b1661a3c/activity-1.6.1.aar. > Failed to transform '/Users/moiz/.gradle/caches/modules-2/files-2.1/androidx.activity/activity/1.6.1/23139afb40f2e445f869f2a5f07eb056b1661a3c/activity-1.6.1.aar' using Jetifier. Reason: null. (Run with --stacktrace for more details.) > Failed to transform annotation-experimental-1.3.0.aar (androidx.annotation:annotation-experimental:1.3.0) to match attributes {artifactType=android-assets, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for JetifyTransform: /Users/moiz/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation-experimental/1.3.0/5087c6f545117dcd474e69e1a93cacec9d7334af/annotation-experimental-1.3.0.aar. > Failed to transform '/Users/moiz/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation-experimental/1.3.0/5087c6f545117dcd474e69e1a93cacec9d7334af/annotation-experimental-1.3.0.aar' using Jetifier. Reason: null. (Run with --stacktrace for more details.) * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 12m 29s Exception: Gradle task assembleDebug failed with exit code 1
项目根目录build.gradle配置:
buildscript { ext.kotlin_version = '1.6.0' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.4' } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
app模块build.gradle配置:
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.geethen.timeumpire" minSdkVersion 21 targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:multidex:1.0.3' implementation 'com.google.firebase:firebase-messaging:20.1.0' implementation "com.android.support:support-v4:28.0.0" }
已尝试更新Android Gradle、执行./gradlew clean命令,问题仍未解决。
排查方案
1. 清理Gradle缓存并重新下载依赖
- 执行命令删除本地Gradle缓存:
rm -rf ~/.gradle/caches - 重新运行
flutter run,让Gradle重新下载所有依赖包,避免缓存损坏导致Jetify转换失败。
2. 升级Gradle相关版本,适配依赖库
根目录build.gradle修改:
buildscript { ext.kotlin_version = '1.7.20' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.15' } } allprojects { repositories { google() mavenCentral() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
- 移除已停止维护的
jcenter(),改用mavenCentral() - 升级Gradle插件到7.4.2(适配Flutter 3.3.7)
- 升级Kotlin版本到1.7.20(与Gradle 7.x兼容)
- 升级Google Services插件到4.3.15
app模块build.gradle修改:
def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { applicationId "com.geethen.timeumpire" minSdkVersion 21 targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } buildTypes { release { signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.multidex:multidex:2.0.1' implementation 'com.google.firebase:firebase-messaging:23.0.0' implementation "androidx.legacy:legacy-support-v4:1.0.0" }
- 将旧的
com.android.support库替换为AndroidX对应库 - 升级Firebase Messaging到23.0.0(适配AndroidX和高版本Gradle)
- 统一
targetSdkVersion为33,与compileSdkVersion保持一致
3. 禁用Jetify转换(仅确认全AndroidX依赖时使用)
在项目根目录的gradle.properties中添加:
android.enableJetifier=false
注意:若项目仍存在非AndroidX依赖,此操作会引发其他兼容性问题,需谨慎使用。
4. 检查并升级Flutter插件
- 执行
flutter pub outdated查看所有依赖插件版本 - 将未适配空安全和AndroidX的插件升级到最新稳定版,重点关注涉及Android原生依赖的插件(如Firebase、权限相关插件)
5. 重新生成Android项目文件
- 执行命令重新生成Android基础配置文件:
flutter create --platforms android . - 注意备份原有自定义配置(如签名文件、AndroidManifest.xml中的权限声明等),避免被覆盖
内容的提问来源于stack exchange,提问作者Moiz Chauhan
相关产品推荐
相关产品推荐

