共计 3699 个字符,预计需要花费 10 分钟才能阅读完成。
本文是对于咱们能够遵循以缩小应用程序大小的办法和技术。咱们用 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 商店。