Flutter添加依赖后assembleDebug失败:compileDebugJavaWithJavac依赖异常
环境信息
- Android Studio Ladybug | 2024.2.1 Patch 3
- Flutter 版本3.24.5
- Dart 版本3.5.4
- DevTools 版本2.37.3
- Android SDK 版本34.0.0
- 平台:android-34,build-tools 34.0.0
- gradle-wrapper.properties配置:
distributionUrl=https://services.gradle.org/distributions/gradle-8.3-all.zip
问题描述
更新开发环境后,新建无依赖的Flutter项目可正常构建,但在pubspec.yaml中添加url_launcher: ^6.3.1和shared_preferences: ^2.3.3后,构建失败,报错信息如下:
Launching lib\main.dart on sdk gphone16k x86 64 in debug mode...
Running Gradle task 'assembleDebug'...Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
FAILURE: Build failed with an exception.
- What went wrong:
Could not determine the dependencies of task ':url_launcher_android:compileDebugJavaWithJavac'.
Could not determine the dependencies of null.
Cannot query the value of this provider because it has no value available.BUILD FAILED in 31s
Error: Gradle task assembleDebug failed with exit code 1
解决方案
1. 同步Android Studio与SDK命令行工具版本
警告提示SDK XML版本不兼容,说明Android Studio和SDK命令行工具版本不匹配。打开Android Studio的SDK Manager,进入SDK Tools标签,确保Android SDK Command-line Tools (latest)已安装并更新到与当前Android Studio对应的版本,之后重启IDE。
2. 更新依赖库版本
当前使用的依赖版本可能与Flutter 3.24.5存在兼容性问题,尝试更新到最新稳定版:
在pubspec.yaml中修改为:
url_launcher: ^6.3.2 shared_preferences: ^2.3.4
执行flutter pub get拉取新依赖。
3. 调整Gradle插件版本
检查项目android/build.gradle文件,确保Gradle插件版本与Gradle 8.3兼容,修改buildscript中的依赖:
buildscript { ext.kotlin_version = '1.9.20' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:8.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
4. 清理构建缓存
执行以下命令清理缓存并重新构建:
flutter clean cd android ./gradlew clean ./gradlew build --refresh-dependencies cd .. flutter pub get
5. 校验Android SDK路径
执行flutter doctor检查SDK路径配置,若路径异常,通过flutter config --android-sdk <你的SDK路径>设置正确路径。
内容的提问来源于stack exchange,提问作者Dinesh

