8

聊聊竞品分析这件事

 3 years ago
source link: http://www.androidchina.net/8434.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
聊聊竞品分析这件事 – Android开发中文站

a2b4a837ly1fn8cmsol0lj21kw11sb29.jpg

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

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

先把同行业做得最好的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的页面布局,截取微信聊天页布局如下:a2b4a837ly1fn8cmyq1x4j219o124k27.jpg

    我们可以看到微信聊天页的消息列表仍然用的是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的寄存器语言)。这种方案最精确,但是在操作上相对来说也更复杂。

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

转载请注明:Android开发中文站 » 聊聊竞品分析这件事


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK