你的位置:首页 > 操作系统

[操作系统]国内Top500Android应用分析报告


转载自:寒江不钓

背景

笔者目前在开发的应用在线上有不少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
13510558

ImagecLoader:

Universal Image LoaderFrescoGlidePicasso
130885438

Dependency Injection:

ButterKnifeDaggerAndroid AnnotationsRoboguice
6316115

Json:

GsonFastjsonJackson
2278726

Protocol Buffers:

WireProtobuf
7267

DataBase:

GreenDaoOrmLite
4127

Event:

EventBusOtto
13212

HotFix:

AndfixDexposedNuwa
34247

Plugin:

DroidpluginDynamic-Load-ApkDynamicAPKPluginmgr
8571

PullToRefresh:

Android-PullToRefreshandroid-Ultra-Pull-To-Refresh
9227
NameUsers
NineOldAndroids150
zxing121
okio119
thrift97
bolts76
android-gif-drawable72
spdy63
photoview62
iflytek61
rxjava50
pinyin4j46
viewpagerindicator46
jsr30542
ijkplayer41
DanmakuFlameMaster36
retrofit26
DragSortListView23
exoplayer23
MPAndroidChart23
rebound22
jsoup21
leakcanary21
android-gpuimage20
daimajia20
xutils19
Android-wheel18
roundedimageview18
PagerSlidingTabStrip16
SmoothProgressBar16
stetho16
aspectj15
bouncycastle14
soloader14
tagsoup14
vitamio14
dom4j13
afinal12
cropper12
Android-Easing11
react-native11
slidingmenu11
zip4j11
disklrucache10
swipebacklayout10
java_websocket9
realm4

这些产品在使用rxjava:

这些产品在使用react-native:

上面这两张图献给教父。

第三方服务