头图

本文是关于我们可以遵循以减少应用程序大小的方法和技术。我们用 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 商店。


杭州程序员张张
11.8k 声望6.7k 粉丝

Web/Flutter/独立开发者/铲屎官