当前位置: 首页 > news >正文

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。

相关文章:

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

APK大小缩小65%,内存减少70%:如何优化Android App 我们一直在努力为我们的Android应用程序构建MVP产品。在开发MVP产品后,我们发现需要进行应用程序优化以提高性能。经过分析,我们发现了以下可以改进的应用…...

传统工厂如何搭建蒸汽流量远程无线抄表系统?

一、应用背景 2021年国务院政府工作报告中指出,扎实做好碳达峰、碳中和各项工作,制定2030年前碳排放达峰行动方案,优化产业结构和能源结构,特别是近期煤炭价格上涨导致蒸汽价格大幅上涨,节能减排显得更加重要&#xf…...

睿趣科技:抖音店铺怎么取名受欢迎

抖音作为国内最大的短视频平台,其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺,而一个富有创意和吸引力的店铺名字,往往能带来更多的客流量。那么,如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…...

面试经典 150 题 22 —(数组 / 字符串)— 28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 方法一 class Solution { public:int strStr(string haystack, string needle) {if(haystack.find(needle) string::npos){return -1;}return haystack.find(needle);} };方法二 class Solution { public:int strStr(string haystack, s…...

儿童产品亚马逊CPC认证审核不通过的原因解析

一、亚马逊CPC认证审核不通过的原因 CPC认证是亚马逊针对卖家销售儿童用品的一个认证,如果提交CPC证书到亚马逊,亚马逊审核一直不通过,我们可以从几个方面入手来查下什么原因,是资料本身的原因?是否提供的资料合规&…...

项目_数据可视化| 折线图.散点图.随机漫步

安装matplotlib 在正式开始编写程序之前,需要先安装pip、matplotlib模块,苹果系统的安装问题在之前的文章中有相关介绍内容,如果pycharm运行模块报错,可以再次检查是否版本兼容问题。 绘制折线图 调用subplot(&#x…...

Android 项目增加 res配置

main.res.srcDirs "src/main/res_test" build->android->sourceSets...

MySQL数据库的MVCC详解

在MySQL的事务隔离锁机制中,MVCC是一个非常重要的概念,学会MVCC可以更好地理解MySQL如何实现各种隔离级别。 首先,大概地介绍一下mysql的事务隔离级别: 1、读未提交(Read Uncommited):指的是&…...

AI:10-基于TensorFlow的玉米病害识别

玉米是世界上最重要的粮食作物之一,然而,玉米病害对其产量和质量造成了严重威胁。传统的病害识别方法通常依赖于人工观察和经验判断,效率低下且易受主观因素影响。近年来,基于深度学习的图像识别技术在农业领域取得了显著进展,为玉米病害的快速、准确识别提供了新的解决方…...

vue3前端开发系列 - electron开发桌面程序(2023-10月最新版)

文章目录 1. 说明2. 创建项目3. 创建文件夹electron3.1 编写脚本electron.js3.2 编写脚本proload.js 4. 修改package.json4.1 删除type4.2 修改scripts4.3 完整的配置如下 5. 修改App.vue6. 修改vite.config.ts7. 启动8. 打包安装9. 项目公开地址 1. 说明 本次安装使用的环境版…...

前端uniapp生成海报并保存相册

uiapp插件 目录 图片qrcode.vue源码完整版封装源码qrcodeSwiper.vue最后 图片 qrcode.vue源码完整版 <template><view class"qrcode"><div class"qrcode_swiper SourceHanSansSC-Normal"><!-- <cc-scroolCard :dataInfo"dat…...

0基础学习VR全景平台篇 第104篇:720全景后期软件安装

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 摄影进入数码时代&#xff0c;后期软件继承“暗房工艺”&#xff0c;成为摄影师表达内在情感的必备工具。 首先说明&#xff0c;全景摄影与平面摄影的一个显著的区别是全景图片需…...

CMakeLists编译前拷贝文件或目录

${CMAKE_CURRENT_BINARY_DIR} 编译工程目录 file(COPY python/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/python/ FILES_MATCHING PATTERN "*.exe") file(COPY python/Lib DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/python/) file(COPY python/Libs DESTINATION $…...

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…...

ES6:什么是Symbol_

引言 在编程领域&#xff0c;我们经常听到关于"Symbol"的术语&#xff0c;但你知道它到底是什么吗&#xff1f;Symbol是一种基本数据类型&#xff0c;它在JavaScript中被引入&#xff0c;用于表示唯一的标识符。本文将介绍Symbol的概念、用途以及如何在代码中使用它…...

E. Li Hua and Array

Problem - E - Codeforces 思路&#xff1a;观察给定的函数&#xff0c;其实就是求与这个数互质的数的个数&#xff0c;即欧拉函数&#xff0c;我们发现一个数迭代欧拉函数不会很多&#xff0c;那么对于第一个操作来说我们可以直接暴力修改&#xff0c;而对于第二个操作来说&am…...

【项目】在线oj

1. 创建项目 创建maven项目。 引入依赖&#xff08;mysql connector和servlet&#xff09;&#xff1a; <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><ar…...

第十章-输入输出系统

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

TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调

前言 上一篇文章 TensorFlow案例学习&#xff1a;对服装图像进行分类 中我们跟随官方文档学习了如何进行预处理数据、构建模型、训练模型等。但是对于像我这样的业余玩家来说训练一个模型是非常困难的。所以为什么我们不站在巨人的肩膀上&#xff0c;使用已经训练好了的成熟模…...

Matlab地理信息绘图—研究区域绘制

文章目录 m_map工具箱Matlab绘制研究区域结果显示 m_map工具箱 m_map是 MATLAB 中用于制作地图和地理数据可视化的工具包。这个工具包提供了一组函数和工具&#xff0c;使得用户能够在 MATLAB 中轻松创建地图&#xff0c;并在地图上显示各种地理和气象数据。以下是 m_map 工具包…...

Spring Cloud AWS 实战教程:构建高可用 SQS 消息队列应用 [特殊字符]

Spring Cloud AWS 实战教程&#xff1a;构建高可用 SQS 消息队列应用 &#x1f680; 【免费下载链接】spring-cloud-aws The New Home for Spring Cloud AWS 项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-aws Spring Cloud AWS 是一个强大的开源框架&…...

告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点

告别命令行&#xff01;用Python脚本批量管理Docker容器&#xff0c;效率提升不止一点点每次在终端敲入docker ps、docker stop、docker rm时&#xff0c;你是否想过——当容器数量超过两位数&#xff0c;这种重复劳动是否在消耗你的生命&#xff1f;去年我们团队在迁移微服务架…...

BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异

一、前言BLE设备交互分为两大角色&#xff1a;广播端&#xff08;外设Peripheral&#xff09;与扫描端&#xff08;中心Central&#xff09;。上一篇博客详解了四大广播模式&#xff0c;本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题&#xff1a;前台能扫后台…...

三步实现跨架构程序兼容:Box64高效架构转换指南

三步实现跨架构程序兼容&#xff1a;Box64高效架构转换指南 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_mirrors/bo/box64 你是否曾在ARM64…...

告别鼠标手!5分钟上手开源鼠标连点器MouseClick,轻松实现自动化点击

告别鼠标手&#xff01;5分钟上手开源鼠标连点器MouseClick&#xff0c;轻松实现自动化点击 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软…...

MySQL GROUP BY 原理与优化

我刚工作的时候&#xff0c;有次统计每个用户的订单总金额&#xff0c;写了 SELECT user_id, SUM(amount) FROM orders GROUP BY user_id&#xff0c;结果执行了 60 秒还没出结果。DBA 帮我一看执行计划&#xff0c;发现没走索引&#xff0c;导致 Using temporary&#xff08;用…...

如何用WaveTools终极优化《鸣潮》游戏性能:从卡顿到丝滑的完整指南

如何用WaveTools终极优化《鸣潮》游戏性能&#xff1a;从卡顿到丝滑的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》却频繁遭遇帧率波动、画面卡顿或操作延迟&#xff0c;那…...

用图神经网络做缺陷定位,准确率比传统方法高出30%

在现代软件工程的复杂迷宫中&#xff0c;缺陷定位始终是测试团队面临的核心挑战。想象这样一个场景&#xff1a;一个电商系统在特定压力条件下偶发订单丢失&#xff0c;日志中只留下泛泛的超时错误&#xff0c;问题可能深藏在上百个微服务的调用链、分布式事务的竞态条件或某个…...

ComfyUI-WD14-Tagger:3分钟实现AI智能图像标签提取,效率提升10倍

ComfyUI-WD14-Tagger&#xff1a;3分钟实现AI智能图像标签提取&#xff0c;效率提升10倍 【免费下载链接】ComfyUI-WD14-Tagger A ComfyUI extension allowing for the interrogation of booru tags from images. 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-WD14-…...

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...