apktool反编译重编译微信6.3.7

使用apktool2.0.0-RC2反编译重编译微信6.3.7成功,过程如下:
1.反编译过程很顺利
2.重编译报如下错误:
D:\android\apktool>apktool.bat b weixin6.3.7
I: Using Apktool 2.0.0-RC2 on weixin6.3.7
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
D:\android\apktool\weixin6.3.7\res\values\public.xml:165: error: invalid symbol:
'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:487: error: invalid symbol:
'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:679: error: invalid symbol:
'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:2464: error: invalid symbol
: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:2640: error: invalid symbol
: 'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:4812: error: invalid symbol
: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:4988: error: invalid symbol
: 'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:10366: error: invalid symbo
l: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:10542: error: invalid symbo
l: 'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:10875: error: invalid symbo
l: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:11051: error: invalid symbo
l: 'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:11388: error: invalid symbo
l: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:11564: error: invalid symbo
l: 'if'
D:\android\apktool\weixin6.3.7\res\values\public.xml:12040: error: invalid symbo
l: 'do'
D:\android\apktool\weixin6.3.7\res\values\public.xml:12216: error: invalid symbo
l: 'if'
D:\android\apktool\weixin6.3.7\res\values\attrs.xml:319: error: invalid symbol:
'do'
D:\android\apktool\weixin6.3.7\res\values\drawables.xml:165: error: invalid symb
ol: 'do'
D:\android\apktool\weixin6.3.7\res\values\drawables.xml:357: error: invalid symb
ol: 'if'
D:\android\apktool\weixin6.3.7\res\values\layouts.xml:166: error: invalid symbol
: 'do'
D:\android\apktool\weixin6.3.7\res\values\layouts.xml:342: error: invalid symbol
: 'if'
D:\android\apktool\weixin6.3.7\res\values\strings.xml:165: error: invalid symbol
: 'do'
D:\android\apktool\weixin6.3.7\res\values\strings.xml:357: error: invalid symbol
: 'if'
D:\android\apktool\weixin6.3.7\res\values\colors.xml:165: error: invalid symbol:
'do'
【apktool反编译重编译微信6.3.7】D:\android\apktool\weixin6.3.7\res\values\colors.xml:341: error: invalid symbol:
'if'
D:\android\apktool\weixin6.3.7\res\values\dimens.xml:165: error: invalid symbol:
'do'
D:\android\apktool\weixin6.3.7\res\values\dimens.xml:341: error: invalid symbol:
'if'
D:\android\apktool\weixin6.3.7\res\values\styles.xml:594: error: invalid symbol:
'do'
D:\android\apktool\weixin6.3.7\res\values\styles.xml:1799: error: invalid symbol
: 'if'
D:\android\apktool\weixin6.3.7\res\values\ids.xml:64: error: invalid symbol: 'do
'
D:\android\apktool\weixin6.3.7\res\values\ids.xml:240: error: invalid symbol: 'i
f'
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.Androl
ibException: brut.common.BrutException: could not exec command: [C:\Users\XIEPEN
~1\AppData\Local\Temp\brut_util_Jar_2126814912653992591.tmp, p, --forced-package
-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 660,
--version-name, 6.3.7.51_rbb7fa12, -F, C:\Users\XIEPEN~1\AppData\Local\Temp\APKT
OOL809950482831051853.tmp, -0, arsc, -I, C:\Users\xiepengbin\apktool\framework\1
.apk, -S, D:\android\apktool\weixin6.3.7\res, -M, D:\android\apktool\weixin6.3.7
\AndroidManifest.xml]
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:449)
at brut.androlib.Androlib.buildResources(Androlib.java:383)
at brut.androlib.Androlib.build(Androlib.java:286)
at brut.androlib.Androlib.build(Androlib.java:258)
at brut.apktool.Main.cmdBuild(Main.java:240)
at brut.apktool.Main.main(Main.java:89)
看来是利用了aapt的特性,用java关键字来作name,导致不能编译,但是运行用的是id,所以运行没有问题。
这个问题如何破呢?最简单的就是将name中的do与if都替换掉。貌似也可以修改aapt,忽略掉do与if。
当然替换是多简单的事,进入res目录,进行替换:

yc@yc:~/temp2/weixin_622/res$ sed -i 's/"if"/"if_yc"/g' `grep '"if"' . -rl` yc@yc:~/temp2/weixin_622/res$ sed -i 's/"do"/"do_yc"/g' `grep '"do"' . -rl`

两个命令就把绝大部分的替换掉了,剩下的一些零碎手工修改就可以了。
修改完成后重新回编译成功
参考:http://m.blog.csdn.net/article/details?id=49904111
??

    推荐阅读