APK大小缩小65%,内存减少70%:如何优化Android App
我们一直在努力为我们的Android应用程序构建MVP产品。在开发MVP产品后,我们发现需要进行应用程序优化以提高性能。经过分析,我们发现了以下可以改进的应用指标:内存使用、APK大小、CPU使用情况和UI性能。该应用程序主要关注显示高质量的大型图片,从而导致高内存消耗和大型APK大小。
APK大小
缩小APK大小是我们在应用优化中的初始重点。这是因为较大的APK大小可能会产生重要影响:
为什么APK大小很重要?
存储影响:较大的APK会占用用户设备上更多的存储空间,可能导致与存储相关的性能问题。用户可能会因为其他应用或文件而耗尽存储空间。
内存使用:较大的APK可能需要更多的内存来加载和运行应用程序。这种增加的内存使用可能会对具有有限RAM的设备造成压力,导致性能问题。
我们的目标是通过减小APK大小来改善用户体验和应用程序性能。我们将使用APK分析器来确定导致APK大小增加的因素。
什么是APK Analyzer
APK Analyzer是谷歌提供的一种工具,用于检查Android应用程序包(APK)的内容。
https://developer.android.com/studio/debug/apk-analyzer
APK Analyzer帮助开发人员了解他们的APK文件的组成,包括构成其Android应用程序的资源、资产和代码。
将APK拖放到Android Studio IDE中以检查其组件。
初始APK大小约为20.6MB
Apk缩小体积措施
1. Proguard规则
- 通过启用minifyEnabled和shrinkResources标志,并添加ProGuard规则来解决构建错误,我们成功地将APK大小从约20.5MB减小到15.5MB。这表示APK大小减少了25%。
官方文档:https://developer.android.com/build/shrink-code
- 尽管我们通过应用规则成功减小了APK大小25%,但从屏幕截图可以看出,77%的大小仍然由资源占据。这表明在减小APK大小方面还有更大的潜力。
2. 转换PNG为Webp
将PNG可绘制文件转换为Webp可以显著减小APK大小,通常可以减少60%到70%的资源大小。
重要提示:
通过Android Studio的转换过程优化WebP资源相比于直接使用设计师或设计工具(如Figma或Zeplin)的资源效率更高。在APK大小减小方面,结果可能会有所改善。
选择Webp图像->右键单击->转换为PNG
转换为PNG后,将所有这些图像转换为Webp。
选择PNG图像->右键单击->转换为Webp
这种方法可以显著减小APK大小。
3. 删除未使用的资源
随着项目范围的增加,我们可能会添加许多未使用的可绘制资源。删除这些未使用的资源有助于减小APK大小。
在Android Studio的顶部导航到“重构”,然后选择“删除未使用的资源”。这个操作会显示资源列表。验证每个资源在您的项目中是否被使用,并继续删除已确认未使用的资源。
4. 添加ResConfigs
“resConfigs”选项可以控制哪些语言或特定地区的资源包含在您的应用的APK(Android Package)文件中。通过排除与特定语言或配置相关的不必要资源,这个功能对于优化应用的大小非常有价值。
要在应用的APK中仅包括英文资源并排除其他地区的资源,在应用的build.gradle文件的defaultConfig块内添加以下行:
defaultConfig {
// ...
resConfigs("en")
// ...
}
如果您的应用支持多种语言,请按如下方式添加语言代码。
defaultConfig {
// ...
resConfigs("en", "de-rDE")
// ...
}
5. 处理应用内资源
步骤1:为了确保流畅的用户体验,我们在应用内部包含了高质量的图片,以避免外部URL加载时间过长。我们在应用中包含了10张图片,但实际上只使用了其中的5张。通过减少图片数量和存储消耗,我们改善了应用的性能,并消除了在加载图片时出现意外空白屏幕的问题。
步骤2:对于启动画面,我们最初使用了一段约2MB大小的8秒视频,仅在首次启动应用时显示。为了优化应用大小和用户体验,我们决定将视频剪裁至约800KB大小,使其在有限的使用情况下更加高效。
6. 字体优化
我们从多个团队接收到了各种功能的设计,每个设计都有其喜欢的字体,如“Inter”和“Poppins”。使用多个.ttf字体文件会增加应用的大小。为了减小应用的占用空间,我们在整个应用中统一使用了一个字体样式,消除了冗余的字体文件。
但是,如果您的应用需要多种字体样式,请考虑使用可下载字体。这种方法允许您避免直接将字体嵌入应用中。
7. Android应用捆绑(AAB)
Android应用捆绑(AAB)是一种与传统APK相比更高效的Android应用打包格式。AAB包含构建APK所需的所有编译代码、资源和资产,但它们以更优化的方式进行。AAB根据特定的设备配置(如屏幕尺寸、语言等)进行自定义。当用户从Google Play商店下载应用时,商店会动态生成适用于用户特定设备的定制APK,仅包含用户设备所需的资源和代码,从而减小下载大小并优化用户体验。
结论
通过上述所有步骤和对应用程序进行一些小的重构,我们成功将APK大小从20.5MB减小到8.3MB ,实现了约60%的APK大小减少。
尽管APK大小是8.3MB,但根据上面显示的情况,用户只需要下载7.7MB(缩小了约65%)的APK。