【小木箱成长营】包体积优化系列文章:

包体积优化 · 实战论 · 怎么做包体积优化? 做好能晋升吗? 能涨多少钱?

包体积优化 · 方法论 · 揭开包体积优化神秘面纱

一、引言

Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享包体积优化·工具论·初识包体积优化。小木箱从两个维度将 Android 包体积优化工具论解释清楚,本文主要说了四个部分内容,第一部分内容是业务问题和挑战。第二部分内容是包体优化基础知识。第三部分内容是代码优化。最后部分内容是总结与展望。

代码优化分为四部分内容,第一部分内容是代码优化的思路,第二部分内容是 7 款 apk 黑盒逆向工具,第三部分内容是 7 款代码分析工具,第四部分内容是代码优化注意事项。

如果学完小木箱包体积优化的工具论、方法论和实战论,那么任何人做包体优化都可以拿到结果。


二、业务问题与挑战

2.1 为什么要做包体优化

首先我们聊聊第一部分内容包体优化面临的业务问题与挑战,三个原因解释为什么要做包体优化。


2.1.1 下载转化率

第一个原因:下载转化率。海外市场上,根据 Google Play Store 包体积和转化率分析报告显示,平均每增加 1M,转化率下降 0.17%,转化率随着 Apk 变大而降低。

国内市场上,华为应用市场流量保护是 40M。如果我们的 App 体积超过 40M,那么在下载时候便有流量安装提醒。用户的下载请求被华为应用市场拦截,用户对 App 的安装多了一层筛选,用户安装成功率会降低。

2.1.2 渠道商要求

第二个原因:许多门户 app 一般会有一个 Lite 版,为什么要求做两款功能类似的应用呢?有两个原因。

第一, Lite 版可以提升 app 的下载转化率。

第二, 所有 app 做到一定体量,只要和华为、OPPO、三星、小米等手机厂商进行商务合作,App 体积越大,CDN 流量费用就越高,渠道拓展就越受限制。 因此,用户下载 Lite 版可以降低集团成本。


2.1.3 app 性能影响

第三个原因:体积过大对性能负面影响。其中主要表现在三个方面,安装时间和签名校验时间、运行时内存和 ROM 空间。


2.1.3.1 安装时间和签名校验时间

第一,安装时间和签名校验时间方面,相同机型和网络环境下,如果包体越大,用户安装时间越久,签名校验的时间越久。

在编译 ODex 期间,Android 5.0 、 6.0 系统,随着包体增大,耗费时间越久。Android 7.0 以后因为混合编译,安装时长方差不如 Android5.0、6.0 系统大。


2.1.3.2 运行时内存

第二,运行时内存方面,apk 的 Resource 资源、Library 以及 Dex 类加载会占用应用一部分内存。如果 apk 体积越大,运行时内存占用越大,那么性能越差。


2.1.3.3 ROM 空间

第三, ROM 空间方面,如果应用的安装包大小为 50MB,那么启动解压之后一定会超过 50MB。


如果闪存空间不足,很可能出现“写入放大”的情况,它是闪存和固态硬盘(SSD)中一种不良的现象。


闪存在可重新写入数据前必须先擦除,而擦除操作的粒度与写入操作相比低得多,执行操作就会多次移动(或改写)用户数据和元数据。

因此,要改写数据,就需要读取闪存某些已使用的部分,更新它们,并写入到新的位置,如果新位置在之前已被使用过,还需连同先擦除;

由于闪存工作方式,必须擦除改写的闪存部分比新数据实际需要的大得多。即最终可能导致实际写入的物理资料量是写入资料量的多倍。


2.2 包体优化性能指标

因此,基于下载转换率、渠道商要求和体积过大对 app 性能等诸多业务背景,我们希望能通过包体优化,达到降低流量成本,避免由于包体过大导致用户流失的目的。包体优化性能指标也就是我们上文说到的打包后安装包大小和安装包安装速度。

三、 包体优化基础

3.1 Apk 结构

紧接着来到我们的第二部分内容,代码优化,了解代码优化之前,首先,我们先了解下 apk 文件中都包含了什么。解压 apk 包,我们能看到 apk 整体目录结构如下:


Apk 的构成主要分为五个部分。

第一部分是 Dex,主要是 class data 源码文件。

第二部分是 Resource 文件,主要是图片、xml、string 等资源文件。

第三部分是 Assets 文件,主要存放一些类似签名摘要、音频、html 默认文件等。

最后一部分是 Native Library 文件,主要是 C++编写的 so,其中 lib 下存放不同架构的 so 库。


影响包体积主要有 lib、assets 和 META-INF 文件夹里的文件以及*.Dex 、 resources.arsc 文件。


上述五个影响包体积的目录和文件具体内容可以参考下面表格

包体积优化·工具论·初识包体积优化相关推荐

  1. MySQL系列之优化——1.优化哲学、2. 优化工具的使用、3. 优化思路分解、4. MySQL参数优化测试、5.1 参数优化、6. 参数优化结果、7. 锁的监控及处理、8. 主从优化

    文章目录 1.优化哲学 1.1 为什么优化? 1.2 优化风险 1.3 谁参与优化 1.4 优化方向 1.5 优化的范围及思路 优化效果和成本的评估: 2. 优化工具的使用 2.1 系统层面的 2.1 ...

  2. android 多图片优化工具,总结Android App内存优化之图片优化

    前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮.背景.动画变换基本上全是图片,在 ...

  3. android布局优化 工具,详解Android布局优化

    怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...

  4. 【ROM制作工具】如何三分钟学会制作手机线刷包?一键制作线刷包详细教程

    如何在最短的时间内制作一款手机线刷包让卡顿的手机线刷回官方?线刷回官方的手机刷机包在制作时有什么样的技巧?接下来将和大家分享一下如何在三分钟制作一款手机线刷包! 一键制作线刷包详细教程 准备工作: 首 ...

  5. 内存优化 · 基础论 · 初识 Android 内存优化

    [小木箱成长营]内存优化系列文章: 内存优化 · 工具论 · 常见的 Android 内存优化工具和框架 内存优化 · 方法论 · 揭开内存优化神秘面纱 内存优化 · 实战论 · 内存优化实践与应用 ...

  6. Windows内存管理机密+揭穿内存优化工具的骗局

    原文:The Memory-Optimization Hoax:RAM optimizers make false promises 作者:Mark Russinovich 译者:盆盆   我们在浏览 ...

  7. 谷歌测试工具_使用Google网站优化工具进行A / B测试的指南

    为了在您的网站上产生更多的转化,您必须查看流量统计信息 . Google Analytics(分析)是一项出色的服务,但只能走这么远. A / B测试背后的概念是合理的,并且已经在专业的Interne ...

  8. seo优化工具-免费SEO优化工具-站长SEO优化软件

    seo优化工具,什么是SEO优化工具?SEO优化工具有什么用?首先SEO优化工具能帮助我们网站实现收录和排名,SEO优化工具分很多种,但是很难有一种覆盖了全网SEO的功能,今天给大家分享一款覆盖全网S ...

  9. linux如何美化桌面图标,桌面应用|使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法...

    你可以通过多种方法来调整 Ubuntu,以自定义其外观和行为.我发现最简单的方法是使用 GNOME 优化工具.它也被称为 GNOME Tweak 或简单地称为 Tweak(优化). 在过去的教程中,我 ...

最新文章

  1. jquery技巧总结 学习
  2. 5选项卡(封装插件版)加事件委托版选项卡
  3. python学习格式化输出(一)
  4. 汇编题目:编写包含多个功能子程序的中断例程
  5. httpserver
  6. windows安装各版本python解释器和anaconda
  7. 大数据之-Hadoop3.x_Hadoop_HDFS_掉线时限参数设置---大数据之hadoop3.x工作笔记0079
  8. PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项
  9. C# 实现打开和关闭可执行文件
  10. Atitit gis之道 attilax著
  11. OpenGL--纹理贴图基础
  12. 算法设计与分析 —— 排列问题
  13. 桥连模式,模板模式的改进
  14. OpenCV入门系列 —— medianBlur中值滤波
  15. MacOS High Sierra(10.13.6)上安装xcode10.2.1
  16. 如何将谷歌卫星地图转成80坐标并测量面积
  17. MATLAB基础图像处理算法
  18. 互联网周刊:Web 3.0还有多远
  19. echarts柱形图x轴y轴互换_Echarts如何只改变X轴和Y轴的图表区域的背景颜色
  20. 中国房价为什么会居高不下?

热门文章

  1. WIFI码挪车码创建生成CPS聚合流量主小程序开发
  2. 9-15作业-宋俊杰
  3. Java/Android 设计模式系列(7)--装饰者模式
  4. 专业的直播平台搭建需要了解的知识
  5. “微信加油” 落户北京
  6. Android稳定性测试资源汇总
  7. ng-alain支持ie浏览器
  8. DbtPy API接口描述及示例
  9. 前端面试亲不带这么忽悠的?
  10. Seaborn 基本使用