Android Tools

  1. draw9patch
  2. lint
  3. hierarchyviewer
  4. traceView
  5. monkey

工具存放路径:sdk/tools/

draw9patch

介绍:

所谓"*.9.png"这是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”9妹“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。

使用:

双击打开看到

androidStudio lint工具 android中tools_android

然后将需要拉伸的图片直接拖进去进行拉伸,右侧是拉伸效果

androidStudio lint工具 android中tools_Monkey_02

左侧和上方的黑线交叉的部分即可扩展区域

右侧和下方的黑线交叉的部分即内容显示区域(如做button背景图时,button上文字的显示区域)

lint

介绍:

Lint 是Android ADT 16引入的优化工具,它可以扫描你的代码,帮助发现潜在的问题,例如:
     1.文本国际化(有些文本缺少其它语言版本)例如:layout文件中编写不规范的地方,会给出提示。考虑到国际化,如果直接在xml中写汉字会提醒你把文字写到string配置文件中

     2.Layout的性能问题 

     3.无用的多余的资源 例如:项目中有哪些资源文件引入了却没有在代码中使用的话,会给提示。既包括图片资源、layout文件,也有定义的String常量和Color常量等。考虑到屏幕适配,如果有些图片只在高分辨率中放置了,会提醒你应该在中低分辨率的文件夹下也应该放置一份。 
     4.不一致的数组大小(在配置文件中)
     5.重复的图标,图片
     6.可用性问题(如没有为EditText指定 InputType)
     7. Manifest xml配置错误。

使用:

有两种使用方式:

通过命令运行:

lint 检查布局路径

然后返回检测结果

如图:

androidStudio lint工具 android中tools_Monkey_03

通过Eclipse直接运行:

选中项目右键-》AndroidTools-》Run Lint

androidStudio lint工具 android中tools_应用程序_04

运行之后显示错误:

androidStudio lint工具 android中tools_android_05

双击错误,还能跳到指定布局位置,右侧是错误详解。

hierarchyviewer

介绍:

HierarchyViewer能够可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计。(也可以查看其他App的布局)

使用:

打开hierarchyviewer显示了一个虚拟器

androidStudio lint工具 android中tools_android_06

选中一个进程的界面,点击Load View Hierarchy 这个按钮,以微信个人界面为例:

androidStudio lint工具 android中tools_应用程序_07

首先我们可以看到一个主布局,它下面的子布局是以树形的结构展示,看上去结构非常清晰.

androidStudio lint工具 android中tools_android_08

接下来,我们在看看,子布局,可以从下图看到大家最喜欢的“摇一摇”功能条目,清晰的层级结构,以及控件的名称,还有效果图的展示,我们完全可以通过它给提供出来的数据,自己也实现这个布局,就算不去模仿他人的布局,我们也可以通过这个工具去分析我们自己的工程,这样可以更好及更快的找到我们需要优化的地方,进行布局优化。

androidStudio lint工具 android中tools_Monkey_09

点击左下角的图标回到之前的操作界面界面,然后我们在选中微信进程,点击Inspet Screenshot 这个按钮.我们会看到

androidStudio lint工具 android中tools_android_10

从这个界面我们可以看到,控件的类名都已经一丝不挂了,这个界面,分为3部分,左边以树形结构显示布局类名,中间放大左边选中的区域以及,显示颜色值和坐标值,下面的工具条还能对选中区域进行所发,以及刷新频率。右边则可以通过鼠标随意移动,中间则实时刷新数据。

细心的朋友可以能会发现,左下角,3个按钮现在可以随意切换了,三个按钮功能分别是,主界面,布局分析界面,截屏分析界面。

traceView

介绍:

TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析。

      TraceView是图形化的工具,最终它会产生一个图表,用于对性能分析进行说明。

      TraceView可以跟踪到具体的Method

使用:

限制条件:

  1. 对于Android 1.5及以下的版本:不支持。
  2. 对于Android 1.5以上2.1下(含2.1)的版本:受限支持。trace文件只能生成到SD卡,且必须在程序中加入代码。
  3. 对于Android 2.2上(含2.2)的版本:全支持。可以不用SD卡,不用在程序中加代码,直接自己用DDMS就可以进程Traceview。

我先演示一下,低版本的用代码,生成trace文件,然后打开分析。

    1. package
    2.   
    3. import
    4. import
    5. import
    6. import
    7. import
    8. import
    9. import
    10. import
    11. import
    12. import
    13. import
    14.   
    15. public class MainActivity extends
    16.   
    17. @Override
    18. protected void
    19. super.onCreate(savedInstanceState);  
    20. // 开始
    21. "mytrace");   
    22.         setContentView(R.layout.activity_main);  
    23.         action();  
    24.     }  
    25. @Override
    26. protected void
    27. super.onDestroy();  
    28. // 停止
    29.         Debug.stopMethodTracing();    
    30.     }  
    31. private void
    32. for (int i = 0; i < 100000; i++) {  
    33. "模拟耗时");  
    34.         }  
    35.     }  
    36.   
    37. }



    package com.example.traceviewdemo;
    
    import android.app.Activity;
    import android.app.ActionBar;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.os.Debug;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.os.Build;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		// 开始
    		Debug.startMethodTracing("mytrace"); 
    		setContentView(R.layout.activity_main);
    		action();
    	}
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		// 停止
    		Debug.stopMethodTracing();  
    	}
    	private void action(){
    		for (int i = 0; i < 100000; i++) {
    				System.out.println("模拟耗时");
    		}
    	}
    
    }


    需要添加权限:




    1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


    执行完后,会在sd卡生成一个 mytrace.trace文件

    androidStudio lint工具 android中tools_Monkey_11


    我们把它导出,然后使用命令行执行分析该文件: traceView 文件地址



    androidStudio lint工具 android中tools_Monkey_12


    显示 下图:


    androidStudio lint工具 android中tools_android_13




    从上图我们可以看到,MainActivity的action()是最耗时的方法,占用了95%的时候。如果在真实项目中,我们首先就是找到消耗性能的方法,然后对其优化, 还有很多属性大家可以看一下


    androidStudio lint工具 android中tools_android_14




    我们在看看,高版本不用代码如何使用traceView的做法


    使用DDMS


    打开devices窗口,选择某个进程,点击右上角的start method profiling




    运行app一段时间后,再点击已变成stop method profiling的该按钮。eclipse会自动弹出debug的标签(可通过菜单File->save as保存数据)。界面同上 面。





    这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查



    monkey

    介绍:

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

    使用:


    基本语法如下:


    $ adb shell monkey [options]


    如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:


    $ adb shell monkey -p your.package.name -v 500


    命令选项参考 

    --help
    列出简单的用法。

    -v
    命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

    事件
    -s
    伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。

    --throttle
    在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。

    --pct-touch
    调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

    --pct-motion
    调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。

    --pct-trackball
    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

    --pct-nav
    调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。

    --pct-majornav
    调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

    --pct-syskeys
    调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。

    --pct-appswitch
    调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。

    --pct-anyevent
    调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。

    约束限制
    -p
    如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

    -c
    如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。

    调试
    --dbg-no-events
    设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

    --hprof
    设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。

    --ignore-crashes
    通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

    --ignore-timeouts
    通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

    --ignore-security-exceptions
    通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

    --kill-process-after-error
    通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

    --monitor-native-crashes
    监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

    --wait-dbg
    停止执行中的Monkey,直到有调试器和它相连接。