转:https://mp.weixin.qq.com/s?__biz=MzA5OTMxMjQzMw==&mid=2648112527&idx=1&sn=b23c1b5f3e32e343ad96d705bd4d63ff&scene=1&srcid=0711SVtLTxYXurfDvMqW2LJi&uin=MjQwMDgwNDM1&key=77421cf58af4a6536ca031a71c4f7bb7f13f6ea3c8eb83bf829c172d7cd7f7f72a832c33e87a7c45d7273b914b351fdf&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.11.5+build(15F34)&version=11020201&lang=zh_CN&pass_ticket=%2BTp9qbxmROPbRlT9zfp7uAY%2FVToJEmd09DOFY3Fc49Y%3D
背景
笔者目前在开发的应用在线上有不少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:
|
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:
DataBase:
Event:
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:

这些产品在使用react-native:

上面这两张图献给教父。
第三方服务



相关文章:
-
2021-05-27
-
2021-08-27
-
2021-12-04
-
2021-04-15
-
2021-11-15
-
2021-09-11
-
2021-05-08