首先来说一下APK小的好处,APK小就意味着下载耗流量少,下载速度快。站在用户的角度上想一下就知道,用户更愿意下容量小,更精致的APK。当然APK小并不就是意味着功能少,这是站在同样功能的基础上来说的。分析apk的工具https://nimbledroid.com/?spm=5176.100239.blogcont57284.8.aVVWAv
首先来说一下图标篇,做开发的都知道为了图片设配,图标大小占APK的比重是很大的。从图标出发,思路有二:
1.压缩图标:使用tinypng优化Android的资源图片,tinypng能在不失真的前提下极大的压缩图标。官网:https://tinypng.com/
2.减少图标:
a.随着app版本的迭代,实际上有很多图片已经是用不上了的,但是又没有及时的删除。Android Studio自带的Lint工具能分析出未使用的资源,在AndroidStudio的菜单中选择Analyze->Inspecting Code即可进入Lint工具分析。

当然也可以直接在build中配置去除无用资源,记得配合代码混淆一起使用

b.我们会为了设配手机分辨率而让美工切出多套图片,其实并不是每张图片都需要适配多套分辨率的,众所周知drawable下有ldpi、mdpi、hdip、xhdpi、xxhdpi、xxxhdpi来适配不同分辨率的手机,按我个人经验,大多数图标只要设计720分辨率(即xhdpi)下一套,自己设置尺寸来适配。
此外,我们所引入的第三方包中可能也引用了资源图片,但是其中的某些我们可能是不想要的,比如ldpi和xxxhdpi,那么是否可以设置什么东西来让打包的时候剔除他们呢?是可以的,可以配置下build.gradle
defaultConfig {resConfigs"en","de","fr","it"resConfigs"hdpi","xhdpi","xxhdpi"}
c.多用.9图,9.png格式的图片在android 环境下具有自适应调节大小的能力。记住左上右下,左边和上方是设置.9图横向和纵向可以拉伸的区域,右边和下方是设配横纵向内容的显示区域。

d.覆盖第三方库里的大图,很多时候我们引入了大量的第三方库,这些第三方库里又引用了一些大图但是实际上并不会被我们用到,删除又怕出错,这时候我们就可以考虑用1x1的透明图片覆盖,已达到减少图片资源空间占用的问题。
e.用代码代替图片,很多情况下一些简单的图标用shap都能制作,要懂得灵活运用shap。

f.用layer-list来制作多层图片从而达到复用。

g.用一张图来制作selector效果,使用selector做遮罩,原图做background。


h.用图标字体来代替图标,具体可参考阿里巴巴IconFont,地址 http://www.iconfont.cn/
然后讲一下Progruard,Proguard是Android很早就使用的代码混淆工具,除了用于混淆代码提高安全性以外,他在代码编译的时候也会通过遍历代码的方式来发现没有被调用的代码,从而将其在打包成apk时剔除,最终一定程度上降低了apk的大小。另外提供资源混淆工具AndResGuard
最后是so的优化,用过百度地图api的同学都知道,百度地图SDK中包含了很多so文件,而这些so文件的体积都很庞大,考虑下我们的用户,基本都是跑在手机上的(没有人跑在模拟器上),所以明显x86和x86_64的so是不需要支持。按个人经验只要保留下面二个就行了。

网友评论