原文:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0419/7848.html
http://wuxiaolong.me/2017/03/19/ReduceAPKSize/
APK文件内容速揽:
apk文件结构各个文件和目录的作用是什么呢?
各个文件和目录的作用OK,既然我们已经了解了APK的各个组成部分,那么我们就可以针对下面的三个组成部分,采取逐个击破的方式,达到缩减APK体积的目的:
1、Java代码
我们可以使用Proguard,在编译时对Java代码进行混淆,优化和压缩。Proguard对代码进行遍历,然后剔除其中未被使用的冗余的代码,并对类,属性,接口等进行重命名,从而达到瘦身的目的。
我们可以在 build.gradle 文件中配置Proguard。
Proguard除此之外,微信的工程师还开源了一个项目,可以直接对APK进行处理,缩小体积。具体的使用方法:https://github.com/shwenzhang/AndResGuard。
2、资源文件
Lint
由于Proguard只对Java代码起作用,对于资源文件,它就无能为力了。这个时候,Lint就派上用场了。Lint是一个静态的代码分析器,我们可以通过在 Android Studio -> Analyze -> Inspect code... , 选择范围即可开始就检查。
Inspect codeLint在检查完成后,会提供一份详细的资源文件清单,并且将没有用到的资源在 UnusedResources:Unused resources区域。只要我们没有通过反射使用这些资源,就可以放心的删掉它们了
下面是我根据lint的提示,剔除了部分无用资源后,APK的体积:
图片压缩
对于资源文件的优化,其实占大头的还是图片。Android打包本身会对png进行无损压缩,在不那么影响图片显示效果的情况下,对图片进行有损压缩对apk体积的减小还是非常可观的。
我们先使用TinyPng对项目中四张比较大的图片进行压缩,可以看出,效果还是非常不错的。
使用TinyPng后,我们还可以将图片转换为 WebP 格式,进一步缩小图片的体积。不过需要注意的是,WebP格式仅适用于Android 4.0+版本,如果你的应用需要兼容Android 2.3,那么需要额外的引入 .so 文件,apk的体积自然也会增加。所以,根据你的需求,权衡利弊吧。
在 Android Studio 中,选定需要转换的图片,然后右键鼠标,即可在菜单底部看到 Convert to WebP 的选项了,然后就可以进行转换的操作。
3、Native Code
如果你的App使用到了Native code,在不影响功能的前提下,可以考虑去除部分平台对应的代码,例如移除对 armeabi、mips的支持
Native Code4、其他
别忘了最简单,也最容易忽视的,去除重复的依赖,或者是引用更加轻量级的库,也可以达到apk瘦身的效果。
在Release版本中,去除那些只会在debug时才会出现的代码。
对于那些使用频率很小的文件或者是图片,可以存放到云端后,通过网络加载。
网友评论