抱着学习的心态,从官网上了下了一个weixin.apk.
版本是:6.3.7
do&if回编译错误的问题可以参考这篇http://blog.youkuaiyun.com/XXOOYC/article/details/79497058,提供了linux平台的工具,提供过了linux平台的工具,不再需要修改代码.
使用Apktool解压weixin.apk没有,但是重新编译会报如下错:
yc@yc:~/temp2$ java -jar apktool/apktool.jar b weixin_622
I: Using Apktool 2.0.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
/home/yc/temp2/weixin_622/res/values/public.xml:165: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:497: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:674: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:2828: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:3004: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:4635: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:4811: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:9957: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:10133: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:10426: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:10602: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:10891: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:11067: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/public.xml:11527: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/public.xml:11703: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/attrs.xml:319: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/drawables.xml:176: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/drawables.xml:353: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/layouts.xml:166: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/layouts.xml:342: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/strings.xml:165: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/strings.xml:357: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/colors.xml:165: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/colors.xml:341: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/dimens.xml:165: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/dimens.xml:341: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/styles.xml:613: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/styles.xml:1806: error: invalid symbol: 'if'
/home/yc/temp2/weixin_622/res/values/ids.xml:64: error: invalid symbol: 'do'
/home/yc/temp2/weixin_622/res/values/ids.xml:240: error: invalid symbol: 'if'
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:459)
at brut.androlib.Androlib.buildResources(Androlib.java:397)
at brut.androlib.Androlib.build(Androlib.java:285)
at brut.androlib.Androlib.build(Androlib.java:256)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:419)
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:445)
... 5 more
Caused by: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
at brut.util.OS.exec(OS.java:89)
at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:413)
... 6 more
看来是利用了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`
两个命令就把绝大部分的替换掉了,剩下的一些零碎手工修改就可以了。
修改完成后再来尝试重新打包:
yc@yc:~/temp2$ java -jar apktool/apktool.jar b weixin_622
I: Using Apktool 2.0.1
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
I: Copying unknown files/dir...
打包编译成功!
下一步再来修改一下包名:
将包名修改为com.tencent.mm.want_fuck"
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto"
package="com.tencent.mm.want_fuck" platformBuildVersionCode="19" platformBuildVersionName="4.4.2-1456859">
然后再把Manifest.xml中的所有 ". 都替换为 "com.tencent.mm.
重新打包编译,安装运行试试。
比较神的是竟然后面就没有遇到签名验证,包名验证等一系列问题,很顺利的登录了。
感觉顺利的太过火了。。
运行截图:
grep了下,还是有很多地方会取签名信息。
到这步也至少能够打造一个简单的自己的微信版本了。
先记录到此。