前言:

安装包大小对于产品很重要 ,因为安装包的大小一般从一定程度决定了一个产品带给用户的用户体验,因为一个成功的产品除了有市场价值,同时,站在用户的角度来说,还要有好的用户使用体验,一款软件,不一定功能要如何如何强大,只要能给用户带来方便以及极佳的用户体验,就是一款成功的产品。而作为开发者,我们就需要的就是如何提高用户的使用体验,APP的size就是其中重要的一项指标。

在我们常用的软件中,比如qq,微信,淘宝,天猫,京东,抖音.....等等常用的应运行软件,他们功能都十分强大,用户体验都十分的人性化,但是,他们APP的size确才不到100m,别人是如何做到的了,这是值得我们总结和学习的地方。

APP size过大,对产品带来的影响原因如下:

1、手机APP安装包的大小会影响用户是否愿意花费流量来下载此APP;

2、包体越大下载过程越长,用户取消下载的可能性越大;

3、在手机空间不足,用户需要清理手机空间时,包体越大的软件被清理的可能性越大;

4、一些预装软件,合作厂商会限定软件大小;

5、APP经过多次版本迭代,产生不少冗余代码和无用资源,会带来更高的学习和维护成本,也更容易出错。

知道了,APP size过大,对产品造成影响的原因,下面,我们来分析一下影响APP size的具体原因和实施有效的手段,杜绝size过大问题。

APP size过大的主要原因:

  • Android设备 dpi 的多样化 ([l|m|tv|h|x|xx|xxx]dpi)
  • Android平台的进化,开发工具的改进以及开源类库生态系统的丰富
  • 用户对高质量UI的期待
  • 其他原因

APP size优化有效手段

知道了size过大的原因,就该给我们APP动手术了,在动手术之前,我们随便反编译一款软件,看看打包后APP的内部构造。说简单点,一个apk文件就是包含一些文件的压缩包。作为开发者,我们通过使用 unzip 命令解压这个apk文件一探apk的内部结构。下面的文件结构就是我们使用 test .apk这个命令所获得的:
/lib/armeabi/armeabi-v7a/x86/mips
/META-INFMANIFEST.MFCERT.RSACERT.SF
/res
AndroidManifest.xml
classes.dex
resources.arsc

我们可能对上面大部分的文件和目录都很熟悉。它们和我们在实际开发app的时候所看到得项目结构一样,包含了: /assets, /lib, /res, AndroidManifest.xml. 还有一些文件可能是我们第一次看到。一般说来,classes.dex, 它包含了我们所写的Java代码经过编译后class文件;resources.arsc 包含了预编译之后的资源文件(比如values文件,XML drawables 文件等。)。

由于apk文件只是一个简单地压缩文件,这就意味着它有两种大小:即压缩前的大小和压缩后的大小。减少apk文件大小可以从以下几个方面入手。

  1. 删除冗余代码和资源
  2. 能简单用代码画的图形,不使用图片
  3. 能使用系统API自己实现的,不使用第三方库。第三方库一般会考虑通用的情形,实际上不会用上它的全部功能。
  4. 重构 
    • 抽离类似的代码做成通用的模块,减少复制粘贴出来的代码。
    • 删除过度设计的代码:看似抽象分层做得很好,但实际不会有作用的代码。(例如,只有一个子类的基类)
    • 算法优化,使用更少的代码来实现同一功能。
  5. 启动图:不使用多张图片来匹配不同分辨率,而是在UI设计上居中,用代码来实现
  6. 分包:不常用的功能做成插件包,可后续下载安装
  7. 使用网页代替原生页面来展示数据:把数据通过url传参,由WebView来显示数据
  8. 使用编译后size较小的语言 
    • swift因为把运行时库也继承到包里,所以非常大
    • C,C++,Objective-C的编译结果是逐渐增大的
    • Android上,C++因为有多个CPU架构,虽然性能高,但size比java大
  9. 压缩资源 
    • 图片、视频有损压缩,但不影响清晰度。使用压缩率高的文件格式。
    • 使用9-patch或stretch图片
    • 资源压缩,首次运行再解压出来
    • 在深层次路径的,首次运行再下载
    • minify或uglify json、xml等文本型资源(即去除换行、空白符、简化变量名等)
  10. 用代码实现代替可反序列化布局文件。xib、storyboard、xml等
  11. 编译参数优化(参见java、llvm或gcc等工具链的说明) 
    • size最优化,编译或运行速度次要
    • 对不得不使用的第三方库做精简
    • 去除symbol
    • 去除不需要支持的CPU架构
    • 去除没使用到的代码
    • 去除调试代码,例如log
    • 混淆

12.巧妙的使用混淆

13.插件化或者动态加载第三方库,在需要的时候去远程服务器动态下载,而不是一次性,引入第三方在本地lib库中,然后在打包。

apk、ipa包size优化晋级手段相关推荐

  1. APK 如何做到包体积优化

    关于 APK Size 的优化,网上有很多版本的介绍.但是因为每个项目的背景.实现方式都不尽相同,导致各个项目之间能列出的共性相对较少.所以这里主要分享一下我在项目中对包体积优化的一些尝试.主要分两部 ...

  2. apk升级文件服务器,整包(apk/ipa)升级

    5+应用可使用以下方式进行升级 - 整包升级:适用于大版本更新,runtime发生变化时(模块.配置.版本等变化)必须使用此更新方法 - 应用资源升级:适用于小版本更新 .runtime不变,前端页面 ...

  3. Android包体积优化上篇- 资源混淆优化

    导读:什么时候进行包体积优化?一般在app初创期时,由于业务代码较少,包体积也不大,相应这个时候对包体积的优化收益也较少.当业务逐渐成熟功能,迭代逐渐变多,包体积也会逐渐增加. 增加包体积主要影响如下 ...

  4. 抖音Android包体积优化探索:从Class字节码入手精简DEX体积

    前言 众所周知,应用安装包的体积会十分影响用户的应用下载速度和安装速度.据 GoolgePlay 平台对外发布相关的包大小对转化率影响的数据,我们可以看到随着包大小的增加,安装转化率总体呈下降的趋势. ...

  5. 深入探索 Android 包体积优化(匠心制作-下)

    前言 成为一名优秀的Android开发,需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~. 在 Android 性能优化的知识体系当中,包体积优化一直被排在优先级比较低的位置,从而导 ...

  6. 有道词典Android客户端包体积优化之路

    1 背景 有道词典从移动互联网之初就凭借小巧快速.功能强大的印象让用户爱上翻译查词,爱上学习.随着业务不断地迭代以及功能不断完善,有道词典不再是单纯的查词软件,而是变成了用户的综合学习平台.我们探索过 ...

  7. 【保姆级】包体积优化教程

    市面上有很多优化方案,但是都没有一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试.绩效KPI,还是汇报宣讲,都能让你游刃有余! 前置必读: Android包体积优化(常规.进阶.极致) ...

  8. 超好的包体积优化教程,不仅仅是优化

    作者:yechaoa 市面上有很多优化方案,但是都没有一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试.绩效KPI,还是汇报宣讲,都能让你游刃有余! 前置必读: Android包体积优 ...

  9. iOS包体积优化-图片优化

    文中提到的优化措施,编写了python自动化脚本,适用于iOS项目. 地址:GitHub - dongzhixuanyuan/imagesOptimize: Optimize images to de ...

最新文章

  1. during怎么念_during是什么意思_during的翻译_音标_读音_用法_例句_爱词霸在线词典...
  2. spinner 下拉框控件
  3. 面试:一个 Java 字符串到底有多少个字符?
  4. 2021-10-11 程序人生 -感想随笔
  5. 一篇文章教你学会使用SpringBoot实现文件上传和下载
  6. 修改value_Python | 快速修改或命名N个文件夹名称,你会吗?
  7. 没有系列化导致错误:java.io.NotSerializableException: com.bjpowernode.bean.Team
  8. 计算机系统结构自学试卷,全国2004年4月高等教育自学考试计算机系统结构试题...
  9. 算法总结之 将单链表的每K个节点之间逆序
  10. C#SHA1算法及注意事项
  11. 领域自适应论文(六十八):Implicit Class-Conditioned Domain Alignment for Unsupervised Domain Adaptation论文原理
  12. 【2022考石开正攵★氵台】思维导图
  13. WordPress 安装时出现的问题
  14. 测试打分用什么软件,测名软件哪个比较好
  15. 鹅厂开源框架tars之基础组件
  16. 【python】耗时统计小程序
  17. Matlab中(),[],与{}的用法区别
  18. 浅谈对IT架构师的理解
  19. 跨境电商业务之云号码
  20. Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)...

热门文章

  1. python小应用之整理手机图片
  2. Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制
  3. Microsoft SQL Server 2000整合规划
  4. 小米捐赠5亿启动“小米青年学者”项目 5年支持100所高校
  5. 王健林最好的时代过去了
  6. 微信出拳:狠起来,连自己人都不放过!
  7. Android 11正式发布:小米、OPPO等手机将陆续更新
  8. 支付宝要给全国人民发100亿,7月1日起!
  9. 拼多多回应“二次上市”:公司现金储备充裕 暂无任何计划
  10. 到底图啥?百度工程师非法控制155台服务器“挖矿”,被判刑3年