前言

之前写了一篇《APK瘦身实践》侧重于实践和效果对比,后来受徐川老师点拨,建议改写成一篇更全面的瘦身终极杀招大全,深以为然,思考良久,新开一篇。

指南条例

第1条:使用一套资源

这是最基本的一条规则,但非常重要。
对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录。
相对于多套资源,只使用720P的一套资源,在视觉上差别不大,很多大公司的产品也是如此,但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量了。
注意,这里不是说把不是xhdpi的目录都删除,而是强调保留一套设计资源就够了。

第2条:开启minifyEnabled混淆代码

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

1
2
3
4
5
6
7
android {    buildTypes {        release {            minifyEnabled true
        }
    }
}

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

第3条:开启shrinkResources去除无用资源

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

1
2
3
4
5
6
7
android {    buildTypes {        release {            shrinkResources true
        }
    }
}

第4条:删除无用的语言资源

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

1
2
3
4
5
android {    defaultConfig {        resConfigs "zh"
    }
}

第5条:使用tinypng有损压缩

android打包本身会对png进行无损压缩,所以使用像tinypng这样的有损压缩是有必要的。
重点是Tinypng使用智能有损压缩技术,以尽量少的失真换来图片大小的锐减,效果非常好,强烈推荐。
Tinypng的官方网站:http://tinypng.com/

第6条:使用jpg格式

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

第7条:使用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

第8条:缩小大图

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

第9条:覆盖第三库里的大图

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

第10条:删除armable-v7包下的so

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

第11条:删除x86包下的so

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

第12条:使用微信资源压缩打包工具

微信资源压缩打包工具通过短资源名称,采用7zip对APP进行极致压缩实现减小APP的目标,效果非常的好,强烈推荐。
详情参考:Android资源混淆工具使用说明
原理介绍:安装包立减1M–微信Android资源混淆打包工具
建议开启7zip,注意白名单的配置,否则会导致有些资源找不到,粗略配置如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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.R.drawable.emoji_*" />
        <path value ="com.xxx.yyy.... />
    </issue>

    <issue id ="compress" isactive="true">
        <!--  ...  -->
    </issue>
</resproguard>

第13条:使用provided编译

对于一些库是按照需要动态的加载,可能在某些版本并不需要,但是代码又不方便去除否则会编译不过。
使用provided可以保证代码编译通过,但是实际打包中并不引用此第三方库,实现了控制APP大小的目标。
但是也同时就需要开发者自己判断不引用这个第三方库时就不要执行到相关的代码,避免APP崩溃。

第14条:使用shape背景

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

第15条:使用着色方案

相信你的工程里也有很多selector文件,也有很多相似的图片只是颜色不同,通过着色方案我们能大大减轻这样的工作量,减少这样的文件。
借助于android support库可实现一个全版本兼容的着色方案,参考代码:DrawableLess.java

第16条:在线化素材库

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

第17条:避免重复库

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

第18条:使用更小的库

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

第19条:支持插件化

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

第20条:精简功能业务

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

第21条:重复执行第1到20条

多次执行上述步骤,你总能发现一些蛛丝马迹,这是一个好消息,不是吗?

在线评估

针对很多朋友的反馈,有必要对条例的适用范围、易用性和风险指数做个粗略的评估,汇总如下,方便大家执行。

指南条例 适用范围 易用性 风险指数 备注
使用一套资源 非极高UI要求的APP  
开启minifyEnabled 全部  
开启shrinkResources 全部  
删除无用的语言资源 非全球国际化应用  
使用tinypng有损压缩 非极高UI要求的APP  
使用jpg格式 仅限非透明大图  
使用webp格式 仅限4.0+,4.2+设备  
缩小大图 限允许缩小的大图  
覆盖第三库里的无用大图 全部  
删除armable-v7包下的so 限允许对极少数设备不兼容  
删除x86包下的so 限允许对x86设备不兼容  
使用微信资源压缩打包工具 全部 切记要配置白名单
使使用provided编译 全部 容错处理
使用shape背景 全部  
使用着色方案 全部  
表情在线化 限含表情包的APP  
避免重复库 全部  
使用更小的库 全部  
支持插件化 限扩展性要求高的APP  
精简功能业务 限允许精简的APP

小结

相信经过上述步骤,一定可以把你的Android APP极大的瘦身下去。
考虑到一定的风险性,建议挑选适合自己的方法就行;同时,我也会跟踪最新的瘦身技巧,及时补充更新。

原文地址: http://jayfeng.com/2016/03/01/Android-APP%E7%BB%88%E6%9E%81%E7%98%A6%E8%BA%AB%E6%8C%87%E5%8D%97/#more

Android APP终极瘦身指南相关推荐

  1. 我的Android进阶之旅------gt;Android APP终极瘦身指南

    首先声明,下面文字转载于: APK瘦身实践 http://www.jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/ APP ...

  2. Android App包瘦身优化

    Android App包瘦身优化 APK瘦身是对程序体验的优化,更大的APK需要占用更多的存储空间. APK的构成 APK瘦身前通过Analyze app分析出来的图片(打开方式:Android St ...

  3. Android App包瘦身优化实践

    随着业务的快速迭代增长,美团App里不断引入新的业务逻辑代码.图片资源和第三方SDK,直接导致APK体积不断增长.包体积增长带来的问题越来越多,如CDN流量费用增加.用户安装成功率降低,甚至可能会影响 ...

  4. Android Apk瘦身指南大全

    Android Apk瘦身指南大全 前言 为什么Android应用Apk要瘦身?虽然安装包大小对应用使用没有影响,但应用的安装包越大,用户下载的门槛越高,安装等待时间也会越长,特别是在移动网络情况下, ...

  5. WINXP终极瘦身、优化、封装全攻略 万能WinXP Ghost镜像制作指南

    WINXP终极瘦身.优化.封装全攻略 万能WinXP Ghost镜像制作指南 重装系统可不是一件好玩的事情:首先得端坐在电脑桌前老老实实地回答windows安装程序提出的问题,安装好了呢,也不能闲着, ...

  6. iOS开发:Archive、ipa 和 App 包瘦身

    作者 | 钱凯 杏仁移动开发工程师,前嵌入式工程师,关注大前端技术新潮流. iOS 开发的最后一步就是进行 App 的打包和分发,这里分为两个步骤: Archive:对Target进行编译.归档,生成 ...

  7. xp系统终极瘦身大全

    原文链接:http://www.xitongzhijia.net/xtjc/20121017/17507.html Windows xp系统的很多服务都是双刃剑,用不好就会带来诸多安全隐患.为此,要好 ...

  8. win10防火墙删除的文件在哪里_Win10系统瘦身指南:删除C盘这些文件,让你的电脑秒变新机!...

    前言 目前市面上存在较多山寨的电脑店,为了大家的电脑安全,请一定前往电脑店官方地址进行下载,官方地址为 u.diannaodian.com 当你打开计算机,一道红光突然从你眼前闪过,这时你才恍惚想起: ...

  9. unity3d android包太大了,unity/unity3d编译成android apk包瘦身方法

     unity/unity3d编译成android apk包瘦身方法 本文系原创,请转发的朋友带上我的链接. 相信用unity开发的同学都会遇到类似的经历:明明资源图片不大,但是发现打包后apk文件 ...

最新文章

  1. 2.aop中几个注解的含义
  2. java字符排序规则_java 重写排序规则,用于代码层级排序
  3. 腾讯云大数据产品中心总经理刘煜宏:企业全域数据体系建设(附完整PPT)
  4. 多域资源整合之基础准备--DNS配置
  5. dedeCMS如何进行关键词过滤替换和屏蔽非法词汇?
  6. select简易的二级联动
  7. 复变函数、运筹学与概率论知识总结
  8. 数据挖掘导论课后习题答案-第三章
  9. CentOS7安装OpenProj
  10. er图转关系模式规则_ER模型到关系模型的转换规则
  11. 学计算机要有什么基础,学计算机需要什么基础
  12. word长公式不换行显示的方法
  13. Kubernetes 集群部署 NFS-Subdir-External-Provisioner 存储插件
  14. Windows Terminal 配置GIT
  15. python学习之-- 协程
  16. volatile能保证原子性吗?
  17. GOM登录器和配置器研究
  18. 钟表时钟时间管理PPT模板
  19. 微信小程序实现一键长图并保存图片到相册
  20. php招生广告语,招生广告语大全

热门文章

  1. SEO是企业发展的永恒主题
  2. 微软VS2008月底推出beta 2中文版 搭配.NET 3.5
  3. Ubuntu10.04各文件夹的作用
  4. latex强调/重音符号
  5. 计算机研究生怎样提高英语水平,英语对计算机专业的重要性及如何提高英语水平...
  6. VS2013运行报错error C4996: 'scanf': This function or variable may be unsafe.
  7. [云炬创业基础笔记]第二章创业者测试13
  8. 科大星云诗社动态20210222
  9. 云炬随笔20211016(2)
  10. 二十一、“一枝一叶一花语,一生一世一英名。”(2021.5.29)