Fork me on GitHub

聊聊竞品分析这件事

关于竞品分析的一些思考。

如果你想学好一件事情,那就去和这个领域里最牛逼的人去学。

竞品分析

当我们还没成为最好的那一个的时候,了解一个技术点,最快的方法不是学,而是“抄”

先把同行业做得最好的ABC找到,可能每家都有自己的实现方案,罗列出来,改进一下,然后“拿过来”。行业老大怎么做,就照着学。

比如如果我有一个新的需求比较扎手,我会在思考之后去研究一些市面上的App,看看他们的技术实现,然后再来优化自己的实现方案。通过这个方式,我学到了很多优秀的思想和技术,比如聊天页底部弹窗以及软键盘的处理方式、emoji的适配等等。

当然,除了同行业,其他行业产品的优秀处理方案也是值得我们参考的。比如视频类App的弹幕功能,社交类App的聊天页体验,新闻类App的推送等等。用到了,不要闭门造车,多看看才能做的更好。

好处

对我们来说,经常做竞品分析有以下几个好处:

  1. 帮助解决问题

    当我们面对需求没有思路或者卡在某个点的时候,不妨参考下别人的实现来完善我们的方案。保持独立思考是好的,但偶尔的借鉴和学习也是必要的。

  2. 对比评估

    和优秀的产品对比,不断发现我们的不足,然后改变它们。为什么人家的App启动速度那么快?为什么人家的App安装包那么小?为什么人家的App一点都不卡?每个问题都是我们可以进步的地方。

  3. 学习思想和技术

    业内顶尖产品的技术团队,他们的技术素养肯定也非常高。对于我们而言,他们就是这个领域里最牛逼的一批人。向优秀的产品学习是一件很有必要的事情。

如何分析

接下来咱们聊聊我们该怎么去分析,才能拿到我们想了解的信息。

  1. 发布的开源库以及blog

    最简单的方式莫过于找一些行业大佬团队的开源库了,比如阿里的组件化路由框架ARouter,哔哩哔哩的开源弹幕库flame等等。还有什么比RTFSC更有效率的吗?

    另一个比较快捷的方式是去找他们团队的blog,或者团队成员的blog,乐于分享的大佬还是蛮多的。

  2. 使用

    通过使用,我们可以推断出一些设计和逻辑上的东西。

    拿社交App来讲,不同App在聊天页对Android软键盘高度的适配方案是不一样的。我们来对比下微信、QQ和陌陌的实现方案。

    • 微信:当我们调整软键盘高度之后,切换到表情或者更多tab的时候,弹窗的高度与软键盘高度保持了一致。而且无论软键盘高度多大,微信的tab内容都是可以完全居中显示的。
    • QQ:与微信不同,在调整软键盘高度之后,QQ保持了其他tab高度不变,不过这样在切换tab的时候会感觉到一些小小的跳动。
    • 陌陌:陌陌与微信的处理方式类似,只不过陌陌的底部弹窗内容比较丰富,tab内容区域大部分做成了可上下滑动的形式。
  3. 分析包结构

    Android安装包是.apk格式的文件,我们将后缀改为.zip,解压缩就可以看到安装包中的内容了。结构如下:

    • assets目录:用于存放需要打包到APK中的静态文件。
    • lib目录:存放应用程序依赖的native库文件,不同的CPU架构对应着不同的目录
    • res目录:res是resource的缩写,这个目录存放资源文件。
    • META-INF目录:保存应用的签名信息,签名信息可以验证APK文件的完整性。
    • AndroidManifest.xml:Android应用程序的配置文件。
    • classes.dex:传统的Java程序,首先先把Java文件编译成class文件,字节码都保存在了class文件中,Java虚拟机可以通过解释执行这些class文件。而Dalvik虚拟机是在Java虚拟机进行了优化,执行的是Dalvik字节码,而这些Dalvik字节码是由Java字节码转换而来,一般情况下,Android应用在打包时通过AndroidSDK中的dx工具将Java字节码转换为Dalvik字节码。dx工具可以对多个class文件进行合并,重组,优化,可以达到减小体积,缩短运行时间的目的。
    • resources.arsc:用来记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源。

    通过查看这些目录中的内容,我们可以进一步查看App使用的一些技术方案。

    比如在QQ的apk文件里我们可以找到QQ的emoji图标,大概推测出QQ的emoji表情是在App运行过程中,根据表情的Unicode编码来对应到资源文件中的特定表情,然后显示出来的。

  4. adb和性能分析工具

    Adb,是一种可以用来操作手机设备或模拟器的命令行工具,我们可以用它来查看已安装App的一些信息,包括进程、服务、内存等等信息。

    我们也可以借助一些分析工具来查看已安装App的信息。比如通过Monitor可以查看已安装App的页面布局,截取微信聊天页布局如下:

    我们可以看到微信聊天页的消息列表仍然用的是ListView,同时也可以看到微信聊天页的整体布局情况。

    Android Studio中还有一个比较好用的工具叫APK Analyzer,通过它我们可以:

    • 查看APK中文件的绝对和相对大小(如DEX和Android资源文件)。
    • 了解DEX文件的构成。
    • 快速查看APK中文件的最终版本(如AndroidManifest.xml)。
    • 执行两个APK的并排比较。

    当然还有很多其他比较有用的工具,这里就不一一赘述了,官方文档中基本都有介绍。

  5. 逆向工程

    逆向工程,即我们通常说的“反编译”,常用的工具有:

    • apktool

      资源文件获取,可以提取出图片文件和布局文件进行使用查看。

    • dex2jar

      将apk反编译成java源码(classes.dex转化成jar文件)。

    • jd-gui

      查看APK中classes.dex转化成出的jar文件,即源码文件。

    不过,如果需要正确的解释我们反编译得到的代码的话,还需要熟悉一下Smali语法(Dalvik的寄存器语言)。这种方案最精确,但是在操作上相对来说也更复杂。

小结

多做竞品分析,不要总盯着自己的一亩三分地。须知,三人行,必有我师。

任磊_Coder wechat
关注博主是一种态度,评论博主是一种欣赏。
坚持原创技术分享,您的支持将鼓励我继续创作!