背景

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

minSdkVersion

largeHeap

process count
method count

开源项目

Network:

Okttp Volley android-async-http
135 105 58

ImagecLoader:

Universal Image Loader Fresco Glide Picasso
130 88 54 38

Dependency Injection:

ButterKnife Dagger Android Annotations Roboguice
63 16 11 5

Json:

Gson Fastjson Jackson
227 87 26

Protocol Buffers:

Wire Protobuf
72 67

DataBase:

GreenDao OrmLite
41 27

Event:

EventBus Otto
132 12

HotFix:

Andfix Dexposed Nuwa
34 24 7

Plugin:

Droidplugin Dynamic-Load-Apk DynamicAPK Pluginmgr
8 5 7 1 1

PullToRefresh:

Android-PullToRefresh android-Ultra-Pull-To-Refresh
92 27
Name Users
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:

上面这两张图献给教父。

第三方服务



文章目錄
  1. 1. 背景
  2. 2. 分析
  3. 3. 数据
    1. 3.1. APK基本信息
    2. 3.2. 开源项目
    3. 3.3. 第三方服务