APK大小缩小65%,内存减少70%:如何优化Android App

news2024/11/15 13:23:02

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比特币有助减少腐败;微软 Copilot 每月赔 20 美元;AIGC 明年会“洗冷水澡”丨 RTE 开发者日报 Vol.64

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

AMEYA360分享:村田电子搭载了Onsemi公司IoT设备专用IC的新Bluetooth® Low Energy模块开始量产

近年来,所有远程监控、远程控制的用例均要求具备可无线连接的电池驱动IoT设备,而长寿命电池与安全的数据通信功能是其关键。为此,在IoT边缘设备的设计方面,最大的课题是要提高功率效率和安全性。 Type 2EG由于无线与内置微处理器两…

React 状态管理 - Mobx 入门(下)接入实战

目录 Mobx接入实战 Mobx构造复杂应用需要注意的 Mobx5 Or Mobx4 Mobx5 Mobx4 /package.json /src/routes/index.jsx /src/app.jsx /src/index.jsx /src/models/home/index.js /src/models/index.js /src/containers/home/index.jsx Mobx VS Redux Mobx接入实战 对…

RabbitMQ之延迟队列解读

目录 基本介绍 概述 为什么需要引进RabbitMQ延迟队列 应用场景 springboot代码实战 实战架构 工程概述 RabbitConfigDeal 配置类:创建队列及交换机并进行绑定 MessageService业务类:发送消息及接收消息 主启动类RabbitMq01Application&#xff1…

2023年中国医院信息系统发展现状及行业市场规模分析[图]

医院信息系统,亦称“医院管理信息系统”(简称HIS),是指利用计算机软硬件技术、网络通信技术等现代化手段,对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段产生的数据进行采集储存、…

Lab 1: Unix utilities汇总

这个实验主要学习了常用的一些系统调用。 Lab 1: Unix utilities Boot xv6 (easy) git克隆,切换分支,qemu。根据要求进行操作即可。 $ git clone git://g.csail.mit.edu/xv6-labs-2020 $ cd xv6-labs-2020 $ git checkout util $ make qemusleep (ea…

分享一下花店制作微信小程序的步骤是什么

一、准备阶段 在准备阶段,花店需要完成以下任务: 注册微信公众平台账号:首先,花店需要注册一个微信公众平台账号,这个账号将用于创建和管理微信小程序。 确定小程序的功能和需求:花店需要根据自身的业务需…

RISC-V架构 | 飞凌嵌入式FET7110-C国产高性能核心板现货发售!

RISC-V凭借其完全开源免费且可自由修改的特性而备受国内厂商的追捧,在此背景下,飞凌嵌入式联合RISC-V国产处理器厂商赛昉科技(StarFive)基于昉惊鸿7110处理器共同推出FET7110-C核心板。 现在,飞凌嵌入式FET7110-C核心板(商业级&a…

2023.10月网络优化项目实战

基础配置 sw2 <Huawei>sy Enter system view, return user view with Ctrl+Z. [Huawei]sy sw2 [sw2]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done.[sw2]int e0/0/1 [sw2-Ethernet0/0/1]port link-type access [s…

第十章-输入输出系统

Ⅰ.锁 本质是互斥操作 原因&#xff1a;针对公共资源访问时&#xff0c;临界区若不加以互斥限制&#xff0c;可能导致执行过程中突然的中断导致出现异常。 1.互斥过程 设定互斥量M为二值信号量&#xff0c;0/1&#xff0c;P-&#xff0c;V&#xff0c;现有两个进程A、B共同…

大数据flink篇之三-flink运行环境安装(一)单机Standalone安装

一、安装包下载地址 https://archive.apache.org/dist/flink/flink-1.15.0/ 二、安装配置流程 前提基础&#xff1a;Centos环境&#xff08;建议7以上&#xff09; 安装命令&#xff1a; 解压&#xff1a;tar -zxvf flink-xxxx.tar.gz 修改配置conf/flink-conf.yaml&#xff1…

最新AI创作系统源码ChatGPT网站源码/支持Midjourney,AI绘画/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

RxJava介绍及基本原理

随着互联网的迅猛发展&#xff0c;Java已成为最广泛应用于后端开发的语言之一。而在处理异步操作和事件驱动编程方面&#xff0c;传统的Java多线程并不总是最佳选择。这时候&#xff0c;RxJava作为一个基于观察者模式、函数式编程和响应式编程理念的库&#xff0c;为我们提供了…

【Nuget】程序包源

程序包源地址(部分) Azure 中国区的官方 NuGet 程序包源地址 https://nuget.cdn.azure.cn/v3/index.json 官方 NuGet 程序包源地址 V2 https://www.nuget.org/api/v2 官方 NuGet 程序包源地址 V3 https://api.nuget.org/v3/index.json MyGet 上 Eto.Forms 框架的程序包源地址 h…

杨冰:分布式数据库助力企业数实融合,跨越数字化转型深水区

近日&#xff0c;2023 inclusion外滩大会在上海黄浦世博园区举办。由赛迪顾问与 OceanBase 联合主办的外滩大会“分布式数据库助力数实融合”见解论坛圆满落幕。 会上&#xff0c;OceanBase CEO 杨冰发表了《分布式数据库助力企业数实融合&#xff0c;跨越数字化转型深水区》的…

一个完整的初学者指南Django-part1

源自&#xff1a;https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-part-1.html 一个完整的初学者指南Django - 第1部分 介绍 今天我将开始一个关于 Django 基础知识的新系列教程。这是一个完整的 Django 初学者指南。材料分为七…

mysql面试题38:count(1)、count(*) 与 count(列名) 的区别

该文章专注于面试&#xff0c;面试只要回答关键点即可&#xff0c;不需要对框架有非常深入的回答&#xff0c;如果你想应付面试&#xff0c;是足够了&#xff0c;抓住关键点 面试官&#xff1a; count(1)、count(*) 与 count(列名) 的区别 当使用COUNT函数进行数据统计时&…

echarts折线图(其他图也是一样)设置tooltip自动滚动

按顺序自动滚动效果 <div class"leftComp-charts" id"chartsBox"></div>chartsData: {roadNorm: [],time: []},eChartsTimer: nullinitChartsBox() {this.option {tooltip: {trigger: "axis",axisPointer: {// 方法一type: "s…

2023年中国稻谷加工机械分类、市场规模及发展前景分析[图]

稻谷加工机械设备主要包括砻谷机、碾米机、抛光机、碎米机和砻糠机&#xff1b;通过物理和机械方式将稻谷加工成可供人们食用的大米&#xff0c;同时还可以提取出一些有价值的副产品&#xff0c;如砻糠可以用作饲料。 稻谷加工机械制造行业分类 资料来源&#xff1a;共研产业咨…

设计模式-相关内容

文章目录 一、设计模式概述二、UML图1.类的表示方法2.类与类之间关系的表示方法(1)关联关系(2)聚合关系(3)组合关系(4)依赖关系(5)继承关系(6)实现关系 三、软件设计原则1.开闭原则2.里氏代换原则3.依赖倒转原则4.接口隔离原则5.合成复用原则6.迪米特法则 一、设计模式概述 创…