zoukankan      html  css  js  c++  java
  • 转:国内Top500Android应用分析报告

    转自:https://mp.weixin.qq.com/s?__biz=MzA5OTMxMjQzMw==&mid=2648112527&idx=1&sn=b23c1b5f3e32e343ad96d705bd4d63ff&scene=1&srcid=0711SVtLTxYXurfDvMqW2LJi&key=77421cf58af4a6539e507304f3ba7258db54cc7d09d0da0d4d384e54aa5536776c95d86cfb4e18a26e41586ef17e83bd&ascene=0&uin=Mjc3OTU3Nzk1&devicetype=iMac+MacBookPro10%2C1+OSX+OSX+10.10.5+build%2814F1808%29&version=11020201&pass_ticket=ITDgY8jmrXUfwFXFF5dIXjjUGT%2Bjosrkf8JctrkEiM3n%2F5PmuQjtbzHuMvPqa8Qq

     

    国内Top500Android应用分析报告

    2016-07-11 贾吉鑫 寒江不钓

    背景

    笔者目前在开发的应用在线上有不少OOM的问题,经过一番优化后,OOM降了一个量级,但由于产品中Gif是一特色,内存占用优化空间比较有限,想要减少OOM最简单的办法可能就是开启largeHeap。Google官方是不推荐使用largeheap的,更大的内存意味着更长的垃圾回收时间,所以我就想看看国内的这些应用是否有打开largeheap。用AS的APK Analyzer看了下微信和QQ空间,发现大家都打开了,然后我就安心了。

    后来,我们打算把Jackson库换掉,太占用方法数了,可选择的有Gson和Fastjson。同样去看看国内的App都在用什么吧,本以为Fastjson号称速度最快,国内又是主场,应该用的人更多一些,但在手动分析了几个APP后,发现大家都在用Gson,Fastjson反而没见到几个。

    再后来,有一天晚上,好像看了篇TK教主的文章就来了灵感,觉得可以批量分析一下国内主流的APP,看看大家都在用什么库,教父整天说据我所知,国内用哪些团队在用rxjava,我可以来个更全面准确的分析,顺便可以看看我的Nuwa是否有人在用?

    分析

    豌豆荚正好那几天被收购了,那就拿他开刀吧,脚本下载了排行榜(周下载量)Top500的应用,使用Android SDK自带的appt和dexdump,分析Manifest文件和dex文件,拿到一些APK基本信息和dex中的Class Descriptor。

    有些有插件化能力的或者没有用MultiDex的应用,可能dex不在常规位置,比如淘宝把dex伪装成.so文件,所以需要查看文件的magic number来找到dex文件。

    涉及到数据的排序和整理,所以使用了mysql数据库,Class Descriptor通过package分段聚合,package最多保留四段,比如Lcom/jiajixin/nuwa/utils/dex/,会有com/*com/jiajixin/com/jiajixin/nuwa/com/jiajixin/nuwa/utils/入库,然后group by后根据count倒序输出,人工匹配对应库名。

    数据

    废话不多说,直接展示数据。

    APK基本信息

    开源项目

    Network:

    OkttpVolleyandroid-async-http
    135 105 58

    ImagecLoader:

    Universal Image LoaderFrescoGlidePicasso
    130 88 54 38

    Dependency Injection:

    ButterKnifeDaggerAndroid AnnotationsRoboguice
    63 16 11 5

    Json:

    GsonFastjsonJackson
    227 87 26

    Protocol Buffers:

    WireProtobuf
    72 67

    DataBase:

    GreenDaoOrmLite
    41 27

    Event:

    EventBusOtto
    132 12

    HotFix:

    AndfixDexposedNuwa
    34 24 7

    Plugin:

    DroidpluginDynamic-Load-ApkDynamicAPKPluginmgr
    8 5 7 1

    PullToRefresh:

    Android-PullToRefreshandroid-Ultra-Pull-To-Refresh
    92 27
    NameUsers
    NineOldAndroids 150
    zxing 121
    okio 119
    thrift 97
    bolts 76
    android-gif-drawable 72
    spdy 63
    photoview 62
    iflytek 61
    rxjava 50
    pinyin4j 46
    viewpagerindicator 46
    jsr305 42
    ijkplayer 41
    DanmakuFlameMaster 36
    retrofit 26
    DragSortListView 23
    exoplayer 23
    MPAndroidChart 23
    rebound 22
    jsoup 21
    leakcanary 21
    android-gpuimage 20
    daimajia 20
    xutils 19
    Android-wheel 18
    roundedimageview 18
    PagerSlidingTabStrip 16
    SmoothProgressBar 16
    stetho 16
    aspectj 15
    bouncycastle 14
    soloader 14
    tagsoup 14
    vitamio 14
    dom4j 13
    afinal 12
    cropper 12
    Android-Easing 11
    react-native 11
    slidingmenu 11
    zip4j 11
    disklrucache 10
    swipebacklayout 10
    java_websocket 9
    realm 4

    这些产品在使用rxjava:

    这些产品在使用react-native:

    上面这两张图献给教父。

    第三方服务

  • 相关阅读:
    测试用例编写(功能测试框架)
    OKR与KPI管理的区别与联系
    手机测试常见的BUG解析
    软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】
    KPI、KPA、OKR三者的区别
    swagger api 文档框架
    Jmeter + Ant + Jenkins 接口/性能测试,持续集成环境搭建
    重建词汇精神家园
    记忆的本质
    attention机制七搞八搞
  • 原文地址:https://www.cnblogs.com/jhj117/p/5692717.html
Copyright © 2011-2022 走看看