文章

改包名带来的问题

改包名带来的问题

改包名带来的问题

1、RemoteViews 包名写死了的问题

1
2
3
4
RemoteViews expandedView = new RemoteViews(
        mContext.getPackageName(),
        task.mControl == Downloads.CONTROL_RUN ? R.layout.status_bar_ongoing_event_progress_bar
                : R.layout.status_bar_download_pause);

2、微信资源混淆,白名单 xxx.R 要改为 applicationId.R,因为在代码中用到的 package.R 会被动态的替换成 applicationId.R

applicationId 和 package 带来的血案 - 微信资源混淆

  • 清单文件:

package=”com.baidu.browser.inter”

  • build.gradle:

applicationId ‘com.browser.internet’

  • 编译后的 apk,package 被替换成了 applicationId
  • 引入了微信资源混淆,定义了一堆白名单不混淆的资源,但 R 用的包名还是清单文件中的 package,而在 build.gradle 定义了 applicationId 后,清单文件中的 package 会被动态的替换成 applicationId,R 引用的资源也会被动态的替换成 applicationId.R,导致白名单的一些资源被混淆了,从而导致 crash。
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
andResGuard {
    mappingFile = null
    use7zip = true
    keepRoot = false
    // add <yourpackagename>.R.drawable.icon into whitelist.
    // because the launcher will get the icon with his name
    whiteList = [
            "com.baidu.browser.inter.R.drawable.logo_obt",
            "com.baidu.browser.inter.R.drawable.category_item_*",
            "com.baidu.browser.inter.R.drawable.*zeus*",
            "com.baidu.browser.inter.R.drawable.zeus*",
            "com.baidu.browser.inter.R.drawable.*zeus",
            "com.baidu.browser.inter.R.layout.*zeus*",
            "com.baidu.browser.inter.R.layout.zeus*",
            "com.baidu.browser.inter.R.layout.*zeus",
            "com.baidu.browser.inter.R.raw.*zeus*",
            "com.baidu.browser.inter.R.raw.zeus*",
            "com.baidu.browser.inter.R.raw.*zeus",
            "com.baidu.browser.inter.R.menu.*zeus*",
            "com.baidu.browser.inter.R.menu.zeus*",
            "com.baidu.browser.inter.R.menu.*zeus",
            "com.baidu.browser.inter.R.anim.*zeus*",
            "com.baidu.browser.inter.R.anim.zeus*",
            "com.baidu.browser.inter.R.anim.*zeus",
            "com.baidu.browser.inter.R.color.*zeus*",
            "com.baidu.browser.inter.R.color.zeus*",
            "com.baidu.browser.inter.R.color.*zeus",
            "com.baidu.browser.inter.R.string.*zeus*",
            "com.baidu.browser.inter.R.string.zeus*",
            "com.baidu.browser.inter.R.string.*zeus",
            "com.baidu.browser.inter.R.drawable.logo_news",
            "com.baidu.browser.inter.R.drawable.float_window_option*",
            "com.baidu.browser.inter.R.string.float_win_option*",
            "com.baidu.browser.inter.R.id.*"
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "resources.arsc"
    ]
}

出现的问题:android.content.res.Resources$NotFoundException

  • 解决: 把微信资源混淆的包名替换成 build.gradle 中的 applicationId 即可。
本文由作者按照 CC BY 4.0 进行授权