AndResGuard Android资源混淆
AndResGuard的github项目地址
在代码中除了使用proguard-rules规则对代码进行混淆的同时,还可以使用andresguard对资源进行混淆,在此记录一次动手实现资源混淆的过程。
一,项目根目录下build.gradle中,添加插件的依赖:
1 2 3 4 5 | dependencies { classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20' } |
**二,在app下面新建andres_guard.gradle文件。**参照github上的介绍加入以下代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | apply plugin: 'AndResGuard' andResGuard { mappingFile = null use7zip = true useSign = true keepRoot = false compressFilePattern = [ "*.png", "*.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.string.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" } } |
以上代码只是基本的使用,结合实际项目需要 有一些通过代码资源获取的图片等资源 需要手动加入到白名单里。例如应用小图标、首页底部导航图标等这些可以加入到白名单内。
所用到第三方SDK内的资源也需要在此列出来。
其中 useSign = true开启后 需要在build.gradle中配置 签名文件及路径密码。不然打不出带签名的包。
第三方的白名单可参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | Umeng sdk "R.anim.umeng*", "R.string.umeng*", "R.string.UM*", "R.string.tb_*", "R.layout.umeng*", "R.layout.socialize_*", "R.layout.*messager*", "R.layout.tb_*", "R.color.umeng*", "R.color.tb_*", "R.style.*UM*", "R.style.umeng*", "R.drawable.umeng*", "R.drawable.tb_*", "R.drawable.sina*", "R.drawable.qq_*", "R.drawable.tb_*", "R.id.umeng*", "R.id.*messager*", "R.id.progress_bar_parent", "R.id.socialize_*", "R.id.webView" 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" getui(个推) "R.drawable.push", "R.drawable.push_small", "R.layout.getui_notification" JPush(极光推送) "R.drawable.jpush_notification_icon" GrowingIO "R.string.growingio_project_id", "R.string.growingio_url_scheme", "R.string.growingio_channel" Firebase firStore R.string.project_id Huawei push "R.string.hms_*", "R.string.connect_server_fail_prompt_toast", "R.string.getting_message_fail_prompt_toast", "R.string.no_available_network_prompt_toast", "R.string.third_app_*", "R.string.upsdk_*", "R.style.upsdkDlDialog", "R.style.AppTheme", "R.style.AppBaseTheme", "R.dimen.upsdk_dialog_*", "R.color.upsdk_*", "R.layout.upsdk_*", "R.drawable.upsdk_*", "R.drawable.hms_*", "R.layout.hms_*", "R.id.hms_*" Firebase Crashlytics "R.bool.com.crashlytics.useFirebaseAppId", "R.string.com.crashlytics.useFirebaseAppId", "R.string.google_app_id", "R.bool.com.crashlytics.CollectDeviceIdentifiers", "R.string.com.crashlytics.CollectDeviceIdentifiers", "R.bool.com.crashlytics.CollectUserIdentifiers", "R.string.com.crashlytics.CollectUserIdentifiers", "R.string.com.crashlytics.ApiEndpoint", "R.string.io.fabric.android.build_id", "R.string.com.crashlytics.android.build_id", "R.bool.com.crashlytics.RequireBuildId", "R.string.com.crashlytics.RequireBuildId", "R.bool.com.crashlytics.CollectCustomLogs", "R.string.com.crashlytics.CollectCustomLogs", "R.bool.com.crashlytics.Trace", "R.string.com.crashlytics.Trace", "R.string.com.crashlytics.CollectCustomKeys" shareSDK "R.id.ssdk*", "R.string.mobcommon*", "R.string.ssdk*", "R.string.mobdemo*", "R.drawable.mobcommon*", "R.drawable.ssdk*", "R.layout.mob*", "R.style.mobcommon*", |
参考
白名单
三,应用
在bulid.gradle中 加入此文件
1 | apply from: 'andres_guard.gradle' |

四、让我们一起运行看看效果

点击 其中正式或者测试版本生成apk
开始编译

等待时间稍微有一丢丢长:1m3s
完美生成一下apk.可以根据需求 选择使用apk.

接下来,我们打开apk 看看 资源是否被混淆了呢,(额,混淆了路径,成r/a/b。这种的了)
如下图:


。。。再配合开启代码混淆,是不是感觉有一丝丝成就感。。。。。虽然用的人家的工具。
慢慢积累,一点点成长!加油