背景

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


Android 应用分析 安卓app分析_json


Android 应用分析 安卓app分析_android_02


Android 应用分析 安卓app分析_Android_03


Android 应用分析 安卓app分析_json_04

开源项目

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

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:


Android 应用分析 安卓app分析_Android_05

这些产品在使用react-native:


Android 应用分析 安卓app分析_Android_06

上面这两张图献给教父。

第三方服务


Android 应用分析 安卓app分析_json_07


Android 应用分析 安卓app分析_Android_08


Android 应用分析 安卓app分析_Android_09