1.App瘦身经验总结

为什么apk越来越大?

1.项目不断发展,功能越多,代码量增加的同时,资源文件也在不断的增多
2.app支持的主流dpi越来越多,如ldpi、mdpi、hdpi、xh xxh xxxh等等,间接导致资源增多
3.引入的第三方sdk或开源库越来越多,增加了很多重复的资源或方法以及无效代码
4.用于体验要求高,图片资源为保证清晰度会使用分辨率更高的图片

apk瘦身的切入点

解压一个没有加固过的apk文件我们会看到下边的内容,相信你对这些文件或目录的含义都已经清楚,接下来我们将会从三个方面进行apk的瘦身操作:
1.Java代码,对应classes.dex文件,我们要剔除无效代码,减小dex文件大小
2.资源文件,对应res文件夹,assets目录
3.减小lib中引入的so大小


解压后的apk.png

开始瘦身

接下来我们将分别针对上边的三个切入点进行apk瘦身

1.减小Java代码的体积

有人认为这个方面的处理很鸡肋,因为每一行代码都对应相应的功能,这里能有多大的精简空间,其实并非完全如此,随着项目的不断推进,编码过程中会产生很多的冗余代码,比如该删掉的没有删掉,过多的重复性功能的工具类,无效的引用等,这还是其次,比较大的一个问题是,随着你引入的开源库不断增多,无效代码的出现几乎是必然事件,过多的重复方法还会导致64k方法数的问题。接下来进入正题。

1.开启minifyEnable

它的作用不仅仅是混淆代码,还有压缩优化的功能,他会遍历所有代码并找出没有引用到的代码,这些代码不会生成在apk中;另外混淆的效果是使用简短的字母替代原来的类名属性名等,一定程度上也可以减小代码体积

2.定期review重构代码

对代码的不断优化是提升个人能力的有效手段,同时优化的结果也会间接的对apk进行精简

3.慎重选择你使用的开源库

很多开源库针对不同平台提供了精简版,目的就是移除在本平台上不需要的代码,例如fastJson,我们选择精简版就可以使开源代码缩小一倍左右,另外针对没有精简版的开源库,需要根据场景考虑是否使用源码依赖,手动移除不必要的文件资源。

2.资源文件瘦身

1.优先采用WebP图片

资源文件是apk中体积占用较大的一部分,尤其是图片资源,所以我们首要以图片的瘦身为主。首先要对图片编码格式有简单了解。Android平台支持的格式有:JPEG,PNG,GIF,BNP,WebP(4.0开始支持WebP),但是Android应用开发中,Bitmap所支持的只有三种JPEG,PNG,WebP,从Bitmap类的CompressFormat枚举可以看出(详见源码)。

JPEG:有损压缩,不支持透明通道和多帧动画(RGB)
PNG:无损压缩,支持透明通道(ARGB),PNG大小大于JPEG
WebP:支持有损和无损压缩,支持透明通道和多帧动画,4.0以上是开发首选,Google官方测试,WebP比PNG能减少45%大小,即便PNG经过压缩,也能相比PNG减小28%

2.PNG格式图片尽量使用NinePatch格式

.9图具有体积小,拉伸不变形的特点,并且Android studio可以一键转换,使用起来相当方便。

3.Lint查找无效资源

Lint可以检查res目录下的无效资源(无法检查assets),然后将其删除,但是有一点要注意,如果资源文件是通过反射机制调用的,Lint是无法知道的,所以使用lint检查出的每一个资源都需要人工进行确认,防止发生异常删除。

4.开启shrinkResources功能

shrinkResources标识是否去除无用的resource文件,它需要配合minifyEnable使用,同样存在反射机制引用的问题,这种情况会被误删

android {
        buildTypes {
            release {
                minifyEnable true
                shrinkResources true
            }
        }
}
5.resConfigs剔除第三方库或者SDK中的资源

第三方库中包含的无效资源通常包含以下两点:
1.dpi目录,第三方库通常会提供所有的dpi目录以及对应的资源文件,因为它是针对大众使用的,而我们未必都需要,这时候需要选择性的移除。
2.很多第三方sdk是做了国际化,而我们可能用不到,此时也需要删除国际化资源

defaultConfig {
        。。。
        resConfigs "zh"  //表示只使用中文
        resConfigs "xxhdpi" // 表示只是用xxhdpi目录下的资源文件
}

libs目录瘦身

so文件最终会被打包到libs目录中,我们针对libs目录的瘦身主要是去除不必要的平台ABI的so文件,例如我们只保留v7a和x86平台的so

defaultConfig {
       ndk {
          abiFilters "armeabi-v7a","x86"
      }
}

其他的一些优化

1.不涉及透明图层的图片可以转换为jpg格式,比如欢迎页的图片
2.使用shape(Vector)替换图片
3.删除或者替换兼容包中无用的一些图(v4.v7.v13)
4.删除第三方aar库中使用的大图
5.把so文件放置在网上或者sd卡内

总结

目前我所了解的瘦身方法只有这些

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容

  • 最近几周一直在研究如何为APK瘦身,折腾了很久,是时候写篇博客总结一下了,虽然已经准备了下周一要在客户端周会分享用...
    风清袖一阅读 1,058评论 1 10
  • 本文来自尚妆Android团队青峰发表于尚妆博客 APK瘦身探索 最近几周一直在研究如何为APK瘦身,折腾了很久,...
    尚妆产品技术刊读阅读 1,788评论 1 23
  • 1、 前言 如果你对App优化比较敏感,那么Apk安装包的大小就一定不会忽视。关于瘦身的原因,大概有以下几个方面:...
    未来的理想阅读 11,203评论 4 39
  • 从APK的文件结构说起 APK在安装和更新之前都需要经过网络将其下载到手机,如果APK越大消耗的流量就会越多,特别...
    张明云阅读 12,947评论 1 70
  • 1 范围 本标准规定了居民家庭经济状况核对工作的信息安全管理规范,包括术语与定义、场地设备安全管理、人员管理、信息...
    Hi寒舍阅读 1,195评论 0 1