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

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.hqwc.cn/news/130987.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 PyTorch 中冻结模型权重以进行迁移学习:分步教程

一、说明 迁移学习是一种机器学习技术,其中预先训练的模型适用于新的但类似的问题。迁移学习的关键步骤之一是能够冻结预训练模型的层,以便在训练期间仅更新网络的某些部分。当您想要保留预训练模型已经学习的特征时,冻结至关重要。在本教程中…

提取log文件中的数据,画图

要提取的log格式如下: 代码如下: import reimport matplotlib.pyplot as plt import numpy as npimport argparse from os import path from re import searchclass DataExtractor(object): DataExtrator class def __init__(self, infile, keyword, out…

2023年中国牙线市场规模、竞争现状及行业需求前景分析[图]

牙线是由合成纤维或其他材料制成,或添加香料、色素、活性成分等,用来清洁牙齿邻面附着物的线。能够有效包裹牙齿,对于清洁平面/凸起牙面和牙齿邻接面的牙菌斑效果很好,还可以实现对于牙缝间食物/异物的剔除,有效清洁口…

SRE实战:如何低成本推进风险治理?稳定性与架构优化的3个策略

一分钟精华速览 SRE 团队每天面临着不可控的各类风险和重复发生的琐事,故障时疲于奔命忙于救火。作为技术管理者,你一直担心这些琐事会像滚雪球一样,越来越多地、无止尽地消耗你的团队,进而思考如何系统性地枚举、掌控这些风险&a…

01 初识FPGA

01 初识FPGA 一.FPGA是什么 FPGA(Filed Programmable Gate Array),现场可编程门阵列,一种以数字电路为主的集成芯片,属于可编程逻辑器件PLD的一种。 1.1 两大巨头 Xilinx(赛灵思)Altera(阿尔特拉&#…

【Azure 架构师学习笔记】-Azure Data Factory (5) --Data Flow

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器 前言 Azure Data Factory, ADF 是微软Azure 的ETL 首选服务之一, 是Azure data platfor…

MongoDB——centOS7环境Mongodb权限管理(图解版)

目录 一、MongDB权限概述1.1、MongDB权限概述1.2、MongDB权限列表 二、Mongodb权限管理示例2.1、创建账号2.1.1、创建管理员用户2.1.2、开启认证2.1.3、创建普通账号 一、MongDB权限概述 1.1、MongDB权限概述 mongodb是没有默认管理员账号,所以要先添加管理员账号…

2023版 STM32实战9 RTC实时时钟/闹钟

RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 注意事项 -1- 要手动配置中断寄存器 -2- 需要等待写操作完成 -3- 时钟闹钟中段…

【Python 零基础入门】基础语法

【Python 零基础入门】第四课 基础语法 【Python 零基础入门】第四课 基础语法怎么写 Python 代码缩进注释Python 标识符规则Python关键字代码行和块导包 字符串操作字符串连接字符串的其他常用方法 循环for 循环while 循环 判断语句比较运算符逻辑运算符if 判断三元表达式brea…

机器学习(21)---召回率(recall)、精度(precision)和准确率(accuracy)

文章目录 1. 分布不平衡的数据集2. TP、TN 、FP 、FN3. 混淆矩阵4. 各自的计算公式5. 例题应用 1. 分布不平衡的数据集 1. 精度(precision)和召回率(recall)是衡量机器学习模型性能的重要指标,特别是数据集分布不平衡的…

《鱿鱼游戏》杀入体验店 SandboxVR未能复制神话

曾经火爆全网的剧集《鱿鱼游戏》这回真的变成游戏了,而且还是能身临其境去玩的那种。 9月底,沉浸式游戏社交公司Sandbox VR与全球知名流媒体Netflix合作,将《鱿鱼游戏》搬入VR体验店,用线下场地VR的方式,重现123木头人…

Android Fragment中使用Arouter跳转到Activity后返回Fragment不回调onActivityResult

Fragment中通过路由跳转到Activity 跳转传递参数 通过Arouter跳转 Postcard postcard ARouter.getInstance().build(RouterConstant.ACTION_TRANSMANAGERACTIVITY1);Bundle bundle new Bundle();bundle.putInt("code", 404);postcard.with(bundle); //设置bundlef…