Android app瘦身方案

一、开启minifyEnabled混淆代码

在app/build.gradle打开minifyEnabled:

android  {

    buildTypes  {

        release  {

            minifyEanbled : true

        }

    }

}

二、开启shrinkResources去除无用资源

在app/build.gradle打开shrinkResources

android  {

    buildTypes  {

        release  {

            minifyEanbled : true

        shrinkResources true

        }

    }

}

shrinkResources依赖于minifyEnabled,必须和minifyEnabled一起用,就是打开shrinkResources也必须打开minifyEnabled。

三、删除未使用到的xml和图片

如何知道哪些xml和图片未被使用到?使用Android Studio的Lint,步骤:
Android Studio -> Menu -> Refactor -> Remove Unused Resources
选择 Refactor 一键删除
选择 Perview 预览未使用到的资源

或者

点击菜单栏 Analyze -> Run Inspection by Name -> unused resources -> Moudule ‘app’ -> OK,这样会搜出来哪些未被使用到未使用到xml和图片,如下:


四、使用shape作为背景

很多点击效果可能会使用到图片,可以换成shape是实现,我查看了下,微言APP都是shape实现的,Good。

五、使用微信Android资源混淆工具

微信AndResGuard是一个帮助你缩小APK大小的工具,详情: Android资源混淆工具说明

使用方法:

Project/build.gradle

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

app/build.gradle

apply plugin: 'AndResGuard'
def supportVersion = "25.0.0"
android {
    ...
    signingConfigs {
        release {
            storeFile file('keystore/android.keystore')
            storePassword '123456'
            keyAlias 'android.keystore'
            keyPassword '123456'
        }
		
        debug {
            storeFile file('keystore/android.keystore')
            storePassword '123456'
            keyAlias 'android.keystore'
            keyPassword '123456'
        }
    }

    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}

andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    //mappingFile用于增量更新,保持本次混淆与上次混淆结果一致;
    mappingFile = null
    //uss7zip为true时,useSign必须为true;
    use7zip = true
    //useSign为true时,需要配置signConfig;
    useSign = true
    //打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字;
    keepRoot = false
    //whiteList添加在代码内部需要动态获取的资源id,不混淆这部分;

    whiteList = [
            // for your icon
            "R.drawable.icon",
            // for fabric
            "R.string.com.crashlytics.*",
            // for umeng update
            "R.string.umeng*",
            "R.string.UM*",
            "R.string.tb_*",
            "R.layout.umeng*",
            "R.layout.tb_*",
            "R.drawable.umeng*",
            "R.drawable.tb_*",
            "R.anim.umeng*",
            "R.color.umeng*",
            "R.color.tb_*",
            "R.style.\*UM\*",
            "R.style.umeng*",
            "R.id.umeng*",
            // umeng share for sina
            "R.drawable.sina*",
            // for google-services.json
            "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",
            // umeng share for facebook
            "R.layout.\*facebook\*",
            "R.id.\*facebook\*",
            // umeng share for messager
            "R.layout.\*messager\*",
            "R.id.\*messager\*",
            // umeng share commond
            "R.id.progress\_bar\_parent",
            "R.id.webView"

    ]

    //用来指定文件重打包时是否压缩指定文件;

    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "resources.arsc"
    ]

    //sevenzip可使用artifacr或path,path指本地安装的7za(7zip命令行工具)。

    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.0'
        //path = "/usr/local/bin/7za"
    }
}

AndResGuard打包命令行:gradlew resguardRelease,最终的混淆APK会生成在{App}/build/output/apk/AndResGuard目录下。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值