颤动的应用程序太大了

Ste*_*raj 26 java android dart flutter

我在使用java的android应用程序开发方面有很好的经验.最近我开始了解扑扑.所以,我试图基于官方教程创建一个简单的Android应用程序与flutter .但令人惊讶的是,调试应用程序大小为25MB,发布apk的成本超过7MB.与原生开发的Android应用程序相比,它真的更大.

有没有办法优化它?

小智 129

我用来减少应用程序大小的一种方法是使用;

flutter clean
Run Code Online (Sandbox Code Playgroud)

在我运行构建命令之前;

flutter build appbundle --target-platform android-arm,android-arm64
Run Code Online (Sandbox Code Playgroud)

当我在没有 clean 命令的情况下运行 build 命令时,我得到大约 32mb,但是如果我先运行 clean 命令,我得到大约 18mb

  • 这是回答如何优化问题的唯一答案。 (9认同)
  • 我发布了该应用程序并且它有效。现在我得到了用户的好评。感谢@CanaanEtai,对减少应用程序安装大小有很大帮助。 (4认同)
  • 当发布到 Play 商店时,此版本是否足够?它适用于大多数设备吗?@CanaanEtai (2认同)
  • 有人可以解释它是如何工作的吗? (2认同)

Vil*_*abs 26

颤动的团队在这里承认.

有对此的解释这里,引用相同的-

在2018年8月,我们测量了一个最小Flutter应用程序的大小(没有材质组件,只有一个中心小部件,使用flutter build apk构建),捆绑并压缩为发布APK,大约为4.7MB.

对于这个简单的应用程序,核心引擎大约是3.2MB(压缩),框架+应用程序代码大约是840KB(压缩),LICENSE文件是55KB(压缩),必要的Java代码(classes.dex)是57KB(压缩) ,(压缩的)ICU数据约为533KB.

当然,YMMV,我们建议您通过运行flutter build apk并查看build/app/outputs/apk/release/app-release.apk来测量您自己的应用程序.

此外,较大的应用程序,apk大小的相对差异可能会更小.颤振的头顶尺寸是固定的.

  • +1为开销注释。只是要在此https://github.com/flutter/flutter/issues/16833添加一个更新的线程。现在,基本应用在Android中约为4MB,在iOS中约为10MB。 (5认同)

Bla*_*nka 12

首先检查这些:

  • 正如其他答案所提到的,删除所有不必要的资产(图像、字体和文件)。

如果你有太多的字体会严重影响 apk 的大小,flutter 也通过创建一个包来解决这个问题,让你从谷歌字体库中获取字体(很棒的包,让你可以访问如此多的字体和在任何地方使用的灵活性) . 在此处获取软件包在此处阅读更多信息

  • 删除不需要的包/插件(虽然影响不大)。

  • 删除未使用的资源

  • 尽量减少从图书馆导入的资源

  • 支持有限数量的屏幕密度

  • 压缩 PNG 和 JPEG 文件

另请阅读:测量应用的大小

请注意这些:

如果您使用flutter build apk它构建您的 apk ,它将同时包含 arm-32 和 arm-64 apk(构建 apk 时,它会在控制台中显示)。如果您正在构建应用程序包,这不是问题,它的大小要小得多。

为了避免一个包含 arm-32 和 arm-64 的平面 apk,您可以使用以下两个命令分别构建它们:

flutter build apk --target-platform=android-arm
Run Code Online (Sandbox Code Playgroud)

以上将产生arm-32位apk。转到project -> build -> app -> release并将 apk 重命名为:app-armeabi-v7a-release.apk

然后在 pubspec.yaml 中增加版本代码,flutter pub get然后执行以下操作:

flutter build apk --target-platform=android-arm64
Run Code Online (Sandbox Code Playgroud)

以上将产生arm-64位apk。转到project -> build -> app -> release并将 apk 重命名为:app-arm64-v8a-release.apk

然后你可以分别提交两个apk(先提交较低的apk版本)。

因为,你必须通过增加版本代码运行两个命令,扑通过这个命令(扑> 1.5.4我认为),使得它更容易:flutter build apk --split-per-abi。该命令将增加第二个 apk 的 apk 版本代码,并为您提供两个重命名的 apk(请注意,此命令将生成更高版本的代码(例如:3222))。

来自文档:

从命令行:

Enter cd <app dir>
(Replace <app dir> with your application’s directory.)
Run `flutter build apk --split-per-abi`
(The flutter build command defaults to `--release`.)
Run Code Online (Sandbox Code Playgroud)

此命令会生成两个 APK 文件:

<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
<app dir>/build/app/outputs/apk/release/app-x86_64-release.apk
Run Code Online (Sandbox Code Playgroud)

删除该--split-per-abi标志会生成一个包含为所有目标 ABI 编译的代码的胖 APK。此类 APK 的大小比拆分的 APK 大,导致用户下载不适用于其设备架构的本机二进制文件

在这里阅读更多

我还在某处听说,在最新的 Flutter 更新中,他们使 Flutter 应用程序的大小变得更小。还有一个额外的问题:https : //github.com/flutter/flutter/issues/16833


Hem*_*Raj 10

是的,使用flutter构建的apk或ipa的大小对于hello world应用程序来说最小约为7mb.这是因为,flutter发布了核心引擎,框架,ICU数据,LICENSE文件等及其构建输出,这对于运行的flutter应用程序是必需的.

您可以在此处查看常见问题解答,以了解有关构建时需要多大的内容的更多信息.

希望有所帮助!

  • 7mb没问题。但是 flutter 现在生成 61mb 的 ipa,这对于基本应用程序来说太高了。 (3认同)
  • 希望您正在构建调试版本。尝试构建发布版本。上述大小适用于颤振中的“Hello World”应用程序。大小可能因本机依赖项和其他插件而异。 (2认同)

iDe*_*ode 10

使用以下命令来分析哪个占用了您应用程序的大部分空间。

对于 Android 的 AppBundle:

flutter build appbundle --target-platform android-arm --analyze-size
flutter build appbundle --target-platform android-arm64 --analyze-size
flutter build appbundle --target-platform android-x64 --analyze-size
Run Code Online (Sandbox Code Playgroud)

对于 Android 的 APK:

flutter build apk --target-platform android-arm --analyze-size
flutter build apk --target-platform android-arm64 --analyze-size
flutter build apk --target-platform android-x64 --analyze-size
Run Code Online (Sandbox Code Playgroud)

对于 iOS:

flutter build ios --analyze-size
Run Code Online (Sandbox Code Playgroud)

对于 Linux:

flutter build linux --analyze-size
Run Code Online (Sandbox Code Playgroud)

对于 macOS

flutter build macos --analyze-size
Run Code Online (Sandbox Code Playgroud)

对于 Windows

flutter build windows --analyze-size
Run Code Online (Sandbox Code Playgroud)

这包括本机代码、资产,甚至是已编译 Dart 代码的包级细分。


开发者工具

如果您想查看它的可视化表示,请使用 DevTools。为此,在运行上一个命令之后,运行:

flutter pub global run devtools --appSizeBase=apk-code-size-analysis_01.json
Run Code Online (Sandbox Code Playgroud)

然后您将被定向到您的浏览器,您将在其中看到如下内容:

在此处输入图片说明


Ran*_*ani 9

我已经使用此命令生成用于生产阶段的已发布 apk:

flutter build apk --split-per-abi
Run Code Online (Sandbox Code Playgroud)

输出的 apk 位于项目文件夹中:

[项目]/build/app/outputs/apk/release/app-armeabi-v7a-release.apk

在我的例子中,apk 的大小减少到5.3 MB(执行上述命令后)。之所以使用大尺寸(几乎> 50 MB),是因为它们包含了热重启或重新启动期间可能需要的所有内容,这会阻止您在代码中进行很小的更改时再次构建整个系统。

发布版本是您所有代码的真实结果,它们是真正的缩小应用程序,没有任何容器,然后您可以在谷歌商店上分发。


小智 7

TL;DR:使用命令flutter build apk --split-per-abi

运行后flutter build apk --release,我的 APK 大小为 16.2 MB。此 APK 称为 FAT APK,它是一个单一 APK,其中包含嵌入其中的多个 ABI 的二进制文件,并支持多种体系结构。通过flutter build apk --split-per-abidart 代码混淆,生成 3 个 APK 文件,我的 app.APK 的大小减少到 5.6 MB。

以下是解释相同内容的官方文档:https://docs.flutter.dev/deployment/android


小智 5

这是官方 Android 文档,使我的应用程序从 ~20mb 到 ~9mb

尝试Proguard推荐

链接: https: //developer.android.com/topic/performance/reduce-apk-size

使用 ProGuard 之前和之后等 在此输入图像描述