优化 Apk 包大小方案

  1. 设置支持语言(减少 0.2 MB)
    在 build.gradle 中设置仅支持中文:
 defaultConfig {
           ...
        // 仅支持 中文
        resConfigs "zh"
    }
  1. 设置支持的 CPU 架构类型(减少 1.5 MB)
    目前而言,项目中使用到真正用到 So 库没几个,全部兼容太过于浪费,据说 arm 属于通用,那么这里同语言设置一样,仅支持 arm 即可。
 defaultConfig {
        ...
        ndk {
            // 设置支持的SO库架构
            abiFilters "armeabi"
        }
    }
  1. 开启压缩、混淆(减少 2.4 MB)
    当我们使用 Android Gradle 3.4.0 或者更高版本时,默认会启用 R8 编译器进行压缩、混淆以及优化,主要项以及作用如下:
代码优化: 通过检测并安全移除未使用的类、字段、方法和属性;
资源压缩: 从应用中移除未使用的资源,此过程包含移除库依赖项中未使用的资源文件。此项常常和代码压缩配合使用;
混淆: 缩短类和成员的名称,从而减小 Dex 文件大小;
优化: 检查并重写代码,进一步减小 Dex 文件大小。例如,如果 R8 检测到从未采用过给定 if/else 语句的 else {} 分支,R8 便会移除 else {} 分支的代码。
  1. 开启 Zipalign 优化
    zipalign 是一种归档对齐工具,可对 Android 应用文件进行重要的优化。其目的是要确保所有未压缩数据的开头均相对于文件开头部分执行特定的对齐。具体来说,它会使 APK 中的所有未压缩数据(例如图片或原始文件)在 4 字节边界上对齐。这样一来,即可使用 mmap() 直接访问所有部分,即使其中包含具有对齐限制的二进制数据也没关系。这样做的好处是可以减少运行应用时消耗的 RAM 容量。

  2. 套图的优化 - SVG
    可缩放矢量图形(英語:Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。

  defaultConfig {
        ...
        // 强制 Gradle 在编译时不自动生成兼容低版本的位图资源
        vectorDrawables.useSupportLibrary = true
        // 生成指定类型的图片资源
        vectorDrawables.generatedDensities = ['xhdpi', 'xxhdpi', 'xxxhdpi'] 
    }

注意:SVG在Android6.0一下,要做兼容处理!

  1. AndResGuard - 微信资源压缩应用
    项目根目录 build 添加依赖
 dependencies {
        ...
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
    }

app 目录下新建 wechat-ResGuard.gradle 文件

apply plugin: 'AndResGuard'

andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = true
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = false
    // 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
    fixedResName = "arg"
    // 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
    mergeDuplicatedRes = true
    whiteList = [
            // App Logo 这里对应找自己的 App Logo
            "R.mipmap.ic_launcher",
            "R.mipmap.ic_launcher_foreground",
            "R.mipmap.ic_launcher_round",
            // for fabric
            "R.string.com.crashlytics.*",
            // for google-services
            "R.string.google_app_id",
            "R.string.gcm_defaultSenderId",
            "R.string.default_web_client_id",
            "R.string.ga_trackingId",
            "R.string.firebase_database_url",
            "R.string.google_api_key",
            "R.string.google_crash_reporting_api_key"
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.17'
        //path = "/usr/local/bin/7za"
    }

    /**
     * 可选: 如果不设置则会默认覆盖assemble输出的apk
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * 可选: 指定v1签名时生成jar文件的摘要算法
     * 默认值为“SHA-1”
     **/
    // digestalg = "SHA-256"
}

app 下 build 中添加末尾添加依赖

apply from: 'wechat-ResGuard.gradle'

##有时间再详细写,拜拜!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值