Android 项目必备(二十三)-->减小 APK 大小
没有用户愿意下载大型 APK,因为它可能会占用他的大部分网络/Wifi 带宽,最重要的是,移动设备内的空间。
APK 的大小会影响应用的加载速度、使用的内存量以及消耗的电量。
优化应用程序的大小很重要,因为手机始终是内存和空间受限的设备。那么,在 Android-Development 中我们可以通过哪些方式来提高我们的 apk 大小呢?让我们继续在本文中学习。
了解 Android App Bundle
Android App Bundle 是一种发布格式,包含您应用的所有编译代码和资源,并将 APK 生成和签名推迟到 Google Play。
Google Play 使用您的 app bundle 为每个设备配置生成和提供优化的 APK,因此只下载特定设备所需的代码和资源来运行您的应用程序。您不再需要构建、签署和管理多个 APK 来优化对不同设备的支持,并且用户可以获得更小、更优化的下载。
Android App Bundles - 文件定位和服务
- 这些 Android 应用程序包对文件定位有何帮助?很简单,假设我们的应用程序中有 hdpi、xhdpi、xxhdpi 资源。根据正在下载应用程序的设备,如果它是 hdpi 设备(例如),则只会在设备上安装来自 hdpi 的资源。
- 如果应用程序针对多种语言(英语、西班牙语、法语等),则只会将特定的字符串资源下载到设备上。
- 这有助于节省设备内存的空间。
构建 Android App Bundle
构建 Android 应用程序包非常简单。只需从 Android Studio 菜单中选择 Build 选项,然后选择 Build Bundles
优化
安装插件
了解哪些文件实际上在应用程序中占用了更多空间,请使用 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 falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}
}
ProGuard 对我们的项目产生以下影响,
- 它减小了应用程序的大小。
- 它删除了导致 Android 应用程序的 64K 方法计数限制的未使用类和方法。
- 它通过混淆代码使应用程序难以进行逆向工程。
收缩资源
尽可能减少资源。在 Gradle 中使用shrinkResources属性将删除项目中任何地方未使用的所有资源。通过添加以下行在您的应用程序级 build.gradle 文件中启用此功能:
buildTypes {release {........shrinkResources true........}
}
资源配置
使用resConfigs删除不需要的本地化资源。所有支持库都可能具有我们不需要的其他语言的本地化文件夹。
Gradle 资源收缩器仅删除您的应用代码未引用的资源,这意味着它不会删除不同设备配置的替代资源(特定于设备/位置)。如有必要,您可以使用 Android Gradle 插件的resConfigs属性来删除您的应用不需要的替代资源文件。
以下代码段显示了如何将语言资源限制为仅英语和法语:
android {defaultConfig {...resConfigs "en", "fr"}
}
如前所述,拥有未使用的语言资源只会增加 apk 的大小。因此,删除未使用的文件和资源很重要。
使用 R8 减小 APK 大小
R8 缩减是我们减少应用程序代码量的过程,通过这样做,APK 大小会自动减小。R8 作为 Proguard 完成大部分工作。为什么我们需要更喜欢它?原因是它适用于 Proguard 规则并在提高输出大小的同时更快地缩小代码。
最后,有什么比在我们的应用程序中理解和实施这些步骤来为我们的客户提供优化的 apk 更好的了!
Android 项目必备(二十三)-->减小 APK 大小相关推荐
- Android项目必备技术
1.一个APP只需要一个Activity //片段fragmentimplementation 'me.yokeyword:fragmentation:1.3.6'implementation 'me ...
- Android 系统(232)---减小 OTA 大小
减小 OTA 大小 本页介绍了为减少多次编译之间不必要的文件变更而对 AOSP 编译系统所做的改动.使用专有编译系统的设备实现人员可根据这项信息采取措施,减小无线下载 (OTA) 更新的大小. 有时, ...
- Android 项目是如何编译成.apk的
虽然Android Studio集成了完整的编译工具,但我们仍需了解Android 项目的编译过程. 本篇博客则是总结Android 项目的编译过程. 编译过程流程图 官方流程图 谷歌Android开 ...
- Android 项目必备(二十六)-->获取手机中所有 APP
效果图 代码 添加依赖 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30' implementation ...
- Android 项目必备(二十九)-->App 在线升级与更新
文章目录 前言 实战 前言 1. 用户使用 App 的时候升级提醒有两种方式获得: 通过应用市场获取: 打开应用之后提醒用户更新升级. 2. 更新操作一般是在用户点击了升级按钮之后开始执行的,这里的升 ...
- Android 项目必备(四十二)-->Android 多窗口模式
简介 自由窗口模式: 该模式类似于常见的桌面操作系统, 应用界面的窗口可以自由的拖动和修改大小. 分屏模式 该模式可以在手机上使用, 该模式将屏幕一分为二, 同时显示两个应用界面. 画中画模式: 该模 ...
- Android 项目必备(四十三)-->Android 开发者的 new 电脑
前言 作为 Android 开发者,当你新入职一家公司,拿到新发的电脑,你会对电脑干点啥? 安装开发环境?装软件?你是否还会铺天盖地到处找之前电脑备份的东西?又或者还想不起来有什么上一台电脑好用的软件 ...
- Android 项目必备(二十一)-->APP 多语言切换(国际化)
最近公司开始做多语言版本,由于之前没有做过,所以在网上搜寻了一番这方面的资料,最后经过实践.总结,写下了这篇文章. 效果图 实现 1. 创建对应语言的 string.xml 简体中文,繁体和 Engl ...
- Android 项目必备(二十七)-->加密和解密
概况 在对称加密算法中,双方使用的密钥相同,要求解密方事先必须知道加密密钥.这类加密算法技术较为成熟,加密效率高. 在非对称加密算法中,收发双方使用不同的密钥,发方使用公开密钥对消息进行加密,收发使用 ...
- Android 项目必备(十六)--> 手机号 验证码 密码
文章目录 手机号 验证码 密码 在我们的项目中,获取验证码.手机号验证以及密码输入是很常见的小功能. 手机号 1. 布局文件 <EditTextandroid:id="@+id/et_ ...
最新文章
- Scrapy爬虫-必备插件
- php word组件使用方法,快速解决PHP调用Word组件DCOM权限的问题讲解
- Linuxday01基础命令
- how does eclipse know what tasks it should do when we select Maven build
- Caffe学习记录(十一) ICNet分割网络学习
- JAVA面试要点008---HashMap、Hashtable、ConcurrentHashMap的原理与区别_ConcurrentHashMap原理
- 离婚冷静期有用吗?全国哪个省份的情侣最想结婚?大数据告诉你
- RHCE系列之权限管理----ACL(访问控制列表)
- 视频监控市场发展潜力大 六个阻碍待突破
- flex的简介(来自百度百科)
- windows10禁用UAC
- 计算机毕业设计的步骤
- Ajax传参里面含有特殊字符
- 音视频开发系列(2)PCM音量控制(高级篇)
- 简述信息都有哪些特征?
- [译]const T vs. T const ——Dan Saks 【翻译】
- 刚子扯谈:“爆吧”圣斗士们,你妈没叫你回家吃饭
- CANopen协议中文文档
- SVG公众号排版 | 快速解决视频号美化出现“点赞信息”
- XSS Phishing - 新式跨站脚本攻击方式