admin 发表于 2016-12-27 18:35:24

国内Top500Android应用分析报告

摘要:笔者目前在开发的应用在线上有不少OOM的问题,经过一番优化后,OOM降了一个量级,但由于产品中Gif是一特色,内存占用优化空间比较有限,想要减少OOM最简单的办法可能就是开启largeHeap。
https://dn-sdkcnssl.qbox.me/article/SkQ9F24WyidCvv3JJp6G.png



背景笔者目前在开发的应用在线上有不少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基本信息https://dn-sdkcnssl.qbox.me/editor/xuHXKiCeazk5JMe94CTX.jpghttps://dn-sdkcnssl.qbox.me/editor/RcVpeephT3jiZSEEIbDI.jpghttps://dn-sdkcnssl.qbox.me/editor/SnI-Cqk22O4gNM3g6qXu.jpghttps://dn-sdkcnssl.qbox.me/editor/sxdlMj1dDaxd9_awpHhk.jpg开源项目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:https://dn-sdkcnssl.qbox.me/editor/JlQr-MP_1gAuCJ_ZRl0a.jpg
这些产品在使用react-native:https://dn-sdkcnssl.qbox.me/editor/5_-RnflM9_v3QNGE5ZxD.jpg
上面这两张图献给教父。第三方服务https://dn-sdkcnssl.qbox.me/editor/d_Bd6xoIYe8FlYgeji-y.jpghttps://dn-sdkcnssl.qbox.me/editor/KQ1E3bmzLkdtxDhxZbuh.jpghttps://dn-sdkcnssl.qbox.me/editor/eFBWbvjFu_Tq0s_UNuFC.png








页: [1]
查看完整版本: 国内Top500Android应用分析报告