【问题标题】:How to fix "Gradle build failed to produce an Android bundle package." in Flutter如何修复“Gradle 构建未能生成 Android 捆绑包”。在颤振中
【发布时间】:2019-05-05 09:21:01
【问题描述】:

在运行中 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。

根据上面的错误消息,您将如何开始查找问题? 这里可能有什么问题?

【问题讨论】:

    标签: build flutter android-gradle-plugin android-app-bundle


    【解决方案1】:

    这是我的情景:

    我正在使用来自 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后问题解决了。

    【讨论】:

      【解决方案2】:

      我有相同的错误消息的类似问题。 (构建发布 APK 成功,但构建 app bundle 失败) 对我有用的解决方案是升级 Android Gradle 版本。 以下是适合我的配置(您也可以升级到最新版本):

      1. /android/gradle/wrapper/gradle-wrapper.properties

      distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

      1. /android/build.gradle

        buildscript {
            repositories {
               google()
               jcenter()
              }
        
            dependencies {
               classpath 'com.android.tools.build:gradle:3.2.1'
            }
        }
        

      【讨论】:

      • 非常感谢!我还必须在我的 gradle 文件中删除对 kotlin 的引用(三个不同的地方)
      • 在进一步调查该问题之前,我认为您可以尝试一个技巧,即使用最新的 Android SDK、Android Gradle 插件 link 和 Flutter 版本创建一个新的颤振项目,以确保您的环境能够先构建一个应用程序包。然后,您可以将 '/lib' 中的 dart 文件复制到新项目以从现在开始构建应用程序包,或者尝试在新项目和现有项目之间区分 gradle 设置以查看问题所在。 (如果您在这篇文章中确实有完全相同的错误消息)
      • 如果其他人遇到此问题并且此解决方案没有解决问题,请检查您是否使用 android.tools.build:gradle 版本 3.5.0。该版本当前存在问题,请参阅this flutter issue。暂时降级到 3.4.2 为我解决了这个问题。
      【解决方案3】:

      我在 app.gradle 中评论了 API 列表,然后它就可以工作了:

      android {
          splits {
      
              abi {
      
                  //include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
      
              }
          }
        }
      

      【讨论】:

      • 但您不需要该行以便应用程序在 32 位和 64 位设备上运行吗??
      • @F-1 是的,如果您尝试构建捆绑 apk,此行不会产生任何问题...,如果您尝试构建正常发行版 apk,则会发生这种情况。所以在使用 bundle 时需要它的优势时必须离开它!...
      • 我想通了,你不能在 Flutter 中构建 app bundle,你现在必须在 Android Studio 中构建。
      【解决方案4】:

      我丢失了默认 project.gradle 的部分配置

      rootProject.buildDir = '../build'
      subprojects {
          project.buildDir = "${rootProject.buildDir}/${project.name}"
      }
      subprojects {
          project.evaluationDependsOn(':app')
      }
      

      【讨论】:

        【解决方案5】:

        您可能会遇到诸如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-&lt;architecture-name&gt;.apk,这是 Flutter 无法理解的,它需要另一种格式的 apk 名称,例如,简单的 app.apk。禁用所有不同的架构名称会使它们达成共识:)

        如果这也不起作用,那么请记住是否将包名称 com.example.packagename 更改为您自己的名称,例如 com.mywebsite.packagename。如果你已经这样做了,那么你可能在任何需要的地方都改变了它,例如,在 build.gradles 和 AndroidManifest.xml 中,但你可能忘记在你的 java(或 kotlin 类)中改变它。

        为了使你的新包名正常工作,你还必须更改 src/main/java/com/mywebsite/packagename/MainActivity.java 中的包名(如果是 kotlin,则为 src/main/kotlin/com/mywebsite/packagename/MainActivity.kt

        我希望这会有所帮助。

        【讨论】:

          【解决方案6】:

          对我来说,迁移到 AndroidX 解决了一切问题:

          https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility

          【讨论】:

            【解决方案7】:

            对我来说,我的应用程序 build.gradle 文件的发布配置中缺少 signingConfig signingConfigs.debug 行。但我得到的错误是相同的“Gradle build failed to generate an Android bundle package”。

            android {
                ...
                buildTypes {
                    release {
                        signingConfig signingConfigs.debug
                        ...
                    }
                }
            }
            

            【讨论】:

              【解决方案8】:

              对我来说,将我的 gradle 版本更改为以下行解决了这个问题。 (我使用的是更高版本)

              android/build.gradle

                dependencies {
                   classpath 'com.android.tools.build:gradle:3.3.0'
                }
              

              【讨论】:

                【解决方案9】:

                在我的例子中,我在我的项目中添加了风味,却忘记在运行/调试配置中添加风味名称。

                【讨论】:

                  猜你喜欢
                  • 2021-10-19
                  • 2021-12-13
                  • 2021-08-14
                  • 2013-05-03
                  • 2020-01-17
                  • 2021-08-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多