App瘦身

组成

按照占包体积排序

  1. so库
  2. 图片(native图片&flutter图片)
  3. dex文件

措施

一. so库

在一个成熟的应用中,至少都有20个so库以上。若每个版本都支持的话,将会极大增大体积。解决办法如下:

只使用armeabi-v7a版本so库。

原因:ARMv5与ARMv7分别是98年及01年诞生,目前市面上此类设备几乎没有。另外,x86的设备是支持使用armeabi-v7a的,当然性能方面可能会有一些影响。(大部分x86设备可能是pad,若需要支持的话pad的话,可根据实际情况考虑是否需要x86的so库)

    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
使用更小的库代替so库

此方法适用于开发者拥有so库的源码,很多时候我们根据C的源码打出的so库中,有大量用不上的代码。可以酌情删除后,打so库。笔者之前曾接入过github上的sodium加密库,使用其源码打成so库,只使用了其中部分算法,便可采用此方法。此方法难度较大,若不追求极致,可以先不做。

二. 图片

  1. 使用一套图(drawable-xxhdpi)
  2. 优先使用矢量图(矢量图仅适用于icon,若用于大图,会影响性能),然后使用webp图片
  3. 图片压缩(tinypng,免费,但有上限。每次最多20张)
  4. 移除无用资源 使用shrinkResources true,必须与混淆minifyEnabled true同时使用,否则不生效。本人负责的app,平时相对规范,开发两年后,开启与不开启,差了1.6M的体积。
buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }

三. dex文件

较成熟的app,5,6个dex文件都比较正常。

  1. 使用minifyEnabled true,混淆、压缩代码
  2. 避免使用枚举
  3. 避免使用重复功能库,例如gson和fastJson,glide和picasso等,尽量使用同一版本support库

四. 语言资源优化

限制appCompat等库中的包含所有语言类型,限制为中文。app体积减少了100K。

    defaultConfig {
        resConfigs "zh", "zh-rCN"
    }

五. 使用AndResGuard

原理:不涉及编译过程,将冗长的资源路径变短。例如:res/drawable/wechat变为r/d/a。

附上链接 https://github.com/shwenzhang/AndResGuard

总结

so库和图片占用了apk大量的体积,在从未做过优化的app中,第一次做可以优化30%-40%的体积。dex文件体积的缩小难度较大,也看到过一些大厂的实践方案,相对较复杂,有兴趣的可以去研究下。还有一些其他边角的策略,都可以减少一些体积,但整体效果不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值