本文是关于我们可以遵循以减少应用程序大小的方法和技术。我们用 Flutter 开发了一个安卓应用程序。
但令人惊讶的是,与原生开发的 android 应用程序相比,调试应用程序的大小更大。因此,我们寻找一种减小应用程序大小的方法,并尝试减小移动应用程序的大小。所以最后我们找到了一些解决方案来解决这个问题。我们减小了应用程序的大小。
如果您是移动应用程序开发人员,那么您肯定会关心应用程序的大小,并且总是尝试构建小型应用程序并使用减小大小的技术。在 4G 和现代智能手机时代为用户提供应用程序时,减小尺寸成为重要且必不可少的过程之一,因为人们更喜欢较小的应用程序,许多用户在下载任何太大的应用程序之前会避免并三思而后行。根据一份报告,大多数智能手机用户的数据套餐都是有限的,所以他们不喜欢在单一的应用程序上花费他们的数据包。在编码过程中,我们需要进行优化,尽量减少应用的大小。
有两个维度来衡量应用程序大小
- 下载大小 - 应用在 Play 商店中的大小(下载时)
- 安装尺寸--这可以在安装应用程序后看到。这是当你下载应用、解压、编译和优化时发生的情况。这将大大扩展应用程序,可能是安装尺寸的两到三倍,甚至更多。
下载大小
当用户从play store上安装一个应用程序时,他会看到加载条,然后是实际的应用程序大小。根据谷歌的数据,Play Store上有259万个应用程序,难怪说服用户安装你的应用程序从未如此困难。应用程序越大,下载失败/取消的几率就越大。作为开发者,我们希望将应用程序的体积变小,以便我们的应用程序获得尽可能多的传播。
安装大小
这也有类似的现象。用户用视频、音频和图像填充他们的手机,他们会尝试安装一个新的应用程序,哎呀,没有空间了。他们会去寻找空间,去设置,然后检查哪个应用程序消耗更多空间。即使在尝试从 Play 商店下载时,它也建议他们删除一些应用程序以适应新应用程序,甚至给他们一些建议。
有许多良好的编码实践,建立一个稳定的架构将有助于应用程序更好地执行。有一些常见的方法和实践,你可以在你的应用程序中实现,使其变的更好。
一些减少应用程序大小的解决方案:
1.压缩PNG和JPG
每当您必须在应用程序内使用图像(例如演练屏幕)并且您不想从外部主机调用图像时,您应该压缩您的 PNG 和 JPG,因为高质量的图像会增加应用程序的大小。您可以在 Google 上快速搜索压缩 PNG 和 JPG 的工具。
2.使用网络图片
在Flutter中,开发者使用assets文件夹中的图片,这对快速加载图片很有帮助。但是当你在应用中存储这些图片时,assets会给应用增加更多的体积。解决方案是使用网络图片。在一个永久的存储路径中上传图片,如Firebase存储,或AWS,并在你的代码中使用该图片的链接。这种方法也可以帮助你减少应用程序的大小。
3.缓存
如果你使用网络图片,缓存是一件非常重要的事情,缓存不会帮助减少应用程序的大小,但它会使应用程序加载速度更快,提高应用程序的性能。所有常用图片,如个人资料图片、使用 cached_network_image
插件的背景图片。
cached_network_image
包允许您使用任何小部件作为占位符。它可以在 pub.dev 中找到。
4.使用.svg格式的图标
使用矢量绘图我们可以获得一些好处。无需担心不同的设备 DPI,这也有助于减少 apk 大小。
当您从 Google 的 Material Design 图标库下载系统应用程序图标时,下载 .svg 格式而不是 .png, .svg 图像可以帮助您减小应用程序大小。
5.使用有效的库
删除pubspec.yaml文件中所有未使用的包。一旦完成构建你的应用程序,你应该检查你的pubspec.yaml,删除不使用的库,并从pubspec.yaml中删除所有未使用的asset。
6.使用Google Fonts
字体是应用中一个非常重要的基本东西。它们很重,而且被卡在应用程序中。你需要字体来为用户提供最好的用户体验,它将帮助你建立一个漂亮的应用程序。你可能想使用 google_fonts package
,而不是在应用中捆绑字体。使用 google_fonts 包,.ttf 或 .otf 文件不需要存储在您的资产文件夹中并映射到 pubspec.yaml 文件中。相反,它们可以在运行时通过 HTTP 获取一次,并缓存在应用程序的文件系统中。这类似于原生 android 开发中的可下载字体。您可以在 pub.dev 上查看 google 字体包。在那里你可以从谷歌字体中找到很多不同的字体。
使用 Proguard
Proguard 是一个 java 程序优化器。它以不更改功能但更改表示以使其更紧凑的方式优化您的代码。它混淆了原始名称无关紧要的类型、字段和方法的名称,以便将长名称替换为像 a 和 b 这样的短字符串以提高效率。包和类的名称可能很长,但不应影响效率。它还从依赖项中删除未使用的 java 代码。要设置 proguard,请确保 <app dir>/android/app/build.gradle 中的构建类型类似于如下所示:
buildTypes {
release {
minifyEnabled true // add this
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ // add this
signingConfig signingConfigs.release // this is the default for release
}
}
在同一目录中,创建文件 proguard-rules.pro 并添加以下代码:
## Flutter wrapper
-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.** { *; }
# -keep class com.google.firebase.** { *; } // uncomment this if you are using firebase in the project
-dontwarn io.flutter.embedding.**
-ignorewarnings
您还应该转到 gradle.properties 并将下面的代码段添加到其中:
extra-gen-snapshot-options= — obfuscate
Resource Shrinking
这将 proguard 的死代码消除概念扩展到资源。您在 <app dir>/android/app 目录(您在其中添加 proguard 的片段)中的 build.gradle 文件中的构建类型现在应该如下所示:
buildTypes {
release {
minifyEnabled true // added previously
shrinkResources true // add this
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ // added previously
signingConfig signingConfigs.release // added previously
}
}
大小分析工具
Flutter新版本包括尺寸分析工具,以帮助开发人员了解其应用程序的发布构建的细分。通过在构建时传递 --analyze-size
标志来调用大小分析工具:
flutter build apk --analyze-size
flutter build appbundle --analyze-size
flutter build ios --analyze-size
flutter build linux --analyze-size
flutter build macos --analyze-size
flutter build windows --analyze-size
删除不必要的东西
分析和优化最广泛的文件和文件夹非常有效。<br />
要测试发布的 android 应用程序,请在终端上运行以下命令:
flutter build apk --split-per-abi
你将从 build/app/output/apk/release
文件夹得到三个apk文件。你可以测试v7版本的apk文件。如果您想在 google play 商店中发布应用程序,请不要上传以下任何文件。
使用 Google 推荐的 app bundle 文件。
要生成应用程序包,请在终端上运行以下命令:
flutter build appbundle --target-platform android-arm,android-arm64,andro
之后,您将在 build/app/output/appbundle/release
文件夹中获得一个 .aab
文件。现在您可以将此 .aab
文件上传到 google play 商店。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。