Flutter构建APK报错:app:mergeReleaseJavaResource任务执行失败
问题描述
Windows环境下使用beta渠道3.1.0版本Flutter执行flutter build apk命令构建Android release安装包时构建失败,flutter doctor -v检测无异常。
具体报错信息
- 失败任务:
:app:mergeReleaseJavaResource执行失败
执行
com.android.build.gradle.internal.tasks.Workers$ActionFacade时发生故障,错误提示:invalid stream header: 00000000
现有项目Gradle配置
项目根目录android/build.gradle配置
buildscript { ext.kotlin_version = '1.6.21' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath 'com.google.gms:google-services:4.3.10' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
android/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 FileNotFoundException("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: 'com.google.gms.google-services' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 32 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' disable "Instantiatable" checkReleaseBuilds false abortOnError false } defaultConfig { applicationId "com.mobilemaster.foodbazarapp" minSdkVersion 21 targetSdkVersion 32 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } buildTypes { release { signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation platform('com.google.firebase:firebase-bom:29.3.1') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-firestore' implementation 'com.google.firebase:firebase-storage' implementation 'com.google.firebase:firebase-auth' }
环境检测结果(flutter doctor -v输出)
- Flutter:Channel beta, 3.1.0-9.0.pre,运行于Microsoft Windows [Version 10.0.19043.1586],区域设置en-US
- 安装路径
C:\src\flutter - Framework版本revision f28e570c8c(2022-06-14 13:39:33 -0500)
- Engine版本revision 74ee6b5afd
- Dart版本2.18.0 (build 2.18.0-165.1.beta)
- DevTools版本2.14.0
- 安装路径
- Android工具链:Android SDK版本33.0.0-rc2
- SDK路径
C:\Users\OSAMA\AppData\Local\Android\sdk - 已安装平台android-32,build-tools版本33.0.0-rc2
- Java路径
C:\Program Files\Android\Android Studio\jre\bin\java - Java版本OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
- 所有Android许可证已接受
- SDK路径
- Chrome:安装路径
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe,支持Web开发 - Visual Studio:Visual Studio Community 2022 17.0.6,支持Windows开发
- 安装路径
C:\Program Files\Microsoft Visual Studio\2022\Community - 内置Windows 10 SDK版本10.0.19041.0
- 安装路径
- Android Studio:版本2021.1,安装路径
C:\Program Files\Android\Android Studio,已安装Flutter、Dart插件,内置JDK版本11.0.11 - IntelliJ IDEA Community Edition:版本2020.3,安装路径
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.2,已安装Flutter 65.2.1、Dart 203.8452插件 - VS Code:共检测到两个安装
- 1.54.3版本,路径
C:\Users\OSAMA\AppData\Local\Programs\Microsoft VS Code,安装Flutter扩展3.42.0 - 1.68.1 64位版本,路径
C:\Program Files\Microsoft VS Code,安装Flutter扩展3.42.0
- 1.54.3版本,路径
- 已连接设备共4台:Android 12(API32)模拟器、Windows桌面端、Chrome、Edge
- 网络检测:所有必需HTTP主机均可正常访问,无网络问题
解决方案
这个报错是Gradle构建缓存损坏、工具链版本不匹配共同导致的,按以下步骤操作即可解决:
- 彻底清理损坏的构建缓存
先关闭所有Android Studio、模拟器、正在运行的Flutter进程,在项目根目录依次执行以下命令:
手动删除项目根目录下的flutter clean cd android gradlew clean cd ..build文件夹、android/.gradle文件夹、android/app/build文件夹,完全清除旧的损坏缓存。 - 修复版本兼容性问题
当前使用的Flutter 3.1.0 beta版本、Android SDK Build-Tools 33.0.0-rc2(预览版)和Gradle插件4.1.0版本存在已知兼容问题,做以下修改:- 打开Android SDK Manager,卸载33.0.0-rc2版本的Build-Tools,安装稳定版32.0.0的Build-Tools,和当前compileSdkVersion 32匹配
- 修改
android/build.gradle中的Gradle插件版本,把com.android.tools.build:gradle:4.1.0替换为com.android.tools.build:gradle:7.0.4 - 打开
android/gradle/wrapper/gradle-wrapper.properties文件,把distributionUrl对应的Gradle版本改成gradle-7.2-all.zip,匹配7.0.x版本的Android Gradle插件 - 把两个repositories块中的
jcenter()全部替换为mavenCentral(),jcenter已经停止服务,容易拉取到损坏的依赖包
- 刷新依赖
执行flutter pub get重新拉取Dart依赖,再进入android目录执行gradlew build --refresh-dependencies强制刷新所有Gradle依赖,避免本地缓存的依赖包损坏。 - 重新构建
回到项目根目录执行flutter build apk --release即可正常构建。
注意:当前release包使用的是debug签名,正式发布前需要替换为自己的release签名配置,否则无法上架应用商店。
内容的提问来源于stack exchange,提问作者Osama A. Abdelnasser
相关产品推荐
相关产品推荐

