无法构建用于发布的颤振 apk

Posted

技术标签:

【中文标题】无法构建用于发布的颤振 apk【英文标题】:Can't build flutter apk for release 【发布时间】:2020-12-30 04:55:41 【问题描述】:

我通常可以构建调试 apk,但是当我尝试构建发布或配置 apk 时,我收到以下错误:

FAILURE: Build failed with an exception.

* Where:
Script 'C:\src\flutter\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 896

* What went wrong:
Execution failed for task ':app:compileFlutterBuildRelease'.
> Process 'command 'C:\src\flutter\flutter\bin\flutter.bat'' finished with non-zero exit value 1

* 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 1m 1s
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done                      62.3s
Gradle task assembleRelease failed with exit code 1

这是 flutter.gradle 中的第 896 行:

project.exec 
            logging.captureStandardError LogLevel.ERROR
            executable flutterExecutable.absolutePath
            workingDir sourceDir
            if (localEngine != null) 
                args "--local-engine", localEngine
                args "--local-engine-src-path", localEngineSrcPath
            
            if (verbose) 
                args "--verbose"
             else 
                args "--quiet"
            
            args "assemble"
            args "--depfile", "$intermediateDir/flutter_build.d"
            args "--output", "$intermediateDir"
            if (performanceMeasurementFile != null) 
                args "--performance-measurement-file=$performanceMeasurementFile"
            
            if (!fastStart || buildMode != "debug") 
                args "-dTargetFile=$targetPath"
             else 
                args "-dTargetFile=$Paths.get(flutterRoot.absolutePath, "examples", "splash", "lib", "main.dart")"
            
            args "-dTargetPlatform=android"
            args "-dBuildMode=$buildMode"
            if (trackWidgetCreation != null) 
                args "-dTrackWidgetCreation=$trackWidgetCreation"
            
            if (splitDebugInfo != null) 
                args "-dSplitDebugInfo=$splitDebugInfo"
            
            if (treeShakeIcons == true) 
                args "-dTreeShakeIcons=true"
            
            if (dartObfuscation == true) 
                args "-dDartObfuscation=true"
            
            if (dartDefines != null) 
                args "--DartDefines=$dartDefines"
            
            if (bundleSkSLPath != null) 
                args "-iBundleSkSLPath=$bundleSkSLPath"
            
            if (extraGenSnapshotOptions != null) 
                args "--ExtraGenSnapshotOptions=$extraGenSnapshotOptions"
            
            if (extraFrontEndOptions != null) 
                args "--ExtraFrontEndOptions=$extraFrontEndOptions"
            
            args ruleNames
        

我在同一台笔记本电脑上安装了相同的 Flutter 包,构建了另一个没有任何问题的应用程序。

我读过 Pubspec.yaml 中的软件包可能是原因,所以我做了以下操作:

1- 我试图在 pubspec.yaml 中删除我的包并重建应用程序,但它没有工作。

2- 我将相同的包添加到另一个应用程序并构建它,它是正常构建的。

所以,看来包不是原因。

这是我的 Pubspec.yaml :

version: 1.0.0+1

environment:
  sdk: ">=2.5.2 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for ios style icons.
  cupertino_icons: ^1.0.0
  sqflite: ^1.1.7+1
  path: ^1.6.4
  path_provider: ^1.4.0
  provider: ^3.1.0+1
  http: ^0.12.2
  connectivity: ^0.4.9+2
  carousel_slider: ^2.2.1
  share: ^0.6.5
#  admob_flutter: ^0.3.4
  url_launcher: ^5.5.3
  photo_view: ^0.9.2
  firebase_core: ^0.5.0
#  firebase_messaging: ^6.0.12
  firebase_auth: ^0.18.0+1
#  cloud_firestore: ^0.14.0+2
#  firebase_dynamic_links: ^0.5.0+11
#  firebase_analytics: ^5.0.16
  google_sign_in: ^4.5.3
#  rxdart: ^0.24.1
  cached_network_image: ^2.3.1
#  in_app_purchase: ^0.3.4+5
#  firebase_mlkit_language: ^1.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter




flutter:
  fonts:
    - family:  Sons
      fonts:
       - asset: assets/fonts/Sons.ttf
       - asset: assets/fonts/sons_of_sons.ttf


  uses-material-design: true

  assets:
    - assets/varty.sqlite
    - assets/images/photo.jpg

【问题讨论】:

你试过flutter clean吗?我经常收到这个错误,通常几个颤振清理就可以了 试了很多次,没变! 这是在黑暗中拍摄的,但您是否使用自定义字体图标?我注意到你有两个字体文件。如果是,请尝试使用--no-tree-shake-icons 运行release apk 命令,我最近遇到了类似这样的错误,行号为896。此外,当您运行调试版本时,控制台是否会显示类似“此应用程序无法摇树摇动图标字体。“? @Evan 哇,它真的有效,我无法想象字体的问题! .. 无论如何,我必须补充一点,当我一开始尝试发布时,它没有工作,我需要构建一个调试 apk,然后是一个配置文件,然后是一个发布版.. 全部使用这个命令 --no-tree-shake-图标。现在添加此评论作为答案,将其标记为正确的,并告诉我如何处理字体?非常感谢 @ahmad 现在我只是使用该标志来构建发布 apk,自从调试 apk 工作以来,我没有进一步调试该问题。还有你的最后一句话,“告诉我如何处理字体”是什么意思?就我而言,我只有一个 ttf 文件,就像您说的那样,我正在从端点读取字符串图标代码,将字符串转换为 int,然后将其传递给 IconData 小部件。你可以自己填写一个答案并标记为正确,我不在乎声望点什么的 【参考方案1】:

埃文的评论效果很好,解决了问题:

这是在黑暗中拍摄的,但您是否使用自定义字体图标?一世 注意到你有两个字体文件。如果是,请尝试运行发布 apk 带有 --no-tree-shake-icons 的命令,我最近遇到了这样的错误 具有相同的行号 896。此外,当您运行调试版本时, 控制台是否会说“此应用程序无法创建树”之类的内容 摇图标字体。 “?

只记得构建调试 apk,然后是配置文件,最后是使用相同命令的发行版。

【讨论】:

以上是关于无法构建用于发布的颤振 apk的主要内容,如果未能解决你的问题,请参考以下文章

无法在颤振中构建apk

颤振 APK 构建

在构建发布 apk 后,我的颤振应用程序没有从 http 获取数据 [重复]

将flutter从master切换到stable后无法构建发布apk

当托盘构建颤振 APK

构建颤振 apk 时未发现 Gradle 包装器问题