美团外卖强杀门背后的真相,你看到的是真的吗?

美团外卖”强杀门”背后的真相,你看到的是真的吗?

最近知乎上的文章 [ 如何评价美团外卖商家版强杀竞争对手的商家版 App 进程 ]非常火,初看到这个文章的时候确实笔者也是义愤填膺。但是真正分析过美团外卖的客户端应用之后整个想法便有了巨大的转变。知乎的文章属于明显的”Half Truth”,只揭露了负面的效应的地方,掩盖了最关键的部分,将美团外卖推向了公众舆论的对立面。 Talk is cheap,Show me the code。揭下来我们一起看下知乎的文章上未曾揭露的”上下文背景”,还原整个事件的真相。

代码分析先看一下被文章所诟病的强杀进程的代码部分,这部分确实可以起到杀进程的效果,这个是没有任何异议的

但是我们仔细来分析一下调用该函数的地方,我写了一个简单的Python脚本来查找所有出现了该函数调用的地方,查找反编译后的smali目录下所有用到该函数的地方,函数脚本如下图

最终查找到的结果如下图所示,可以看到仅仅在MainActivity这个文件中的一个位置对函数进行了调用

接下来分析该文件中的函数的具体调用,可以看到在onEventMainThread这个订阅函数中才会被进行调用,该订阅函数订阅了参数中的第一个函数BtMsgEvent事件

上图的Java代码不清楚,我们再仔细看一下smali代码中的处理,这里我通俗易懂的给大家解释一下这段smali代码的含义。 (1).首先获取BtMsgEvent的第一个成员变量是一个status code,判断code是否为5,如果为5继续往下走,,如果不为5的话跳到尾部判断code是否为7,这个我们后面再谈 (2).如果code为5的话再判断BtMsgEvent类的第二个成员变量是否为空,如果为空的话跳到尾部判断code是否为7,同样我们后面再谈,如果不为空的话利用showToast打印字符串信息,信息有”正在连接蓝牙设备”和”蓝牙设备连接成功”等 (3).这时候我们再看下如果code为7的处理,如果code为7那么就调用对应的函数杀死上文所说的进程

接下来我们具体看BtMsgEvent事件所产生的地方,老规矩先进行全局搜索,可以看到下面所有引用的地方,除去自身文件的定义以及MainActivity中出现的地方,那么真相就在BtService这个类中了

我们看下BtService中产生code为7的地方和对应的处理,由于Java代码这里反编译的代码不全,关键信息没有反编译出来,所以我们这里分析以smali代码为主。可以看到当蓝牙连接失败的时候,会联系发布两次消息:第一次是状态码为5的消息通知toast打印蓝牙连接失败,第二次是状态码为7的消息杀死对应应用的进程,便于重新连接打印。也只有当打印机连接失败的时候才会出现状态码为7的消息。

结论

上面的代码分析得出了一个很清晰的结论,美团外卖的负责人与开发同学的解释是真的,这个事件触发的条件是美团外卖的商家版的打印机的蓝牙连接模块连接失败的时候才会触发,并没有刻意杀死竞争对手的意思,开发同学由于省事等原因设计出了这样的一个有待商榷的方案。将一个开发的问题上升为一个公司的高度确实有些过火了。这里面的事情也很印发我们的深思,网上很多的消息很多都是利益纠葛相关的,作为用户我们不能盲目的跟风,只有我们亲眼所见的才是真的,你所听到的都不一定是真相。

你可以很有个性,但某些时候请收敛。

美团外卖强杀门背后的真相,你看到的是真的吗?

相关文章:

你感兴趣的文章:

标签云: