程序开发有时候非常依赖使用的开发工具,好的完备的开发工具可以让开发人员的工作效率有大幅度的提高。开发Android也是如此,大家可能都离不开Eclipse或Android Studio这些工具,但他们其实是集成开发环境(Integrated development environment, IDE),把很多工具集成在一个里面,配合可视化界面和键盘快捷键,方面寻找和使用。
不过有时候工具集成太多了,往往让人感到迷惑容易遗忘某个工具的存在。本文就谈谈Android开发和Debug时可使用的一些工具,这些工具都可以在安装了Android SDK的Eclipse或Android Studio找到相应的菜单和按钮来打开使用。但考虑到IDE很多时候打开速度实在太慢了,还是考虑直接使用指令在终端单独开打它们吧。
如果安装了Android Studio,这些工具可以在其安装包中找到,比如在Mac下它们就保存在/Applications/Android Studio.app/sdk/tools
路径下。如果是使用Eclipse,那么就需要手动下载Stand-alone Android SDK,解压之后也能在其下的tools文件夹里找到。
android
这个工具会叫android
也说明了它地位应该是最高的,的确它的功能包括了管理SDK(Software development kit)和AVD(Android Virtual Device),以及创建和更新开发使用的Project。通过android -h
就能看到其基本使用方式。
Usage:
android [global options] action [action options]
Global options:
-h --help : Help on a specific command.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-s --silent : Silent mode, shows errors only.
Valid
actions
are
composed
of a verb
and an
optional
direct
object:
- sdk : Displays the SDK Manager window.
- avd : Displays the AVD Manager window.
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- list device : Lists existing devices.
- list sdk : Lists remote SDK repository.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
- update avd : Updates an Android Virtual Device to match the folders
of a new SDK.
- create project : Creates a new Android project.
- update project : Updates an Android project (must already have an
AndroidManifest.xml).
- create test-project : Creates a new Android project for a test package.
- update test-project : Updates the Android project for a test package (must
already have an AndroidManifest.xml).
- create lib-project : Creates a new Android library project.
- update lib-project : Updates an Android library project (must already have
an AndroidManifest.xml).
- create uitest-project: Creates a new UI test project.
- update adb : Updates adb to support the USB devices declared in the
SDK add-ons.
- update sdk : Updates the SDK by suggesting new platforms to install
if available.
android sdk
全新的SDK包里是没有编译工具的,Android程序员都知道Android有很多个版本,开发时要针对版本进行设计和编程。android sdk
指令就可以开打一个可视化的管理窗口,让用户可以在上边选择下载需要的Android版本以便可以使用其上的API。还可以下载相应API的源码方便学习。
(可以不加sdk
参数,直接使用android
指令也是打开SDK管理窗口。)
在这个界面上也可以选择将SDK工具,也就是本文中所要提到的工具,更新到最新的版本。如果不小心更新到了现在开发还不兼容的SDK版本,在这里就无法降版本了,只能到晚上重新下载旧的版本,然后拷贝到前面提到的sdk文件下覆盖现有的tools文件夹。
android avd
开发Android程序一定要有设备来做测试。最好的就是破解了的具有管理员权限的实体设备;如果没有,一部可以开启开发者选项的普通实体设备也可以。因为实体设备的运行效率是最好的(只要不是已经差不多块被市场淘汰的老旧的Android手机),呈现的效果也更接近真实用户的体验。如果实在没有实体设备来做开发,那就只能退到虚拟设备上了。
android avd指令可以打开虚拟设备管理器,方便创建和修改Android虚拟设备以供开发测试。不过在此之前还是需要使用SDK管理器去下载相关API版本的设备镜像才能创建指定版本的虚拟设备。
虚拟设备毕竟是借用电脑上的资源所以相对来说运行速度会很慢。但使用虚拟设备也有几个好处:不用担心设备没有电;在做演示的时候可以投影显示;可以创建不同API版本和屏幕尺寸的设备来做查看效果,就不需要花很多钱买齐各种设备。
其他功能
android指令还可以用创建Android项目,然后用ant或gradle来编译,这样就可以完全脱离IDE。不过多数情况下还是会倾向于使用IDE来创建,毕竟可视化的界面会更加的便捷。有时候可能想要部署到其他的设备或者开发项目可以使用这些脚本来做到一键创立。
DDMS
这个工具也是极为重要的,使用频率比android是高很多。android这个工具大多数是用来做初始化配置,而ddms则是debug过程中不可缺少的。它可以查看程序使用时所运行的线程信息,网络使用率,可以进行profiling来查看期间那个方法使用了最多的资源。
在Eclipse和Android Studio中都已经很少的集成了logcat内容的展示,在IDE中还能直接通过点击异常的条目来跳转到相应的出错文件的指定行,十分方便,所以一般不会单独在终端打开这个界面。
dmtracedump
这个指令不太常用,主要是把profiling生成的trace文件处理成一个图片文件,显示方法之间的调用关系。除了看得比较酷炫,实际很难直接从图上找出太多有用的价值。
uiautomatorviewer
这个工具在我看来绝对是神器啊,它可以展示出当面屏幕所呈现的视图(View)的布局(Layout)以及其尺寸大小。这样就可以用来调整xml文件来重新安排布局。不过更多时候,我用它找到视图的id,然后通过id反向寻找对应的的xml文件。
这个工具不局限在只能查看自己的应用,它可以显示屏幕上的任何东西。所以可以用它来看看别人的应用使用了什么View来呈现也是不错的,比如看看他们是用ListView还是RelativeLayout,用的时button还是textview加点击事件。
有些局限就是它不支持查看自定义的视图,只会显示系统定义的类型名字。另外如果是利用canvas和OpenGL画的内容,也无法查看到其具体细节。不过知道别人是自己画的,不是简单组合几个系统视图那也是很有用的信息。
traceview
这个工具也是用来打开profiling生成的trace文件的,但它远比dmtracedump
要好用的多。traceview
会列出每个方法调用所使用的事件,展开方法还能看到方法被调用其他方法所占用的时间百分比。这样就可以知道那个方法用了最多的资源,进而可以对其进行优化或者将其搬离主线程。
monitor
说了那么多工具,再来说monitor
工具,我感觉前面说这么多都是在浪费时间,因为只要这一个就可以包含全部前面介绍的工具了。还额外附赠了好些功能,比如uiautomatorviewer
一次只能查看一个屏幕布局,但使用monitor
捕获会生成独立的文件,查看互不影响。只能说前面的只是为各个工具做功能介绍,真需要用的时候只要打开monitor
就好了。
同样的它也可以打开trace文件分析方法调用所花了的时间。
其它
emulator
用指令emulator -avd <name>
来启动给定名字的虚拟设备,不过一般还是会通过AVD管理器来打开。但是如果某个虚拟设备经常使用,用这个来打开是挺方便的。要是记不住名字,可以通过android list avd
来查看。
monkeyrunner
这个指令可以运行一些脚本来模拟一个返祖用户是如何疯狂的使用开发的应用程序的,用它做一些压力测试也是挺好的。如果不想写脚本,也可以直接使用adb下的monkey指令来做类似的测试。
sqlite3
Android默认自带了sqlite做数据库,SDK中也提供了简洁清晰的API来创建和访问sqlite数据库文件。数据库文件存在于设备的/data/data/<app-packagename>/databases路径下,每个应用都有自己保存数据库文件的文件夹。SDK工具中也带了这个sqlite3工具帮助喜欢用终端来查看sqlite文件的程序员来访问数据库文件。
不过我很少使用这个工具,因为必须要把sqlite数据库文件设备中用adb pull
指令提取到电脑上。而对于普通设备,因为缺少操作权限而无妨提到sqlite数据库文件。对于破解的具有管理员权限的实体设备或者虚拟模拟器,它们在设备上就有sqlite3
指令可以直接在adb shell
下操作。更主要的原因是我还是习惯用具有可视化的程序来查看这些数据。
mksdcard
该工具是为Android虚拟设备提供一个伪造的sdcard来提供设备的存储量。多个设备也可以共用一个由这个工具创建出来的文件,只要他们不同时启动使用。
在终端运行这些工具时,可以在指令最后加上 &
让其在背后运行,这样就可以在一个终端同时打开多个工具了。要像了解其他更多关于最新Android工具的内容,可以浏览Android开发官方网站,还有Android Tools Project Site网站,以及历年Google IO上介绍Android工具的视频。
除了这些工具外,Android还有一个更强大的工具那就是adb
,不过它更像是指令没有可视化界面。而且adb
已经从tools文件夹移到了platform-tools下了。在之前已经有文章介绍通过它查看Activity Stack的方式,之后也会有更多文章来详细介绍它。