Android Tools
- draw9patch
- lint
- hierarchyviewer
- traceView
- monkey
工具存放路径:sdk/tools/
draw9patch
介绍:
所谓”*.9.png”这是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”9妹“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。
使用:
双击打开看到

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

左侧和上方的黑线交叉的部分即可扩展区域
右侧和下方的黑线交叉的部分即内容显示区域(如做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 检查布局路径
然后返回检测结果
如图:

通过Eclipse直接运行:
选中项目右键-》AndroidTools-》Run Lint

运行之后显示错误:

双击错误,还能跳到指定布局位置,右侧是错误详解。
hierarchyviewer
介绍:
<span style="color: #2c2c2c;">HierarchyViewer能够</span>可视化的角度直观地获得<span lang="en-us">UI</span>布局设计结构和各种属性的信息,帮助我们优化布局设计。(也可以查看其他App的布局)
使用:
打开hierarchyviewer显示了一个虚拟器

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

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

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

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

从这个界面我们可以看到,控件的类名都已经一丝不挂了,这个界面,分为3部分,左边以树形结构显示布局类名,中间放大左边选中的区域以及,显示颜色值和坐标值,下面的工具条还能对选中区域进行所发,以及刷新频率。右边则可以通过鼠标随意移动,中间则实时刷新数据。
细心的朋友可以能会发现,左下角,3个按钮现在可以随意切换了,三个按钮功能分别是,主界面,布局分析界面,截屏分析界面。
traceView
介绍:
TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析。
TraceView是图形化的工具,最终它会产生一个图表,用于对性能分析进行说明。
TraceView可以跟踪到具体的Method
使用:
限制条件:
- 对于Android 1.5及以下的版本:不支持。
- 对于Android 1.5以上2.1下(含2.1)的版本:受限支持。trace文件只能生成到SD卡,且必须在程序中加入代码。
- 对于Android 2.2上(含2.2)的版本:全支持。可以不用SD卡,不用在程序中加代码,直接自己用DDMS就可以进程Traceview。
<div style="color: #362e2b;">
我先演示一下,低版本的用代码,生成trace文件,然后打开分析。
</div>
<div style="color: #362e2b;">
<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/cym492224103/article/details/39343907#)[copy](http://blog.csdn.net/cym492224103/article/details/39343907#)[print](http://blog.csdn.net/cym492224103/article/details/39343907#)[?](http://blog.csdn.net/cym492224103/article/details/39343907#)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">package</span> com.example.traceviewdemo; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.Activity; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.ActionBar; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.Fragment; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Bundle; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Debug; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.LayoutInflater; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.Menu; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.MenuItem; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.View; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.ViewGroup; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Build; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">public</span> <span class="keyword" style="font-weight: bold; color: blue;">class</span> MainActivity <span class="keyword" style="font-weight: bold; color: blue;">extends</span> Activity { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">protected</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> onCreate(Bundle savedInstanceState) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">super</span>.onCreate(savedInstanceState); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 开始</span> </span>
- <span style="color: black;"> Debug.startMethodTracing(<span class="string" style="color: red;">“mytrace”</span>); </span>
- <span style="color: black;"> setContentView(R.layout.activity_main); </span>
- <span style="color: black;"> action(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">protected</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> onDestroy() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">super</span>.onDestroy(); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 停止</span> </span>
- <span style="color: black;"> Debug.stopMethodTracing(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">private</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> action(){ </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">for</span> (<span class="keyword" style="font-weight: bold; color: blue;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < <span class="number" style="color: #c00000;">100000</span>; i++) { </span>
- <span style="color: black;"> System.out.println(<span class="string" style="color: red;">“模拟耗时”</span>); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;">} </span>
</div>
需要添加权限:
</div>
<div style="color: #362e2b;">
<div class="dp-highlighter bg_html">
<div class="bar">
<div class="tools" style="color: silver;">
**[html]** [view plain](http://blog.csdn.net/cym492224103/article/details/39343907#)[copy](http://blog.csdn.net/cym492224103/article/details/39343907#)[print](http://blog.csdn.net/cym492224103/article/details/39343907#)[?](http://blog.csdn.net/cym492224103/article/details/39343907#)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="tag" style="font-weight: bold; color: blue;"><</span><span class="tag-name" style="font-weight: bold; color: blue;">uses-permission</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">“android.permission.WRITE_EXTERNAL_STORAGE”</span> <span class="tag" style="font-weight: bold; color: blue;">/></span> </span>
</div>
执行完后,会在sd卡生成一个mytrace.trace文件
</div>
<div style="color: #362e2b;">

</div>
<div style="color: #362e2b;">
<span style="color: #4b4b4b;">我们把它导出,然后使用命令行执行分析该文件:</span><span style="color: #4b4b4b;">traceView 文件地址</span>
</div>
<div>

</div>
<div>
显示下图:
</div>
<div>

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

</div>
<div style="color: #4b4b4b;">
</div>
<div style="color: #4b4b4b;">
我们在看看,高版本不用代码如何使用traceView的做法
</div>
<div style="color: #362e2b;">
使用DDMS
</div>
<div style="color: #362e2b;">
打开devices窗口,选择某个进程,点击右上角的start method profiling
</div>
<blockquote style="color: #362e2b;">
<div>
运行app一段时间后,再点击已变成stop method profiling的该按钮。eclipse会自动弹出debug的标签(可通过菜单File->save as保存数据)。界面同上 面。
</div>
<div>
这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查
</div>
</blockquote>
monkey
介绍:
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
使用:
<blockquote style="color: #362e2b;">
基本语法如下:
<span class="katex math inline">adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
</span> adb shell monkey -p your.package.name -v 500
## 命令选项参考 <wbr />
💬 评论