如何在 Flutter 中修复 "Gradle build failed to produce an Android bundle package."
How to fix "Gradle build failed to produce an Android bundle package." in Flutter
在 运行
flutter build appbundle
我收到以下错误:
Gradle 构建未能生成 Android 捆绑包。
当 运行 处于详细模式时,这是我另外得到的:
#0 throwToolExit (package:flutter_tools/src/base/common.dart:24:3)
#1 _buildGradleProjectV2 (package:flutter_tools/src/android/gradle.dart:585:7)
<asynchronous suspension>
#2 buildGradleProject (package:flutter_tools/src/android/gradle.dart:331:14)
<asynchronous suspension>
#3 buildAppBundle (package:flutter_tools/src/android/app_bundle.dart:43:10)
<asynchronous suspension>
#4 BuildAppBundleCommand.runCommand (package:flutter_tools/src/commands/build_appbundle.dart:43:11)
<asynchronous suspension>
#5 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:545:18)
#6 _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#7 _rootRunUnary (dart:async/zone.dart:1132:38)
#8 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#9 _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
#10 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
#11 Future._propagateToListeners (dart:async/future_impl.dart:668:32)
#12 Future._complete (dart:async/future_impl.dart:473:7)
#13 _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#14 _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#15 _rootRun (dart:async/zone.dart:1124:13)
#16 _CustomZone.run (dart:async/zone.dart:1021:19)
#17 _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:947:23)
#18 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#19 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#20 _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#21 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)
我在 Flutter 稳定频道 v1.2.1.
不过我可以毫无问题地构建 apk。
我还可以从另一个 Flutter 项目构建一个 appbundle。
根据上面的错误消息,您将如何开始查找问题?
这可能是什么问题?
我遇到了相同错误消息的类似问题。
(构建发布 APK 成功但未能构建应用程序包)
对我有用的解决方案是升级 Android Gradle 版本。
以下是适合我的配置(您也可以升级到最新版本):
- /android/gradle/wrapper/gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
/android/build.gradle:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
我在 app.gradle 中评论了 API 列表,然后它起作用了:
android {
splits {
abi {
//include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
}
对我来说,迁移到 AndroidX 解决了所有问题:
https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility
对我来说,我的应用 build.gradle
文件的发布配置中缺少 signingConfig signingConfigs.debug 行。但是我得到的错误是相同的 "Gradle build failed to produce an Android bundle package".
android {
...
buildTypes {
release {
signingConfig signingConfigs.debug
...
}
}
}
对我来说,按照以下行更改 gradle 版本解决了这个问题。 (我用的是高版本)
android/build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
}
您可能遇到令人沮丧的问题的原因有很多,例如 Gradle build failed to produce an Android bundle package
。
根据@Tam Tam Tam 的回答,首先尝试将您的 gradle 和 android gradle 插件更新到最新版本。
如果这不能解决您的问题,请尝试禁用所有不同的架构并在拆分部分的 android/app/build.grade
中将 universalApk
设置为 false
。放这样的东西:
splits {
abi {
enable true
reset()
// include 'x86', 'armeabi-v7a', 'x86_64'
universalApk false
}
}
此处提供此建议:
https://github.com/flutter/flutter/issues/27462#issuecomment-507229131
这是因为 gradle 按照约定生成 apk,例如 app-<architecture-name>.apk
,flutter 无法理解它,它需要另一种格式的 apk 名称,例如 app.apk
.禁用所有不同的体系结构名称使它们达成共识:)
如果这也不起作用,请记住是否将包名 com.example.packagename
更改为您自己的名称,例如 com.mywebsite.packagename
。如果你已经完成了,那么你可能会在需要的地方更改它,例如,在 build.gradle
s 和 AndroidManifest.xml
中,但你可能忘记在你的 java (或 kotlin class).
为了让你的新包名生效,你还必须在 src/main/java/com/mywebsite/packagename/MainActivity.java
中更改包名(如果是 kotlin,则为 src/main/kotlin/com/mywebsite/packagename/MainActivity.kt
)
希望对您有所帮助。
这是我的经验:
我正在使用来自 CI 的远程机器通过发布签名配置对 apk 进行签名。
所以我像这样删除了 build.gradle
中的 buildTypes.release.signConfig
:
buildTypes {
release {
// signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这使得输出 apk 的名称更改为 app-release-unsigned.apk
但 flutter 期望 app-release.apk
,这导致 Gradle build failed to produce an Android bundle package.
添加 signingConfig signingConfigs.release
后问题解决。
就我而言,我在我的项目中添加了风味,但忘记将风味名称添加到 Run/Debug 配置中。
我丢失了部分默认配置 project.gradle
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
在 运行
flutter build appbundle
我收到以下错误:
Gradle 构建未能生成 Android 捆绑包。
当 运行 处于详细模式时,这是我另外得到的:
#0 throwToolExit (package:flutter_tools/src/base/common.dart:24:3)
#1 _buildGradleProjectV2 (package:flutter_tools/src/android/gradle.dart:585:7)
<asynchronous suspension>
#2 buildGradleProject (package:flutter_tools/src/android/gradle.dart:331:14)
<asynchronous suspension>
#3 buildAppBundle (package:flutter_tools/src/android/app_bundle.dart:43:10)
<asynchronous suspension>
#4 BuildAppBundleCommand.runCommand (package:flutter_tools/src/commands/build_appbundle.dart:43:11)
<asynchronous suspension>
#5 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:545:18)
#6 _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#7 _rootRunUnary (dart:async/zone.dart:1132:38)
#8 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#9 _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
#10 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
#11 Future._propagateToListeners (dart:async/future_impl.dart:668:32)
#12 Future._complete (dart:async/future_impl.dart:473:7)
#13 _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#14 _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#15 _rootRun (dart:async/zone.dart:1124:13)
#16 _CustomZone.run (dart:async/zone.dart:1021:19)
#17 _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:947:23)
#18 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#19 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#20 _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#21 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)
我在 Flutter 稳定频道 v1.2.1.
不过我可以毫无问题地构建 apk。 我还可以从另一个 Flutter 项目构建一个 appbundle。
根据上面的错误消息,您将如何开始查找问题? 这可能是什么问题?
我遇到了相同错误消息的类似问题。 (构建发布 APK 成功但未能构建应用程序包) 对我有用的解决方案是升级 Android Gradle 版本。 以下是适合我的配置(您也可以升级到最新版本):
- /android/gradle/wrapper/gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
/android/build.gradle:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' } }
我在 app.gradle 中评论了 API 列表,然后它起作用了:
android {
splits {
abi {
//include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
}
}
}
对我来说,迁移到 AndroidX 解决了所有问题:
https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility
对我来说,我的应用 build.gradle
文件的发布配置中缺少 signingConfig signingConfigs.debug 行。但是我得到的错误是相同的 "Gradle build failed to produce an Android bundle package".
android {
...
buildTypes {
release {
signingConfig signingConfigs.debug
...
}
}
}
对我来说,按照以下行更改 gradle 版本解决了这个问题。 (我用的是高版本)
android/build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
}
您可能遇到令人沮丧的问题的原因有很多,例如 Gradle build failed to produce an Android bundle package
。
根据@Tam Tam Tam 的回答,首先尝试将您的 gradle 和 android gradle 插件更新到最新版本。
如果这不能解决您的问题,请尝试禁用所有不同的架构并在拆分部分的 android/app/build.grade
中将 universalApk
设置为 false
。放这样的东西:
splits {
abi {
enable true
reset()
// include 'x86', 'armeabi-v7a', 'x86_64'
universalApk false
}
}
此处提供此建议: https://github.com/flutter/flutter/issues/27462#issuecomment-507229131
这是因为 gradle 按照约定生成 apk,例如 app-<architecture-name>.apk
,flutter 无法理解它,它需要另一种格式的 apk 名称,例如 app.apk
.禁用所有不同的体系结构名称使它们达成共识:)
如果这也不起作用,请记住是否将包名 com.example.packagename
更改为您自己的名称,例如 com.mywebsite.packagename
。如果你已经完成了,那么你可能会在需要的地方更改它,例如,在 build.gradle
s 和 AndroidManifest.xml
中,但你可能忘记在你的 java (或 kotlin class).
为了让你的新包名生效,你还必须在 src/main/java/com/mywebsite/packagename/MainActivity.java
中更改包名(如果是 kotlin,则为 src/main/kotlin/com/mywebsite/packagename/MainActivity.kt
)
希望对您有所帮助。
这是我的经验:
我正在使用来自 CI 的远程机器通过发布签名配置对 apk 进行签名。
所以我像这样删除了 build.gradle
中的 buildTypes.release.signConfig
:
buildTypes {
release {
// signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这使得输出 apk 的名称更改为 app-release-unsigned.apk
但 flutter 期望 app-release.apk
,这导致 Gradle build failed to produce an Android bundle package.
添加 signingConfig signingConfigs.release
后问题解决。
就我而言,我在我的项目中添加了风味,但忘记将风味名称添加到 Run/Debug 配置中。
我丢失了部分默认配置 project.gradle
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}