您的位置:首页 >  新闻中心 > 行业动态
  行业动态
 

Android性能优化之减小APK大小最全总结

来源:原创    时间:2017-10-21    浏览:0 次

前语

跟着版别迭代,功用添加安装包体积也会渐渐增大。本文主要是介绍APK减肥中用到的一些办法。

APK剖析

既然是要优化APK的巨细,那首先就得看下APK文件的构成。

Android Studio在2.2版别添加 APK Analyzer功用,能够直接翻开apk文件,如下图所示


APK文件主要有如下几部分组成:


从APK的构成中能够看出占比较大的几个部分,能够侧重对其优化



优化

res文件夹

图片资源紧缩

1、ImageOptim

供给了相应客户端,支撑经过客户端批量处理,mac上能够运用如下指令敞开:


2、TinyPng

没有供给客户端,支撑拖拽到网页处理;供给了HTTP API来批量处理,可是有数量约束,每个key每个月能够紧缩500张。 开发了一个gradle插件来批量操作,网上也有一些相似的插件:TinyPng Gradle插件

移除无用资源

1、经过运用Lint检测删去无用资源,某些事务代码删去的时分遗漏了相应资源,能够写个脚本检测移除不再运用的资源

2、添加shrinkResources设置项(官方阐明),有0.18M的优化空间,可是该设置有危险如果要运用需求做好测验


3、挑选支撑适宜的图片,现在有ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi资源文件夹,可依据自己app的用户设备挑选支撑2-3种即可(当然一套也行) 高版别的gradle已不再支撑经过resConfigs "nodpi", "hdpi", "xhdpi", "xxhdpi"装备支撑的资源,只能人肉删去。如果你只想打包某一种屏幕密度的资源,能够运用分包战略,添加如下density装备能够只支撑打包xhdpi资源(如果呈现某些资源xhdpi没有,而其他文件夹包含的状况也不必忧虑,gradle会保存相应资源),这种装备终究会出多个apk包,详细介绍可参看官方阐明。


4、如果想全体移除res下某个文件夹能够添加如下aaptOptions装备,而不必打包时手艺删去,多个文件夹用:离隔



arsc文件

resource.arsc文件记录了资源id和资源的对应联系(字符串的内容,图片的相对途径等)

削减言语支撑

现在包含各种言语(v7包引进),点击resources.arsc能够看到支撑80种


能够经过修正gradle装备,去除不需求部分,这儿我们保存4种


只保存"zh-rCN", "zh-rHK", "zh-rTW", "en" 削减不必要的言语(80种减到5种,有一个default)apk可削减0.61M


资源混杂

开源解决方案AndResGuard能够看下,经过运用段途径和紧缩能够减小apk,需求留意的是你的项目中某些资源需求keep,削减了1.5M。


架构支撑


Android体系现在支撑以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起)

每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64

一切的x86/x86_64/armeabi-v7a/arm64-v8a设备都支撑armeabi架构的.so文件,x86设备能够很好的运转ARM类型函数库,但并不确保100%不发生crash,特别是对旧设备。64位设备(arm64-v8a, x86_64, mips64)能够运转32位的函数库,可是以32位方法运转,在64位平台上运转32位版别的ART和Android组件,将丢掉专为64位优化过的功用(ART,webview,media等等)。所以一般的运用完全能够依据自己事务需求挑选运用armeabi或许armeabi-v7a一种支撑就行。

能够经过gradle装备


比方:微信、微博、QQ只保存了armeabi,Facebook、Twitter、Instagram只保存了armeabi-v7a

假定只支撑了armeabi,如果有特殊要求(比方视频运用)需求用到部分armeabi-v7a的so,能够经过改名放到armeabi文件夹中,依据手机实际状况挑选加载。

动态下发

比较大的so能够挑选动态下发的方法推迟加载,代码上需求加一些判别逻辑。

dex文件

1、添加设置minifyEnabled true,混杂、紧缩代码,这个设置现在app应该都现已添加了。

2、删去一些无用库,前期为了兼容低版别手机,添加了一些兼容库,跟着时间推移APP支撑的最低版别也在升高,之前的一些无用库就能够移除。

3、插件下发事务模块 添加插架结构,将部分代码推迟下发加载,这部分作用显著。

其他

极点状况下能够考虑以下两种方法,能够优化约1M的空间

debug信息

一般我们会装备Proguard保存行号等信息用于线上日志剖析,极点状况下也可考虑移除这部分,会有5%-10%的作用,能够削减了0.5M,可是出于方便性暂未移除。


supportv7包

如果对supportv7包依靠的不多,能够直接把运用到的内容copy出来独自处理,究竟该包会添加至少0.4M的体积,事务杂乱后这部分并不好操作和后续保护,头条暂时并没有运用。



TODO

功用迭代不止,减肥工作不息。

要保持和持续减小apk包,有必要要不断优化,现在又如下思路还没有施行,能够看下

1、Google的support-v4包新版别现已做了拆分,24.2.0版别拆分成了5个module:support-compat、support-core-utils、support-core-ui、support-media-compat、support-fragment,能够依据自己需求独自引证相应的module。 v7包也会依靠v4,maven依靠有个优点,能够经过exclude独自除掉相应依靠,如下:


不过现在各家APP关于support包的运用较深,support包各模块也会有相关依靠联系,详细能不能运用还需求看实际状况了。

2、运用ReDex优化,这是Facebook开源的一个减小安卓app巨细以进步功用的东西,集成的话有危险需求多测验,教程。

3、削减java躲藏开支,比方一些主动生成的函数等。