Apk压缩与瘦身)


Apk压缩与瘦身


近期本人为公司的业务员开发了一套CRM系统,自己人用的,东西内容不多,尽量都想要把Apk瘦身的小一点,无意中看到一些Apk瘦身方法,在这里记录一下。

1.TinyPNG

的Apk debug模式的8MB左右,混淆签名后的release版的是5MB左右,大家都了解Apk大的主要原因不是我们的代码,毕竟一个类才几KB,可是一张图片就至少几十KB了,所以我们要做的第一步就是给图片瘦身,降低分辨率会影响用户体验,这是不可采取的,那么我们如何做呢?就是这个TinyPNG,采用无损压缩的方式。具体大家可以去官网看看,效果还不错哦->熊猫Tiny 点击打开链接


2.删除armable-v7包的So文件

armable-v7对图形渲染有很大改进,可是为了压缩,保留armable即可,并不会对业务有什么影响。


3.微信AndResGuard资源混淆

AndResGuard是一个帮助你缩小APK大小的工具,他的原理类似Java Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a

AndResGuard不涉及编译过程,只需输入一个apk(无论签名与否,debug版,release版均可,在处理过程中会直接将原签名删除),可得到一个实现资源混淆后的apk(若在配置文件中输入签名信息,可自动重签名并对齐,得到可直接发布的apk)以及对应资源ID的mapping文件。

apply plugin: 'AndResGuard'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.6'
    }
}


andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    // 当你使用v2签名的时候,7zip压缩是无法生效的。
    use7zip = true
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = false
    whiteList = [
        // for your icon
        "R.drawable.icon",
        // 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",
        "resources.arsc"
    ]
    sevenzip {
         artifact = 'com.tencent.mm:SevenZip:1.2.6'
         //path = "/usr/local/bin/7za"
    }

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

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

不过这招也有不好的地方,不能使用V2签名打包。


当然除此之外,我们还可以去除无用的库,使用更小的库什么的来进行瘦身,在此记录一下。

你可能感兴趣的:(Android)