美文网首页
常见Android应用调用的Android API排行榜

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

作者: Jtag特工 | 来源:发表于2017-03-18 17:54 被阅读1606次

    作者按

    做为移动应用,调用系统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. 最常用的资源是字符串

    相关文章

      网友评论

          本文标题:常见Android应用调用的Android API排行榜

          本文链接:https://www.haomeiwen.com/subject/judjbttx.html