我在使用java的Android应用程序开发方面有很好的经验。最近我开始了解扑扑。因此,我尝试使用基于官方tutorial的flutter创建一个简单的Android应用程序。但令人惊讶的是,调试应用程序大小为25MB,发布apk的成本超过7MB。与原生开发的Android应用程序相比,它真的更大。
有没有办法优化它?
答案 0 :(得分:16)
Flutter团队承认here。
对此here有一个解释,引用相同的 -
2018年8月,我们测量了一个最小的Flutter应用程序的大小(没有 Material Components,只是一个中心窗口小部件,使用颤振构建 构建apk),捆绑和压缩作为发布APK,是 大约4.7MB。
对于这个简单的应用程序,核心引擎大约是3.2MB (压缩),框架+应用程序代码大约是840KB (压缩),LICENSE文件是55KB(压缩),必要的Java 代码(classes.dex)是57KB(压缩),大约是 533KB(压缩)ICU数据。
当然,YMMV,我们建议您测量自己的应用程序 运行flutter build apk并查看 建立/应用/输出/ APK /释放/ APP-release.apk。
此外,对于较大的应用,apk大小的相对差异可能会更小。 Flutter的开销大小是固定的。
答案 1 :(得分:9)
首先检查以下内容:
如果您有太多会严重影响apk大小的字体,而flutter也为此创建了一个解决方案,方法是为您创建一个可从Google字体库中获取字体的软件包(该软件包可让您访问这么多的字体和灵活性在任何地方使用)。获取the package here和Read more here。
删除不需要的不需要的软件包/插件(影响不大) 虽然)。
删除未使用的资源
最小化从库导入的资源
支持有限数量的屏幕密度
压缩PNG和JPEG文件
另请阅读:Measuring your app's size
请也注意以下几点:
如果您使用flutter build apk
构建apk,则它将同时包含arm-32和arm-64 apk(构建apk时会在控制台中显示该颤动)。如果您要构建应用程序捆绑包,这不是问题,并且它的大小要小得多。
要避免一个包含arm-32和arm-64的平面apk,可以使用以下两个命令分别构建它们:
flutter build apk --target-platform=android-arm
以上将产生arm-32
位apk。转到project -> build -> app -> release
并将apk重命名为:app-armeabi-v7a-release.apk
。
然后在下一个flutter pub get
中增加pubspec.yaml中的版本代码,并执行以下操作:
flutter build apk --target-platform=android-arm64
以上将产生arm-64
位apk。转到project -> build -> app -> release
并将apk重命名为:app-arm64-v8a-release.apk
。
然后您可以分别提交两个APK(首先是较低的APK版本)。
由于您必须通过递增版本代码来运行两个命令,因此flutter使此命令更容易(我认为Flutter> 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`.)
此命令产生两个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
删除
--split-per-abi
标志会导致包含以下内容的胖APK: 您为所有目标ABI编译的代码。这样的APK在 大小超过拆分后的对应内容,导致用户下载 不适用于其设备架构的本机二进制文件
我还在某处听说,在最新的flutter更新中,它们使flutter应用程序的尺寸变得更小。还有一个附加的问题:https://github.com/flutter/flutter/issues/16833
答案 2 :(得分:8)
是的,对于一个hello world app,用flutter构建的apk或ipa的大小最小为〜7mb。这是因为,flutter发布了一个核心引擎,框架,ICU数据,LICENSE文件等及其构建输出,这对于一个颤动的应用程序来说是必须的。
您可以查看常见问题解答here,详细了解构建时需要多大的内容。
希望有所帮助!
答案 3 :(得分:5)
减少应用大小的一种方法是使用;
flutter clean
在运行构建命令之前;
flutter build appbundle --target-platform android-arm,android-arm64
当我运行不带clean命令的build命令时,我的内存约为32mb,但是如果我先运行clean命令,则我的内存约为18mb
答案 4 :(得分:1)
所有这种跨平台应用程序从一开始就比较大 我确实使用react-native和hello-world app大约6 MB左右 所有你能做的就是制作一个两个版本的apk,一个用于arm cpu,一个用于x86 cpu,这样你可以降低大小约4 MB但是永远不会像android一样小
根据谷歌
减少APK大小的一种方法是创建多个包含特定屏幕密度或ABI文件的APK。
点击此处查看更多信息https://developer.android.com/studio/build/configure-apk-splits.html
更新:如果我现在没有完全支持它,将来肯定会,在这个方法的每个阶段都会有效,但测试版本不会太多,但这种方法可以更好地发布更多版本的颤动
答案 5 :(得分:1)
使用以下命令来分析哪个占用了您应用程序的大部分空间。
对于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
对于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
对于iOS:
flutter build ios --analyze-size
对于Linux:
flutter build linux --analyze-size
对于macOS
flutter build macos --analyze-size
对于Windows
flutter build windows --analyze-size
这包括本机代码,资产,甚至是已编译Dart代码的程序包级细分。
答案 6 :(得分:0)
由于颤动这是正常现象,因为需要额外的文件,在我的android go设备中,颤动新项目中的默认应用仅占用了60mbs,从这个意义上讲,我认为在Android Go设备上花费更多。
答案 7 :(得分:0)
调试时,我也遇到了这种非常APK的情况,而在7-8 mb左右的版本中。但是,这可以在更大的应用程序中看到,就本机而言,我们需要导入许多库,而使用Flutter可以优化工作。因此,如果我们假设一个应用程序在本机上应与Flutter重约30mb,那么它应该是相似的。最基本的应用程序会让您感到恐惧。但是重要的是优化图像
答案 8 :(得分:0)
这是使我的应用程序正常运行的Android官方文档 从〜20mb 到〜9mb
尝试 Proguard 建议
链接:https://developer.android.com/topic/performance/reduce-apk-size
答案 9 :(得分:0)
您可以在android studio中使用apk分析器来查看导致应用程序大小如此之大的原因。
您可以按照以下阅读内容来减小Flutter应用程序的大小。一些建议也适用于本机android开发。 Reducing flutter app size
答案 10 :(得分:0)
对于调试apk ,以下是优化步骤-
分析,使用Analyze APK
的构建工具中的Android studio
或通过解压缩zip手动获取apk。
在我看来,最大的文件夹是 lib ,其中包含4个名为arm64-v8a
,armeabi-v7a
,x86
,x86_64
的不同文件夹
因此这四个文件夹基本上都是移动设备的处理器体系结构。因此,为了弄清楚您的设备属于哪个类别,下面是一些示例-
ARM:这首先是一种移动处理器架构,现在大多数手机都在运行。高通的骁龙,三星的Exynos和联发科的移动芯片都是ARM处理器的例子。大多数现代芯片都是64位或ARM64。
x86:这是英特尔芯片的体系结构规范。与英特尔在计算机市场上的主导地位一样,这些芯片在Android手机中的普及程度要低得多。 x86_64是指64位Intel芯片。*
找到所需/所需的apk后,您现在可以使用以下命令根据这些处理器体系结构拆分apk flutter构建apk --debug --split-per-abi
最后检查 build / app / outputs / apk / debug / app-arm64-v8a-debug.apk (在此处替换为您选择的)文件夹,以获取所需的内容并减少内容apk。
答案 11 :(得分:0)
添加包含以下代码的Proguard
文件
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
注意:如果Proguard
文件不存在,则需要在该位置创建
/android/app/proguard-rules.pro
答案 12 :(得分:0)
要记录在寻求较小的APK / IPA尺寸方面的最新成就:
flutter/engine#5784 flutter / engine#5784在发布模式下从已编译的Dart代码中删除了Dart的VM服务:
将Android上的dart代码快照(包含框架+应用程序代码)减少了1.5MB(未压缩)
将整体发布APK的大小减少了475KB(压缩)
flutter/engine#5922将Flutter切换到新的最小ICU数据配置:
与APKs / IPA捆绑在一起的ICU数据大小减少了5.1MB(未压缩)
将发行版APK的整体大小减少了1.6MB(压缩)
通过这些改进,整体发布的APK现在缩小了2MB。这将minimal Flutter app的发行版APK大小减小到4.7MB(以前是6.7MB)。
在IPA的iOS上也可以看到类似的尺寸减小,但是由于Apple的加密和上传到App Store的IPA的App Thinning流程,很难记录准确的数字。
9月28日更新:App Store Connect针对iPhone X的报告称,这些更改使发行IPA下载大小减少了3.8MB,iOS上最小的Flutter应用现在已降至12.6MB。
答案 13 :(得分:0)
首先,在发布模式下使用:
构建您的应用程序在您的终端中:
flutter build --release
或者只是指定目标:
Android Apk:flutter build apk --release
对于 Android App Bundle:flutter build appbundle --release
IOS:flutter build ios --release
默认情况下,flutter run
编译为调试模式。这解释了
应用程序的大尺寸。 调试模式(热重载、Dart Devtools 等)与发布模式(简单应用程序)
默认情况下 flutter build
为 发布模式 构建。所以你可以只做 flutter build
使用 --split-debug-info
标志可以显着减少代码大小。有关使用此标志的示例,请参阅 Obfuscating Dart code。
您可以采取的其他一些措施使您的应用更小:
您可以了解有关 Flutter 应用大小的更多信息 here
答案 14 :(得分:0)
我已使用此命令为生产阶段生成已发布的 apk:
flutter build apk --split-per-abi
输出 apk 位于项目文件夹中:
[项目]/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
在我的情况下,apk 的大小减少到 5.3 MB(在执行上述命令之后)。 大尺寸的原因(几乎 > 50 MB),因为它们包含您在热重启或重启期间可能需要的一切,这会在您对代码进行少量更改时阻止再次构建整个系统。 >
发布版本是您所有代码的真实结果,它们是真正缩小的应用程序,没有任何容器,然后您可以在谷歌商店上分发。
答案 15 :(得分:-1)
我通过 flutter 构建的 apka 大小为 47mb, 应用程序包 -60mb.. 在 Play 商店上传捆绑包后,大小为 11 到 20 mbenter image description here