美文网首页
Android对apk包进行瘦身

Android对apk包进行瘦身

作者: 小宇宙_XYZ | 来源:发表于2018-02-23 19:12 被阅读21次

    原文: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 code

    Lint在检查完成后,会提供一份详细的资源文件清单,并且将没有用到的资源在 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 Code

    4、其他

    别忘了最简单,也最容易忽视的,去除重复的依赖,或者是引用更加轻量级的库,也可以达到apk瘦身的效果。

    在Release版本中,去除那些只会在debug时才会出现的代码。

    对于那些使用频率很小的文件或者是图片,可以存放到云端后,通过网络加载。

    相关文章

      网友评论

          本文标题:Android对apk包进行瘦身

          本文链接:https://www.haomeiwen.com/subject/uqaxxftx.html