改包名带来的问题
改包名带来的问题
改包名带来的问题
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 进行授权