鲸落

Menu

调试分析TIM,和QQ的差别在哪里?

前不久我们调试了QQ,今天我们来调试一下Tim,顺便和QQ对比一下,看看他们之间有什么不同。

准备工作就先不说了,想了解的可以点击去看之前的那篇文章:用Android Studio动态调试手机QQ


开始分析

首先从进程上来看:

Tim和QQ一样,有个MSF进程,该进程运行着MSF服务,用于与服务器通信和退出界面时接收消息。

再从界面上来看,Tim多了一个文档在线编辑功能,并且提供了一个10G的云空间,这个功能和有道云笔记差不多。

另外还有办公界面,里面有设置日程的功能

不过这个功能我觉得有点多余,大部分人是用不到的吧,况且现在大部分系统的日历是自带这个功能的。


从内存占用来看:

QQ安装包45M

TIM安装包51M,比QQ还要大。

运行时内存占用(都登录的同一个QQ,登录完没有做其他操作):

QQ占用108MB:

TIM占用103MB:

差距不大,可以看出除了名称不同,运行的服务基本相同。


从调试层来看:

和之前调试QQ一样,我们分析一下Tim发送消息的逻辑。

Trace跟踪:

调用的是这个方法,好像有点眼熟,看看之前我们分析QQ的:

居然和QQ的一模一样?!

我们在这条方法下断点看看调用栈信息:

onClick是我们点击发送按钮,最后调用的是

.method public static a(Lcom/tencent/mobileqq/app/QQAppInterface;Lcom/tencent/mobileqq/activity/aio/SessionInfo;Ljava/lang/String;IZBBSILjava/util/ArrayList;Lcom/tencent/mobileqq/activity/ChatActivityFacade$SendMsgParams;)J

和我们之前分析QQ流程基本一样。

我们再看看接收消息的流程:

先输出Trace:

再随便找一个关键地方下断点看调用栈:

然后从头单步跟踪一遍,基本就能大概理清接收到消息时处理的流程:

1.MainService上运行着MSF服务器接收和发送消息

2.MSFServlet 收到封包,调用Handler处理

3.Handler分类不同消息发送给不同的MessageProcessor解码封包

调用来自:

MessageHandler

.method public a(Lcom/tencent/qphone/base/remote/ToServiceMsg;Lcom/tencent/qphone/base/remote/FromServiceMsg;Ljava/lang/Object;)V

4.MessageProcessor  把解码后的封包对象化,发给MessageHandlerUtils,最后交给QQMessageFacade

5.QQMessageFacade执行数据库更新(setChanged()、notifyObservers())

6.弹出通知、Activity内显示消息。

Tim的消息处理机制和QQ是一模一样的。


我们接下来对比一下QQ和Tim的入口类代码:

QQ的常量声明:

初始化:

Tim的:

初始化:

可以看出结构基本一致,只是Tim的一些方法名和字段被混淆了。


我们再使用分析工具对比一下两个项目的不同:

有4968个完全相同的文件!其他差异的文件中应该还有大量只是因为反编译出的行号不同而有的差异。

再来看看项目结构(左边是QQ,右边是TIM):

几乎完全相同!


再来看看几个细节:

AppRuntime.smali中

左边是QQ,右边是Tim,明显不同的地方就两处。

一处是截图这里,多了一个参数。另外一个在这个方法的下面,多重载了一个方法。


BaseActivity:

除了反编译出来的行号不同,其他完全一样。

所以我们可以推测出:TIM是QQ项目源码修改而来的。

这样的话我们要把QQ机器人适配Tim就方便多了,在Xposed入口包名过滤加上Tim就行了。

测试:

聊天回复功能正常,其他的部分功能会造成Tim闪退,报错是没有找到方法和空对象,大概是因为Tim混淆了的原因。

有些方法和字段QQ里面没有混淆,而在Tim里应该被混淆成了“a”或者其他字符。

解决方式是可以考虑加一个开关,切换QQ或者Tim模式,内部逻辑切换,或者调用方法前判断一下当前进程是QQ还是Tim,来调用不同的方法。又或者可以找出两者之间通用的方法来替代,这样更方便。


结语:

TIM应该就是QQ源码的基础上修改而成的项目。

删掉了娱乐功能,界面商务化设计,更适合办公人士使用。

但我觉得不如原版QQ好用,毕竟用QQ就是为了聊天同时的娱乐互动(我年费超级会员可不是白开的啊),用删掉娱乐功能的TIM还不如用微信。办公的话用有道云笔记就够了。这是我个人的观点,大家觉得呢?欢迎在下方留言说出你的看法。

(SpQQ机器人现已支持TIM,即将发布)

Sp软件服务 · 2017
— 于 共写了1973个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注