Android 性能优化(七):APK安装包体积优化

包体积优化重要性

移动 App 特别关注投放转化率指标,而 App 包体积是影响用户新增的重要因素,而 App 的包体积又是影响投放转化率的重要因素。

Google 2016 年公布的研究报告显示,包体积每上升 6MB 就会带来下载转化率降低 1%, 当包体积增大到 100MB 时就会有断崖式的下跌 。对于应用商店,普遍有一个流量自动下载的最大阈值,如 应用宝,下载的app超过100M,用流量下载时,会弹窗提示用户是否继续下载,这对下载转化率影响是比较大的。某淘对新业务超过 1M 要总裁审批,一般在平台组都卡掉了。

  • 下载转化率:包体积越小,下载转化率越高;
  • 性能影响:安装时间长、占用内存大;

Android Apk结构

lib(主要是so文件)

  • 主要集中在三方SDK

依赖SDK不规范:高德地图3D->2D;图片加载库Glide、Fresco重复。

已不用的SDK及时下线:阿里短视频SDK下线获得2M优化空间; 

SDK及时升级:有些SDK会有优化so体积的版本升级,如阿里播放器升级,带来1M收益 ;

  • flutter的dart代码

原生能够提供的功能,不用三方库;

已废弃的项目及时移除项目;

dart代码混淆; 


asserts:

  • flutter资源

存在2X和3X图,仅保留一套即可 ;

图片压缩,在引入图片前进行压缩,或转换webp或SVG格式;

  • weex离线包

仅保留核心weex的场景的离线包;

  • 表情图片、Json动画

上传到服务器上动态请求下发;


res:

  • drawable

规范资源图片的位置,仅保留一套图;

对png图片转成webp,webp也可再用tinypng压缩,如果UI不通过,让UI提供压缩图片 ;

使用代码实现View的背景设置;

大图、gif放上传服务器;

  • layout

精简删除废弃的layout资源,目前有2327个layout文件;

  • 基础数据Json文件

仅保留核心基础数据,其他可做动态下发;

  • 废弃资源

定期使用Analyze检查并删除各自模块无用资源;


Dex:

三方库、工具库统一,引入新的三方库前,先确认项目中是否存在功能相同库;

无用或下线的功能及时删除;

可以被混淆的代码不要Keep掉,遵照《Android混淆开发规范》;

灰度功能关闭后及时删除相应逻辑及代码;


So 压缩

so压缩是减少so文件的单个体积。

gradle打包时会对工程中的so库进行压缩,最终生成apk包的体积会减小。

android:extractNativeLibs="true"

缺点:在apk安装时,系统会再次对压缩后的so文件解压,从而造成安装apk的时间变长。

minSdkVersion >= 23 默认 android:extractNativeLibs= false。

大so动态下发

针对有些so文件压缩后,体积仍然很大,比如占比超过10%的情况,可以选择动态下发。

主要有下面四个步骤:

  1. 下载so库
  2. 解压so库
  3. 校验so库
  4. 加载so库

另外,当动态下发的so没有下载、解压、校验、加载完成之前,如果用户进入到了相关的业务场景,需要做好对应的兜底机制。比如在某场景中,使用了 opencv 库来做图片的二维码识别,当so没下载下来时,要识别二维码就会被兜底到 zxing。


优化的成绩

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

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

相关文章

直方图与核密度估计

技术背景 直方图是一种经常被用于统计的图形表达形式,简单来说它的功能就是用一系列的样本数据,去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation,KDE)方法的主要差别在于,直方图得到的是一个离散化的统计分…

【全开源】多功能完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城 干干净净 没有一丝多余收据 还没过手其他站 还没乱七八走的广告和后门 后台可以自由拖曳修改前端UI页面 …

Aigtek功率放大器的使用方法有哪些

功率放大器是一种将小信号放大为大信号的电子设备,广泛应用于无线通信、音频系统、雷达等领域。在使用功率放大器时,需要注意以下几个方面: 电源供应:功率放大器需要提供稳定的电源供应以保证正常工作。通常情况下,功率…

正式发布的Spring AI,能让Java喝上AI赛道的汤吗

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 最近几年AI发展实在太快了,仿佛只要半年没关注,一个新的大模型所产生的效果就能超越你的想象。Java在AI这条路上一直没什么好的发展,不过Spring最近出来了一个新的模块叫做S…

[Linux][进程间通信][一][匿名管道][命名管道]详细解读

目录 0.进程间通信?1.进程间通信目的2.进程间通信分类3.进程间通信的本质理解 1.什么是管道?2.匿名管道1.认识函数2.如何让不同的进程,看到同一份资源?3.用fork来共享管道原理4.站在文件描述符角度 -- 深刻理解管道5.站在内核角度…

目标检测——食品饮料数据集

一、重要性及意义 对食品和饮料进行目标检测的重要性和意义体现在多个方面: 商业应用与市场分析:目标检测技术在食品和饮料行业有着广泛的应用前景。通过对超市货架、餐馆菜单或广告海报中的食品和饮料进行自动识别和计数,商家可以获取关于产…

【微服务】spring状态机模式使用详解

一、前言 在很多系统中,通常会涉及到某个业务需要进行各种状态的切换操作,例如在审批流程场景下,某个审批的向下流转需要依赖于上一个状态的结束,再比如电商购物场景中,一个订单的生命周期往往伴随着不同的状态,比如待支付,支付完成,已发货等等,状态的存在,让一个业…

登录解析(后端)

调试登录接口 进入实现类可以有 验证码校验 登录前置校验 用户验证 验证码校验 通过uuid获取redis 中存储的验证码信息,获取后对用户填写的验证码数据进行校验比对 用户验证 1.进入控制器的 /login 方法 2.进入security账号鉴权功能,经过jar内的流…

HTML:Form表单控件主要标签及属性。name属性,value属性,id属性详解。表单内容的传递流程,get和post数据传递样式。表单数据传递实例

form表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

c语言中什么是冒泡排序,冒泡排序的计算

在c语言中&#xff0c;冒泡排序的解释是&#xff0c;将被排序的记录数组arr[1..n]垂直排列&#xff0c;每个记录arr看作是重量为一个arr气泡。根据轻气泡不能在重气泡之下的原则&#xff0c;从下往上扫描数组arr&#xff0c;凡扫描到违反该原则的轻气泡&#xff0c;就使其向上飘…

算法练习第19天|222.完全二叉树的节点个数

222.完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/count-complete-tree-nodes/description/ 题目描述&#xff1a; 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。题目数据保…

振动信号幅值成分分析手段

提示&#xff1a;振动信号幅值成分分析手段 文章目录 一、特征值分析二、概率密度分析2.1、原理2.2、代码2.3、结果分析 三、总结&#xff08;自己的思想&#xff09; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、特征值分析 均值和平均幅值可以…

【缓存常见问题】

在使用缓存时特别是在高并发场景下会遇到很多问题&#xff0c;常用的问题有缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题。 1、缓存穿透 首先&#xff0c;什么是缓存穿透呢&#xff1f; 缓存穿透是指请求一个不存在的数据&#xff0c;缓存层和数据库层都没有这个数据&…

虚拟天空解决方案,创造出令人惊叹的换天效果

在汽车视频领域&#xff0c;如何打破传统拍摄限制&#xff0c;呈现出更具创意和想象力的画面&#xff0c;成为众多企业和创作者追求的目标。美摄科技作为业界领先的视频技术提供商&#xff0c;凭借其强大的AI技术和三维渲染引擎&#xff0c;推出了全新的虚拟天空解决方案&#…

集成电路测试学习

集成电路&#xff08;Integrated Circuit&#xff0c;IC&#xff09;整个设计流程包括&#xff1a;电路设计、晶圆制造、晶圆测试、IC封装、封装后测试。 IC测试目的&#xff1a;一、确认芯片是否满足产品手册上定义的规范&#xff1b;二、通过测试测量&#xff0c;确认芯片可以…

李国武:QFD是如何将顾客需求转换为产品技术要求的?

如何将顾客的多样化需求精准地转化为产品的技术要求&#xff0c;成为企业赢得市场、提升竞争力的关键。质量功能展开&#xff08;Quality Function Deployment&#xff0c;简称QFD&#xff09;作为一种先进的质量管理工具&#xff0c;正是实现这一转换的有效桥梁。具体如天行健…

vim相关指令

vim的各种模式及其转换关系图 vim 默认处于命令模式&#xff01;&#xff01;&#xff01; 模式之间转换的指令 除【命令模式】之外&#xff0c;其它模式要切换到【命令模式】&#xff0c;只需要无脑 ESC 即可&#xff01;&#xff01;&#xff01; [ 命令模式 ] 切换至 [ 插…

unity动画的关键帧添加event-同步语音

在iclone中做的语音嘴型动画&#xff0c;因是用下图自带的方式语音生成的动画&#xff0c;而不是用plugin(面捕live会连同语音一起导出)&#xff0c;所以导出来到Unity中&#xff0c;之后口型、动作、表情等没有声音。 我需要把原有的语音也重新在unity中加载上&#xff0c;原来…

解决WPS右键菜单冗余选项,去除WPS右键菜单选项

问题描述 安装WPS后&#xff0c;右键菜单会多出许多无用的选项&#xff0c;如何去除&#xff1f; 解决方法 按下WindowsS打开搜索栏&#xff0c;搜索配置工具打开 勾选所有的关闭和隐藏选项

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展&#xff0c;车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频&#xff0c;如何高效地剪辑、整理并分享这些精彩瞬间&#xff0c;一直是车主和汽车内容创作者们所面临的难题。美摄科技&#xff0c;作为领先的视频智…