Android 内存优化之包体积极致减小

简介

我们的APP随着年代的久远,迭代的版本越来越多,随之软件的包体积也就越来越大,如果apk包体积过大,会消耗用户大量的流量,并且安装时间也会更加久,这样就会导致APP的流量也会大幅度的降低,所以我们要优化apk包体积。

apk包体积优化的几道工序

1、使用SVG矢量图片
SVG全程是Scalable Vector Graphies,可缩放矢量图。它不会像位图一样因为缩放而导致图片质量下降,优点在于节约空间和内存,常用于简单的小图标。在Android Studio 的res目录下可以点击右键:
Android 内存优化之包体积极致减小_第1张图片
Android 内存优化之包体积极致减小_第2张图片
Android 内存优化之包体积极致减小_第3张图片
Android 内存优化之包体积极致减小_第4张图片
这里外部资源的话可以去阿里巴巴矢量图标库下载,这里面有大量的矢量图。

==================================================================
2、Tint着色器
Tint能够实现图片的变色,利用tint可以显示不同颜色的图片,原本需要多张不同颜色的图片,利用tint可以只用一张,从而就减小了包的体积。
使用方法:在res目录下新建一个color文件夹,在里面新建一个点击效果的xml文件如下:



    
    
    


用法:

   

这样就完成了使用一张图实现点击效果的切换。

==================================================================
3、保留默认和指定的资源
我们编译出来的apk文件默认保留了很多种格式的资源,比如strings.xml下的数据就会保留有很多个国家的语言,如下:
Android 内存优化之包体积极致减小_第5张图片
上图所示的资源和语言就非常多了,这会增大我们的包体积。
解决方案:在app下的build.gradle文件的defaultConfig节点里添加上resConfigs(‘zh-rCN’, ‘ko’)这一句。以下是添加了的效果:语言明显减少了很多,这样就大大减少了包的体积。
Android 内存优化之包体积极致减小_第6张图片

==================================================================
4、so库配置
一般来说,现在市面上的真机我们只用保留“armeabi”或者“armeabi-v7a”这两者中的其中一个就够了,不需要添加多种架构。为了直观的显示出区别,我将分为两种情况对比:
第一种:Android 内存优化之包体积极致减小_第7张图片
包体积大小以及架构:
Android 内存优化之包体积极致减小_第8张图片

第二种:
Android 内存优化之包体积极致减小_第9张图片
包体积大小以及架构:
Android 内存优化之包体积极致减小_第10张图片
可以明显得出结论,第二种的方式减少了一半以上的体积。

==================================================================
5、移除无用资源
现在市面上常用的移除无用资源无非就是两种,一种是点击Refactor下的Remove Unused Resource和Analze下的Run Inpection by Name:
Android 内存优化之包体积极致减小_第11张图片
Android 内存优化之包体积极致减小_第12张图片
Android 内存优化之包体积极致减小_第13张图片
但是不建议采用这两种方式删除无用资源,因为这是物理删除,一旦删除了想恢复的话就恢复不了了。其实我们只需要在buildTypes里面的子节点里面添加“ shrinkResources true”就完成了:
Android 内存优化之包体积极致减小_第14张图片

==================================================================
6、使用webp转换插件
我们有些背景图非常大,最小的也有几十K,最大的可能有几兆,这样就大大增加了我们的包体积。我们可以利用Android Studio里提供的webp转换插件,把图片格式转换为webp的格式。例如:
Android 内存优化之包体积极致减小_第15张图片
Android 内存优化之包体积极致减小_第16张图片
Android 内存优化之包体积极致减小_第17张图片

==================================================================
7、源代码混淆
代码混淆相信大部分从事Android开发的都会知道在哪里配置,网上也有很多例子介绍怎么去混淆代码,在这里就不多做介绍了。

==================================================================
8、资源混淆
采用资源混淆既可以对APP的安全性的提高,也能够减小包的体积,可以说是两全其美,本人采用的资源混淆方案是腾讯的AndResGuard 开源库,大家可以到他们的官方库去看集成的方法,这里就不做过多的介绍。下面贴出我混淆之前和混淆之后的效果。
混淆前:
Android 内存优化之包体积极致减小_第18张图片

混淆后:
Android 内存优化之包体积极致减小_第19张图片

==================================================================

总结

如果你用上了上面的几种方法,我相信你的包体积一定会有非常大幅度的减小,我项目中用了这几种方法使得从最初的25M左右达到了现在的9M左右大小,差别是相当的明显的呢。如果有说的不对的请指正。

你可能感兴趣的:(Android学习)