前言
没有用户愿意下载大型 APK,因为它可能会占用他的大部分网络/Wifi 带宽,最重要的是,移动设备内的空间。
APK 的大小会影响应用的加载速度、使用的内存量以及消耗的电量。
优化应用程序的大小很重要,因为手机始终是内存和空间受限的设备。那么,在 Android-Development 中我们可以通过哪些方式来提高我们的 apk 大小呢?让我们继续在本文中学习。
了解 Android App Bundle
Android App Bundle是一种发布格式,包含您应用的所有编译代码和资源,并将 APK 生成和签名推迟到 Google Play。
Google Play 使用您的 app bundle 为每个设备配置生成和提供优化的 APK,因此只下载特定设备所需的代码和资源来运行您的应用程序。您不再需要构建、签署和管理多个 APK 来优化对不同设备的支持,并且用户可以获得更小、更优化的下载。
App Bundle 是发布格式
图片来源:谷歌安卓官方网站。
Android App Bundles - 文件定位和服务
这些 Android 应用程序包对文件定位有何帮助?很简单,假设我们的应用程序中有 hdpi、xhdpi、xxhdpi 资源。根据正在下载应用程序的设备,如果它是 hdpi 设备(例如),则只会在设备上安装来自 hdpi 的资源。
如果应用程序针对多种语言(英语、西班牙语、法语等),则只会将特定的字符串资源下载到设备上。
这有助于节省设备内存的空间。
构建 Android App Bundle
构建 Android 应用程序包非常简单。只需从 Android Studio 菜单中选择 Build 选项,然后选择 Build Bundles
Android 尺寸分析器
为了了解哪些文件实际上在应用程序中占用了更多空间,请使用 Android Studio 中的 Android Size Analyzer 插件。用于安装插件
- 选择File > Settings(或在 Mac 上,Android Studio > Preferences。)
- 选择左侧面板中的插件部分。
- 单击市场选项卡。
- 搜索“Android Size Analyzer”插件。
- 单击分析器插件的安装按钮。
安装插件后重新启动 IDE。现在,要分析应用程序,请从菜单栏中转到分析 > 分析应用程序大小。我们会得到一个类似这样的窗口:
这些建议可以帮助我们以更好的方式减小应用程序的大小。
删除未使用的资源
正如我们已经讨论过的,apk 的大小会影响应用程序的加载速度、使用的内存量以及消耗的内存功率。因此,可以实现以减少 apk 大小的主要事情之一是删除应用程序中未使用的资源。
此外,建议使用可缩放的可绘制对象(导入矢量资源)而不是其他图像格式,如 PNG、JPEG 等。
使用 Vector Drawable 是显着减小尺寸的最佳方法之一。
使用Lint
Lint 实际上有助于在应用程序内生成警告或未使用的代码。因此,这实际上可以帮助删除它们,从而有助于减小应用程序的大小。
减少库大小
检查在使用库时是否可以减小大小。例如,仅使用特定的 Google Play 服务库。只编译需要的。
重用代码
面向对象编程解决了编程世界中的很多问题。尽量重用代码而不是重复代码。重复代码还会导致文件大小增加,从而影响 Apk 大小。
压缩 PNG 和 JPEG 文件
如果在您的项目中必须使用 PNG 和 JPEG 文件,您可以使用 TinyPNG 等图像质量工具对其进行压缩。
在大多数应用程序中,图像用于传达信息或改善用户体验。但是这里最大的缺点可能是使用了大量的图像,这会增加应用程序的大小。在将应用程序发布到 Play 商店之前,确保了解并实施图像压缩技术以减小 apk 的大小。
使用 WebP 文件格式
正如我们在上面为 Android Analyzer 插件共享的图片中看到的,其中一项建议是将 PNG 文件更改为 WebP 文件格式。
使用 Proguard
每次我们构建一个新项目时,我们都会在应用级的 build.gradle 文件中看到如下一段代码
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
ProGuard 对我们的项目产生以下影响,
它减小了应用程序的大小。
它删除了导致 Android 应用程序的 64K 方法计数限制的未使用类和方法。
它通过混淆代码使应用程序难以进行逆向工程。
创建多个 APK
如果我们不使用 App Bundle,我们可以使用传统方式。我们可以创建多个类似于 App Bundle 的 APK。Multiple apk 主要用于针对不同的屏幕密度和不同的 CPU 架构生成特定的 APK。
收缩资源
尽可能减少资源。在 Gradle 中使用shrinkResources属性将删除项目中任何地方未使用的所有资源。通过添加以下行在您的应用程序级 build.gradle 文件中启用此功能:
buildTypes {
release {
........
shrinkResources true
........
}
}
资源配置
使用resConfigs删除不需要的本地化资源。所有支持库都可能具有我们不需要的其他语言的本地化文件夹。
Gradle 资源收缩器仅删除您的应用代码未引用的资源,这意味着它不会删除不同设备配置的替代资源(特定于设备/位置)。如有必要,您可以使用 Android Gradle 插件的resConfigs属性来删除您的应用不需要的替代资源文件。
以下代码段显示了如何将语言资源限制为仅英语和法语:
android {
defaultConfig {
...
resConfigs "en", "fr"
}
}
如前所述,拥有未使用的语言资源只会增加 apk 的大小。因此,删除未使用的文件和资源很重要。
调试实现
删除您在应用程序中拥有的任何调试库。它可以通过在构建测试调试 apk 时使用debugImplementation来完成。
就像我们在 MindOrks 使用库Android Debug Database来调试数据库一样。
debugImplementation 'com.amitshekhar.android:debug-db:1.0.1'
使用 R8 减小 APK 大小
R8 缩减是我们减少应用程序代码量的过程,通过这样做,APK 大小会自动减小。R8 作为 Proguard 完成大部分工作。为什么我们需要更喜欢它?原因是它适用于 Proguard 规则并在提高输出大小的同时更快地缩小代码。
最后,有什么比在我们的应用程序中理解和实施这些步骤来为我们的客户提供优化的 apk 更好的了!
这就是这篇文章的全部内容。
我们希望这篇文章对理解在 Android 中减小应用程序大小的不同方法有所帮助。
非常感谢您的参与!
作者:Dheeraj Sree
链接:https://blog.mindorks.com/how-to-reduce-apk-size-in-android-2f3713d2d662