常见Android应用调用的Android API排行榜

作者按

做为移动应用,调用系统API是必不可少的操作。
那么,在Android系统上,哪些API最受欢迎呢?

于是,我随便找了个应用的榜单,对其中的top应用做了一下统计。出于对知识产权的保护,对于所有加密的模块均未涉及。这个报告只是为了得出一个相对的排名,并不关心精确的数目。

研究方法:通过dexdump去反汇编应用,统计invoke-static, invoke-direct, invoke-virtual, invoke-super中被引用的Android API的数目。

Top 10应用Android API调用排行

360安全卫士

10大API调用:
看来360安全卫士用的最多的是Binder IPC,用到了大量的Parcel。在Parcel中对于整数类型的应用最多,看来效率不错。
另外,非常重视字符串判空。

   1 void android.os.Parcel.recycle() : 2580
   2 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 1448
   3 android.os.Parcel android.os.Parcel.obtain() : 1290
   4 void android.os.Parcel.writeInt(int) : 1213
   5 int android.os.Parcel.readInt() : 1008
   6 void android.os.Parcel.enforceInterface(java.lang.String) : 878
   7 void android.os.Parcel.writeNoException() : 872
   8 void android.os.Parcel.writeInterfaceToken(java.lang.String) : 648
   9 void android.os.Parcel.writeString(java.lang.String) : 644
  10 void android.os.Parcel.readException() : 642

支付宝

支付宝的特色是对字符串相等的判断用得多,字符串判空更多。看来是有大量对于字符串做操作的业务逻辑。
另外,支付宝喜欢用Log.v打日志。

top 10 API调用

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 8973
   2 boolean android.text.TextUtils.equals(java.lang.CharSequence,java.lang.CharSequence) : 2531
   3 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 1596
   4 android.view.View android.view.View.findViewById(int) : 1559
   5 void android.util.SparseIntArray.put(int,int) : 1363
   6 java.lang.String android.os.Bundle.getString(java.lang.String) : 1352
   7 int android.util.Log.v(java.lang.String,java.lang.String) : 950
   8 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 944
   9 android.content.res.Resources android.content.Context.getResources() : 942
  10 void android.view.View.setVisibility(int) : 860

酷狗音乐

top 10 API调用

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 5883
   2 android.view.View android.view.View.findViewById(int) : 3243
   3 void android.os.Parcel.recycle() : 3124
   4 void android.view.View.setVisibility(int) : 3001
   5 void android.widget.TextView.setText(java.lang.CharSequence) : 1966
   6 android.os.Parcel android.os.Parcel.obtain() : 1562
   7 void android.os.Parcel.writeInt(int) : 1426
   8 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 1384
   9 int android.os.Parcel.readInt() : 1315
  10 void android.os.Parcel.writeString(java.lang.String) : 1151

新浪微博

top 10 API调用

    1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 6516
    2 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 1786
    3 void android.widget.TextView.setText(java.lang.CharSequence) : 1517
    4 android.view.View android.view.View.findViewById(int) : 1394
    5 void android.widget.ImageView.setVisibility(int) : 1325
    6 void android.widget.TextView.setTextColor(int) : 1164
    7 void android.widget.TextView.setVisibility(int) : 1146
    8 int android.content.res.Resources.getDimensionPixelSize(int) : 1065
    9 android.content.res.Resources android.content.Context.getResources() : 962
   10 java.lang.String android.content.res.Resources.getString(int) : 845

微信

微信的特色是绘图API用得多。cubic和line的调用都有上万处。

top 10 API调用

   1 void android.graphics.Path.cubicTo(float,float,float,float,float,float) : 13642
   2 void android.graphics.Path.lineTo(float,float) : 9218
   3 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 3554
   4 android.view.View android.view.View.findViewById(int) : 3522
   5 void android.graphics.Path.moveTo(float,float) : 2829
   6 void android.graphics.Path.close() : 2752
   7 void android.widget.TextView.setText(java.lang.CharSequence) : 2510
   8 void android.graphics.Canvas.restore() : 2341
   9 void android.widget.TextView.setVisibility(int) : 2308
  10 int android.graphics.Canvas.save() : 2257

QQ

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 11211
   2 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 4365
   3 android.view.View android.view.View.findViewById(int) : 4171
   4 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 3915
   5 void android.widget.TextView.setText(java.lang.CharSequence) : 3577
   6 java.lang.String android.os.Bundle.getString(java.lang.String) : 3095
   7 android.content.Intent android.content.Intent.putExtra(java.lang.String,int) : 2666
   8 void android.widget.TextView.setVisibility(int) : 2612
   9 void android.view.View.setVisibility(int) : 2331
  10 void android.os.Bundle.putInt(java.lang.String,int) : 2301

UC浏览器

UC浏览器的特色是Layout用得多。

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 1259
   2 void android.widget.LinearLayout$LayoutParams.<init>(int,int) : 1128
   3 void android.widget.LinearLayout.addView(android.view.View,android.view.ViewGroup$LayoutParams) : 646
   4 void android.widget.FrameLayout$LayoutParams.<init>(int,int) : 538
   5 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 529
   6 void android.widget.LinearLayout.<init>(android.content.Context) : 522
   7 android.os.Message android.os.Message.obtain() : 430
   8 void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable) : 410
   9 android.content.res.Resources android.content.Context.getResources() : 401
  10 float android.content.res.Resources.getDimension(int) : 369

优酷

    1 android.view.View android.view.View.findViewById(int) : 5991
    2 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 4599
    3 void android.widget.TextView.setText(java.lang.CharSequence) : 3488
    4 void android.view.View.setVisibility(int) : 2041
    5 void android.widget.TextView.setVisibility(int) : 1443
    6 void android.widget.ImageView.setVisibility(int) : 1441
    7 android.content.res.Resources android.content.Context.getResources() : 1351
    8 android.view.LayoutInflater android.view.LayoutInflater.from(android.content.Context) : 873
    9 void android.widget.TextView.setTextColor(int) : 860
   10 void android.view.View.setOnClickListener(android.view.View$OnClickListener) : 830

淘宝

与360安全卫士在Parcel中Int用的多相比,淘宝更喜欢用String.

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 2480
   2 void android.os.Parcel.recycle() : 1452
   3 android.os.Parcel android.os.Parcel.obtain() : 724
   4 void android.os.Parcel.writeString(java.lang.String) : 675
   5 java.lang.String android.os.Parcel.readString() : 631
   6 void android.os.Parcel.writeInt(int) : 548
   7 int android.os.Parcel.readInt() : 454
   8 void android.os.Parcel.enforceInterface(java.lang.String) : 367
   9 void android.os.Parcel.writeInterfaceToken(java.lang.String) : 362
  10 void android.os.Parcel.writeNoException() : 352

wifi万能钥匙

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 903
   2 android.view.View android.view.View.findViewById(int) : 420
   3 void android.widget.TextView.setText(java.lang.CharSequence) : 247
   4 java.lang.Object android.content.Context.getSystemService(java.lang.String) : 193
   5 java.lang.String android.content.Context.getPackageName() : 165
   6 android.content.res.Resources android.content.Context.getResources() : 143
   7 void android.view.View.setVisibility(int) : 142
   8 java.lang.String android.content.Context.getString(int) : 140
   9 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 125
  10 void android.content.Intent.<init>(java.lang.String) : 121

top 10 合计

Top我们总结一下:

  • TextUtils.isEmpty夺冠毫无疑问,在各应用中都名列前茅。
  • View.findViewById名列榜眼,说明调用Android API最主要的操作还是操作控件
  • TextView.setText探花,说明用得最多的控件还是最简单的TextView。TextView的setVisibility摘得第十名
  • 微信靠一己之力把两个绘图API送上榜,但是其它应用使用得不多
  • 剩下的位置全被IPC工具Bundle, Intent, Parcel占据。说明了IPC对于Android应用的重要性
    1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 44517
    2 android.view.View android.view.View.findViewById(int) : 20698
    3 void android.widget.TextView.setText(java.lang.CharSequence) : 14410
    4 void android.graphics.Path.cubicTo(float,float,float,float,float,float) : 13675
    5 void android.os.Parcel.recycle() : 11942
    6 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 11455
    7 void android.view.View.setVisibility(int) : 11233
    8 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 10585
    9 void android.graphics.Path.lineTo(float,float) : 9573
   10 void android.widget.TextView.setVisibility(int) : 9045

爱奇艺

   1 android.view.View android.view.View.findViewById(int) : 5200
   2 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 4773
   3 void android.widget.TextView.setText(java.lang.CharSequence) : 3134
   4 void android.widget.TextView.setVisibility(int) : 2239
   5 void android.view.View.setVisibility(int) : 1908
   6 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 1239
   7 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 1212
   8 void android.widget.ImageView.setVisibility(int) : 1188
   9 android.content.res.Resources android.content.Context.getResources() : 998
  10 java.lang.String android.content.Context.getString(int) : 928

高德地图

高德团队是setOnClickListener的爱好者,有981处要设监听。

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 5738
   2 android.view.View android.view.View.findViewById(int) : 5531
   3 void android.widget.TextView.setText(java.lang.CharSequence) : 2426
   4 void android.view.View.setVisibility(int) : 1996
   5 java.lang.String android.content.res.Resources.getString(int) : 1407
   6 void android.widget.TextView.setVisibility(int) : 1277
   7 java.lang.String android.content.Context.getString(int) : 1052
   8 void android.view.View.setOnClickListener(android.view.View$OnClickListener) : 981
   9 android.content.res.Resources android.content.Context.getResources() : 883
  10 java.lang.String android.app.Application.getString(int) : 813

360浏览器

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 1874
   2 android.content.res.Resources android.content.Context.getResources() : 1056
   3 int android.content.res.Resources.getColor(int) : 985
   4 android.view.View android.view.View.findViewById(int) : 738
   5 void android.widget.TextView.setTextColor(int) : 662
   6 void android.os.Parcel.recycle() : 619
   7 void android.widget.TextView.setText(java.lang.CharSequence) : 506
   8 void android.view.View.setVisibility(int) : 406
   9 void android.widget.ImageView.setImageResource(int) : 403
  10 java.lang.String android.content.res.Resources.getString(int) : 399

阿里星球

阿里星球喜欢打log,这在前面的应用中还没有出现过。

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 2743
   2 void android.os.Parcel.recycle() : 652
   3 int android.util.Log.d(java.lang.String,java.lang.String) : 489
   4 void android.os.Parcel.writeString(java.lang.String) : 456
   5 java.lang.Object android.content.Context.getSystemService(java.lang.String) : 440
   6 int android.util.Log.e(java.lang.String,java.lang.String) : 439
   7 java.lang.String android.os.Parcel.readString() : 428
   8 java.lang.String android.content.Context.getPackageName() : 353
   9 void android.os.Parcel.writeInt(int) : 346
  10 android.os.Parcel android.os.Parcel.obtain() : 327

今日头条

今日头条看来对于颜色的体验上做得非常细致,getColor和setTextColor竟然榜上有名。

   1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 2140
   2 android.view.View android.view.View.findViewById(int) : 1750
   3 void android.widget.TextView.setText(java.lang.CharSequence) : 977
   4 int android.content.res.Resources.getColor(int) : 920
   5 android.content.res.Resources android.content.Context.getResources() : 732
   6 void android.widget.TextView.setTextColor(int) : 722
   7 void android.view.View.setVisibility(int) : 589
   8 java.lang.String android.content.Context.getPackageName() : 581
   9 void android.widget.TextView.setVisibility(int) : 572
  10 java.lang.String android.os.Bundle.getString(java.lang.String) : 571

讯飞输入法

   1 void android.os.Parcel.recycle() : 1946
   2 java.lang.String android.content.Context.getString(int) : 1336
   3 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 997
   4 android.os.Parcel android.os.Parcel.obtain() : 972
   5 void android.os.Parcel.writeInt(int) : 590
   6 android.view.View android.view.View.findViewById(int) : 546
   7 android.content.res.Resources android.content.Context.getResources() : 540
   8 int android.os.Parcel.readInt() : 510
   9 void android.os.Parcel.writeString(java.lang.String) : 507
  10 void android.os.Parcel.enforceInterface(java.lang.String) : 488

top 30汇总

    1 boolean android.text.TextUtils.isEmpty(java.lang.CharSequence) : 88868
    2 android.view.View android.view.View.findViewById(int) : 53920
    3 void android.widget.TextView.setText(java.lang.CharSequence) : 37610
    4 void android.view.View.setVisibility(int) : 26699
    5 void android.os.Parcel.recycle() : 21927
    6 void android.widget.TextView.setVisibility(int) : 21201
    7 void android.os.Bundle.putString(java.lang.String,java.lang.String) : 20039
    8 android.content.Intent android.content.Intent.putExtra(java.lang.String,java.lang.String) : 19306
    9 android.content.res.Resources android.content.Context.getResources() : 18536
   10 java.lang.String android.content.Context.getString(int) : 14956

从以上结果我们可以推断:

  1. Java语言对于字符串判空的功能不好用,导致TextUtils.isEmpty被非常频繁地调用。是否可以通过虚拟机层的修改,通过指令来实现这个功能?
  2. xml布局的大量使用,使View.findViewById(int)被大量使用
  3. TextView控制是最常用的控件,TextView的方法有两个上榜
  4. IPC调用在系统API调用中占有很大比例
  5. 最常用的资源是字符串
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容