微信扫一扫的扫码功能很弱,速度慢,经常有二维码识别不了。Dynamsoft的同事怀疑微信的扫码不是在本地完成的,而是把数据传输到了server端来解码。如何才能得到答案?
微信扫一扫网速检测
为什么会有人怀疑微信的扫码是需要连接server的,原因在于在断网的情况下,微信扫描是不可用的。那么在联网的情况下怎么可以知道数据传输了没有?我在手机上打开状态栏网速显示。
数值很小,不可能有图像数据传输。扫码应该是本地完成的。再进一步验证下。
窥探微信安装包
手机应用的安装包其实就是一个压缩包,用7zip解压,打开目录lib\armeabi。里面包涵了微信安卓应用所用到的C/C++动态链接库。
大概扫一下,看到了libwechatQrMod.so,应该就是用于二维码的了。用atom打开,居然发现了这个:
微信的1D/2D barcode解码居然用的是开源的ZXing!腾讯应该做了一些修改。
通过jadx反编译dex文件,可以看到有一个叫QbarNative的类:
?
这下可以完全确认微信的扫码是在手机上完成的。