Flutter Android构建失败:Jetify转换Activity等依赖包失败
问题描述
我遇到了Flutter Android构建失败的问题,已经尝试过gradle cache rebuild、flutter clean和flutter pub get,但都没有解决。我的项目依赖了一个不再维护的包flutter_simple_edge_detection(本地路径引入),当前使用Dart 2.10.5、Flutter 3.7.1版本。我知道这是依赖冲突问题,但找到的相关回答不够清晰,希望能得到具体的解决建议。
构建错误信息
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: C:\Users\Admin\.gradle\caches\modules-2\files-2.1\androidx.activity\activity\1.6.1\23139afb40f2e445f869f2a5f07eb056b1661a3c\activity-1.6.1.aar. > Failed to transform 'C:\Users\Admin\.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 activity-1.6.1.aar (androidx.activity:activity:1.6.1) to match attributes {artifactType=android-assets, org.gradle.status=release}. > Execution failed for JetifyTransform: C:\Users\Admin\.gradle\caches\modules-2\files-2.1\androidx.activity\activity\1.6.1\23139afb40f2e445f869f2a5f07eb056b1661a3c\activity-1.6.1.aar. > Failed to transform 'C:\Users\Admin\.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: C:\Users\Admin\.gradle\caches\modules-2\files-2.1\androidx.annotation\annotation-experimental\1.3.0\5087c6f545117dcd474e69e1a93cacec9d7334af\annotation-experimental-1.3.0.aar. > Failed to transform 'C:\Users\Admin\.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 9s Exception: Gradle task assembleDebug failed with exit code 1
项目配置文件详情
pubspec.yaml
name: temp description: A new Flutter project. publish_to: 'none' version: 1.0.0+1 environment: sdk: ">=2.10.5 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 camera: ^0.10.0+1 path_provider: ^2.0.11 image_picker: 0.8.7+4 image_picker_android: 0.8.6+11 permission_handler: ^10.0.0 flutter_speed_dial: ^6.0.0 mobile_scanner: ^2.0.0 flutter_vibrate: ^1.3.0 fluttertoast: ^8.0.9 url_launcher: 6.1.6 flutter_spinkit: ^5.1.0 carousel_slider: ^4.1.1 css_filter: ^1.0.2 photofilters: ^3.0.1 provider: ^6.0.4 reorderable_grid: ^1.0.5 pinch_zoom_release_unzoom: ^0.0.10 overlay_loading_progress: ^1.0.0 hidable: 1.0.3 flutter_image_compress: ^1.1.3 flutter_isolate: ^2.0.4 wakelock: ^0.6.2 draggable_scrollbar: ^0.1.0 # pdf: ^3.8.4 share_extend: ^2.0.0 alh_pdf_view: 1.2.0 external_path: ^1.0.3 search_page: ^2.2.0 animated_icon: 0.0.4 printing: 5.9.3 firebase_core: 2.8.0 firebase_auth: ^4.2.4 firebase_storage: ^11.0.10 firebase_storage_web: ^3.3.19 cloud_firestore: ^4.3.1 google_sign_in: ^5.4.2 flutter_signin_button: ^2.0.0 connectivity_plus: ^3.0.2 animated_text_kit: ^4.2.2 simple_animations: 1.3.3 animate_gradient: ^0.0.2 lottie: ^1.4.0 ionicons: ^0.2.1 cached_network_image: ^3.2.3 sqflite: 2.2.3 uuid: ^3.0.7 intl: ^0.17.0 path: ^1.8.2 shared_preferences: 2.0.17 pdfx: ^2.3.0 animated_toggle_switch: ^0.6.1 percent_indicator: ^4.2.2 share_plus: ^4.5.3 package_info: ^0.4.0+16 firebase_remote_config: ^3.0.13 font_awesome_flutter: ^9.2.0 bulleted_list: ^0.0.1+0.1a google_nav_bar: ^5.0.6 google_fonts: ^4.0.3 animated_text: ^1.0.2 video_player: ^2.6.0 cloud_functions: ^4.0.13 scratcher: ^2.3.0 flutter_svg: ^1.1.6 google_mobile_ads: ^2.4.0 flutter_countdown_timer: ^4.1.0 flutter_native_splash: ^2.2.16 awesome_notifications: ^0.6.21 simple_edge_detection: path: C:/Users/Admin/StudioProjects/flutter-simple-edge-detection dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: uses-material-design: true assets: - images/ - assets/ - assets/fonts/
项目级build.gradle
buildscript { ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:3.5.4' 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 }
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" android { packagingOptions { pickFirst 'lib/x86/libc++_shared.so' pickFirst 'lib/x86_64/libc++_shared.so' pickFirst 'lib/armeabi-v7a/libc++_shared.so' pickFirst 'lib/arm64-v8a/libc++_shared.so' } compileSdkVersion localProperties.getProperty('flutter.compileSdkVersion').toInteger() ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.temp" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger() targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName ndk { abiFilters 'arm-linux-androideabi' } } 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 platform('com.google.firebase:firebase-bom:31.1.1') implementation 'com.google.firebase:firebase-auth' implementation 'com.google.android.gms:play-services-auth:20.4.0' implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-storage' implementation 'com.google.firebase:firebase-firestore'}
gradle-wrapper.properties
#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
解决方案建议
根据你的情况,这个问题主要是旧版Gradle工具与新依赖的兼容性问题,加上不再维护的本地包引发的依赖冲突,给你几个具体的解决步骤:
升级Gradle和Android Gradle Plugin(AGP)
你当前使用的Gradle 6.1.1和AGP 3.5.4版本太老,和Flutter 3.7.1不兼容,建议升级到匹配版本:- 修改
gradle-wrapper.properties的distributionUrl为:https\://services.gradle.org/distributions/gradle-7.5-all.zip - 修改项目级
build.gradle中的AGP版本为:classpath 'com.android.tools.build:gradle:7.4.2' - 同时升级Kotlin版本到
ext.kotlin_version = '1.7.20'(AGP 7.4+需要Kotlin 1.7+支持)
- 修改
检查并调整Jetifier配置
打开项目根目录的gradle.properties文件,查看是否有android.enableJetifier=true。如果有,可以尝试临时设置为false(注意:这可能导致其他依赖出现兼容问题,需要测试),因为Jetify在转换旧依赖时可能出现异常。如果你的项目已经完全迁移到AndroidX,部分旧依赖可能不需要Jetify。修复本地依赖
flutter_simple_edge_detection的配置
这个包不再维护,它的内部依赖可能和你的项目冲突:- 打开本地包的
android/build.gradle文件,将其中的AndroidX依赖版本(比如androidx.activity:activity)对齐到你的项目使用的版本,或者强制使用统一版本 - 也可以在你的项目级
build.gradle中添加强制依赖版本的配置,确保所有模块使用相同的依赖版本:subprojects { configurations.all { resolutionStrategy { force 'androidx.activity:activity:1.6.1' force 'androidx.annotation:annotation-experimental:1.3.0' } } }
- 打开本地包的
彻底清理缓存
除了常规的flutter clean,还需要:- 删除项目根目录下的
.gradle文件夹 - 删除用户目录下的
C:\Users\Admin\.gradle\caches文件夹 - 重新运行
flutter pub get和Android Studio的Sync Project with Gradle Files
- 删除项目根目录下的
检查minSdkVersion
确保你的minSdkVersion至少为21(Android 5.0),如果低于这个版本,可能会和一些新的AndroidX依赖不兼容。可以在local.properties中设置flutter.minSdkVersion=21。
备注:内容来源于stack exchange,提问作者Abhi

