AndResGuard Android资源混淆使用过程

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。这种的了)

如下图:
在这里插入图片描述
在这里插入图片描述
。。。再配合开启代码混淆,是不是感觉有一丝丝成就感。。。。。虽然用的人家的工具。

慢慢积累,一点点成长!加油