上次在面试中被问到这个问题,只答了个使用webp格式图片,感觉有点尴尬,特地总结下有哪些减小app大小的办法

  • 使用一套资源

    这是最基本的一条规则,但非常重要。

    对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录。

    相对于多套资源,只使用720P的一套资源,在视觉上差别不大,很多大公司的产品也是如此,但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量了。

    注意,这里不是说把不是xhdpi的目录都删除,而是强调保留一套设计资源就够了。

  • 开启minifyEnabled混淆代码

    在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小:

    android { buildTypes { release { minifyEnabled true } }}

    在proguard中,是否保留符号表对APP的大小是有显著的影响的,可酌情不保留,但是建议尽量保留用于调试。详细proguard的相关的配置和原理可自行查阅。

  • 开启shrinkResources去除无用资源

    在gradle使用shrinkResources去除无用资源,效果非常好。

    android { buildTypes { release { shrinkResources true } }}

  • 删除无用的语言资源

    大部分应用其实并不需要支持几十种语言的国际化支持。还好强大的gradle支持语言的配置,比如国内应用只支持中文:

  • 使用tinypng有损压缩

    android打包本身会对png进行无损压缩,所以使用像tinypng这样的有损压缩是有必要的。

    重点是Tinypng使用智能有损压缩技术,以尽量少的失真换来图片大小的锐减,效果非常好,强烈推荐。

    Tinypng的官方网站: http://tinypng.com/

  • 使用jpg格式

    如果对于非透明的大图,jpg将会比png的大小有显著的优势,虽然不是绝对的,但是通常会减小到一半都不止。在启动页,活动页等之类的大图展示区采用jpg将是非常明智的选择。

  • 使用webp格式

    webp支持透明度,压缩比比jpg更高但显示效果却不输于jpg,官方评测quality参数等于75均衡最佳。

    相对于jpg、png,webp作为一种新的图片格式,限于android的支持情况暂时还没用在手机端广泛应用起来。从Android 4.0+开始原生支持,但是不支持包含透明度,直到Android 4.2.1+才支持显示含透明度的webp,使用的时候要特别注意。

    官方介绍: https://developers.google.com/speed/webp/docs/precompiled

  • 缩小大图

    如果经过上述步骤之后,你的工程里面还有一些大图,考虑是否有必要维持这样的大尺寸,是否能适当的缩小。事实上,由于设计师出图的原因,我们拿到的很多图片完全可以适当的缩小而对视觉影响是极小的。

  • 覆盖第三库里的大图

    有些第三库里引用了一些大图但是实际上并不会被我们用到,就可以考虑用1x1的透明图片覆盖。你可能会有点不舒服,因为你的drawable下竟然包含了一些莫名其妙的名称的1x1图片…

  • 删除armable-v7包下的so

    基本上armable的so也是兼容armable-v7的,armable-v7a的库会对图形渲染方面有很大的改进,如果没有这方面的要求,可以精简。这里不排除有极少数设备会Crash,可能和不同的so有一定的关系,请大家务必测试周全后再发布。

  • 删除x86包下的so

    与第十条不同的是,x86包下的so在x86型号的手机是需要的,如果产品没用这方面的要求也可以精简。建议实际工作的配置是只保留armable、armable-x86下的so文件,算是一个折中的方案。

  • 使用微信资源压缩打包工具

    微信资源压缩打包工具通过短资源名称,采用7zip对APP进行极致压缩实现减小APP的目标,效果非常的好,强烈推荐。

    详情参考: Android资源混淆工具使用说明

    原理介绍: 安装包立减1M–微信Android资源混淆打包工具

    建议开启7zip,注意白名单的配置,否则会导致有些资源找不到,粗略配置如下,

    <?xml version="1.0" encoding="UTF-8"?>
    <resproguard>
    <!--defaut property to set -->
    <issue id="property" > <seventzip value= "true" /> <!-- ... -->
    </issue>
    <issue id="whitelist" isactive="true"> <path value ="com.xxx.yyy...."/>
    </issue>
    <issue id ="compress" isactive="true">
    </issue>
    </resproguard> 
  • 使用provided编译

    对于一些库是按照需要动态的加载,可能在某些版本并不需要,但是代码又不方便去除否则会编译不过。

    使用provided可以保证代码编译通过,但是实际打包中并不引用此第三方库,实现了控制APP大小的目标。

    但是也同时就需要开发者自己判断不引用这个第三方库时就不要执行到相关的代码,避免APP崩溃。

  • 使用shape背景

    特别是在扁平化盛行的当下,很多纯色的渐变的圆角的图片都可以用shape实现,代码灵活可控,省去了大量的背景图片。

  • 使用着色方案

    相信你的工程里也有很多selector文件,也有很多相似的图片只是颜色不同,通过着色方案我们能大大减轻这样的工作量,减少这样的文件。

    借助于android support库可实现一个全版本兼容的着色方案,参考代码: DrawableLess.java

  • 在线化素材库

    如果你的APP支持素材库(比如聊天表情库)的话,考虑在线加载模式,因为往往素材库都有不小的体积。这一步需要开发者实现在线加载,一方面增加代码的复杂度,一方面提高了APP的流量消耗,建议酌情选择。

  • 避免重复库

    避免重复库看上去是理所当然的,但是秘密总是藏的很深,一定要当心你引用的第三方库又引用了哪个第三方库,这就很容易出现功能重复的库了,比如使用了两个图片加载库:Glide和Picasso。通过查看exploded-aar目录和External Libraries或者反编译生成的APK,尽量避免重复库的大小,减小APP大小。

  • 使用更小的库

    同样功能的库在大小上是不同的,甚至会悬殊很大。如果并无对某个库特别需求而又对APP大小有严格要求的话,比较这些相同功能第三方库的大小,选择更小的库会减小APP大小。

  • 支持插件化

    过去的一年,插件化技术雨后春笋一样的都冒了出来,这些技术支持动态的加载代码和动态的加载资源,把APP的一部分分离出来了,对于业务庞大的项目来说非常有用,极大的分解了APP大小。因为插件化技术需要一定的技术保障和服务端系统支持,有一定的风险,如无必要(比如一些小型项目,也没什么扩展业务)就不需要了,建议酌情选择。

  • 精简功能业务

    这条完全取决于业务需求。从统计数据分析砍掉一些没用的功能是完全有可能的,甚至干脆去掉一些花哨的功能出个轻聊版、极速版也不是不可以的。

Android app瘦身计划相关推荐

  1. Android App 瘦身总结 第三章 代码混淆及优化

    目录 一.代码混淆proguard 二.调整第三方库 三.环境差异依赖 四.代码习惯 五.插件化 六.总结 在前两章我们分别从图片资源和jni动态库这两个方面来分析apk瘦身的优化点 Android ...

  2. Android App 瘦身总结 第二章 jni动态库及cpu兼容

    目录 一.利弊分析,按需引用 二.平台兼容 三.动态加载 四.总结 在前一章主要分析了图片资源部分的优化(Android App 瘦身总结 第一章 图片资源的优化处理_There is a Bug!! ...

  3. Android App 瘦身总结 第一章 图片资源的优化处理

    目录 一.去除无用的资源 二.忽略占比极少的分辨率 三.优化图片 四.使用更先进的图片格式 (1)使用矢量图 (2)使用webp图片格式 五.总结 当一款App经历了大量的迭代后,apk包会越来越臃肿 ...

  4. Android App 瘦身总结

    随着移动端产品功能的逐渐增加,APP 的体积也不可避免地呈现上升趋势,如果不加以重视,几个版本迭代下来,可能你的 APP 体积会达到用户不能忍受的程度. 如果你是 SDK 开发者,你的 SDK 包大小 ...

  5. Android - App瘦身

    为什么要瘦身 安装包变大,导致很多用户不愿意安装更新 安装包变大,导致很多用户不愿意下载 安装包变大,流量使用增多,增加其他边际成本 优化方式 图片资源的优化 图片选择顺序 首先选选择SVG 否则选择 ...

  6. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

  7. Android中app瘦身方式

    App瘦身的概念 App瘦身是指在不减少App功能的前提下,通过一些技巧将打包出来的apk体的体积尽可能减少.  这样做的好处有几个:加快用户下载速度,节省用户下载流量,提升用户下载体验.  如果不进 ...

  8. android APK瘦身全面总结——如何从32.6M到13.6M

    前言 之前我简单介绍了关于svg图片瘦身的问题,在公司,瘦身这个问题是我提出来的,所以这锅我背了.公司项目是32.6M,我给自己的要求就是低于20M.上周花了一个星期瘦身,至于为什么花了一周,主要是s ...

  9. App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)

    本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. 本文的示例代码主要是基于作者的经验来编写的,若你有其他 ...

最新文章

  1. 电子科技大学沙河计算机就业,电子科技大学沙河的几个软件工程有什么区别?...
  2. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV
  3. 基于Node的Koa2项目从创建到打包到云服务器指南
  4. 【ThinkingInC++】66、pointer Stash的使用
  5. raspberry pi_尝试8个有趣的Raspberry Pi项目
  6. 基于quartz的云调度中心实现
  7. T400换风扇解决开机fan error问题
  8. rdlc打印时多出空白页面(reportviewer).导出多出空白页(pdf,word)
  9. 数据库小型教务系统,成绩管理系统
  10. 原来这才是睿至大数据的业务拼图
  11. 不平衡数据处理之SMOTE、Borderline SMOTE和ADASYN详解及Python使用
  12. USB 驱动程序(转贴)
  13. Dell Inspiron 5520 笔记本盲刷BIOS
  14. Java web speach api_HTML5 Web Speech API,让网站更有趣
  15. 《余世维 - 有效沟通》讲义zz
  16. FC6下的ftp服务和telnet服务安装
  17. Wireshark(鲨鱼鳍)抓包工具
  18. java开发网易电话面试 一面总结
  19. 基于vue的仿饿了么webapp
  20. 临汾空气质量排名垫底是因不努力?生态环境部回应

热门文章

  1. 企业应用开发考试笔记——重点
  2. 南京师范大学计算机二级c语言,学风于心,建设于行|C语言计算机二级帮扶顺利开展...
  3. PreScan快速入门到精通第五讲用户GUI界面
  4. vue antvG6 多功能tree图 树图树结构
  5. php的strip_tags,htmlspecialchars,htmlentities,stripslashes,addslashes解释
  6. Anti防御成为游戏安全防护界最后一根稻草
  7. 强化学习(一)Deep Q-Network
  8. iOS版应用支持IPV6,就那点事儿
  9. 保障4-0321任务打卡
  10. Unity插件:Unity使用spine动画