APP 瘦身大法 --AndResGuard 的使用 (1),为什么阿里的程序员成长如此之快
".jpg",".jpeg",".gif","resources.arsc"]whiteList = [// your icon"R.drawable.icon",// for fabric"R.string.com.crashlytics.",// for umeng update"R.string.tb_","R.layout.tb_","R.drawable.tb_","R.drawable.u1","R.drawable.u2*","R.color.tb_",// 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.str
ing.google_crash_reporting_api_key",
//友盟"R.string.umeng*","R.string.UM*","R.layout.umeng*","R.drawable.umeng*","R.id.umeng*","R.anim.umeng*","R.color.umeng*","R.style.UM","R.style.umeng*",
//融云"R.drawable.u*","R.drawable.rc_","R.string.rc_","R.layout.rc_","R.color.rc_","R.id.rc_","R.style.rc_","R.dimen.rc_","R.array.rc_"]
sevenzip {artifact = 'com.tencent.mm:SevenZip:1.2.10'//path = "/usr/local/bin/7za"}}
其中 whiteList(白名单)中指定不需要进行混淆的资源路径规则,主要是一些第三方 SDK,因为有些 SDK 的代码中引用到对应的资源文件,如果对其进行混淆,会导致找不到对应资源文件,出现 crash,所以不能对其资源文件进行混淆。由于公司的项目中使用到了友盟和融云,所以将这两个 SDK 加入白名单,更多的白名单可以查看:
由于我们并非是在 app 模块下的 build.gradle 中添加 AndResGuard 的配置,而是单独出 and_res_guard.gradle,所以需要在 app 模块下的 build.gradle 文件中引用,在 app 模块下的 build.gradle 文件开头添加以下代码引用:
apply from: 'and_res_guard.gradle'
AndResGuard 的使用
集成完 AndResGuard 后,在 app 的 gradle 的 tasks 中,多了一个叫做 andresguard 的 task,如图:
如果想打 debug 包,则执行 resguardDebug 指令;
如果想打 preview 包,则执行 resguardPreview 指令;
如果想打 release 包,则执行 resguardRelease 指令。
演示下打 release 包,我们双击执行 resguardRelease 指令,执行完毕后,我们可以在 app 目录下的/build/output/apk/release/AndResGuard_{apk_name}/ 文件夹中找到混淆后的 Apk:
其中 app-release_aligned_signed.apk 为进行混淆并签名过的 apk,双击查看该 apk:
可以看到 res 文件夹变为 r,且里面的目录名称都已经是混淆过的。到这里为止 AndResGuard 的使用就已经介绍完毕,如果有不清楚的地方,可以参考我写的 demo,demo 代码地址:github.com/chaychan/An…对于 AndResGuard 中的配置有不清楚的地方,可以查看官方文档:AndResGuard中文文档
评论