Dalvik 调试监视器服务(Dalvik Debug Monitor Service (ddms))
这个工具集成了 Dalvik(为 Android 平台定制的虚拟机(VM)),能够让你在模拟器或者设备上管理进程并协助调试。你可以使用它杀死进程,
选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。
Android 调试桥(Android Debug Bridge (adb) )
Adb 工具可以让你在模拟器或设备上安装应用程序的.apk 文件,并从命令行访问模拟器或设备。你也可以用它把 Android 模拟器或设备上的应 用程序代码和一个标准的调试器连接在一起。
Android Asset Packaging Tool (aapt)
Aapt 工具可以让你创建包含 Android 应用程序二进制文件和资源文件的.apk 文件。
Android 接口描述语言(Android Interface Description Language (aidl))
可以让你生成进程间的接口的代码,诸如 service 可能使用的接口。
sqlite3
这个工具能够让你方便地访问 SQLite 数据文件。这些数据文件是由 Android 应用程序创建并使用的。
Traceview
这个工具可以将你的 Android 应用程序产生的跟踪日志(trace log)转换为图形化的分析视图。
mksdcard
帮助你创建磁盘映像(disk image),你可以在模拟器环境下使用磁盘映像来模拟外部存储卡(例如 SD 卡)。
dx
Dx gongju 将.class 字节码(bytecode)转换为 Android 字节码(保存在.dex 文件中) 。 UI/Application Exerciser Monkey
Monkey 是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有 一系列的系统级事件。你可以使用 Monkey 来给你正在开发的程序做随机的,但可重复的压力测试 。
activitycreator
一个可以产生 Ant build 文件的脚本,你可以使用它编译你的 android 应用程序。如果你正在 Eclipse 上开发,并使用 ADT 插件,你不必使用这 个脚本。
Android 应用程序模块: 应用, 任务, 进程, 和线程
在大多数操作系统里,存在独立的一个 1 对 1 的可执行文件(如 Windows 里的 exe 文件), 它可以产生进程,并能和界面图标、应用进行用 户交互。但在 Android 里,这是不固定的,理解将这些分散的部分如何进行组合是非常重要的。
由于 Android 这种可灵活变通的,在实现一个应用不同部分时你需要理解一些基础技术:
• 一个 android 包 (简称 .apk ) ,里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们设备上的文件。
• 一个 任务 ,通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个上层的应用,可以将你的 任务切换到前台来。
• 一个 进程 是一个底层的代码运行级别的核心进程。通常.apk 包里所有代码运行在一个进程里,一个进程对于一个.apk 包;然而,
进程
标 签常用来改变代码运行的位置,可以是全部的.apk 包 或者是独立的 活动
,接收器
,服务
, 或者提供器组件。
任务
记住关键的一点:当用户看到的“应用”,无论实际是如何处理的,它都是一个任务。如果你仅仅通过一些活动来创建一个.apk 包,其中有一个肯 定是上层入口(通过动作的
intent-filter 以及分类 android.intent.category.LAUNCHER),然后你的.apk 包就创建了一个单独任务,无论
你启动哪个活动都会是这个任务的一部分。一个任务,从使用者的观点,他是一个应用程序;对开发者来讲,它是贯穿活动着任务的一个或者多个视图,或者一个活动栈。当设置
Intent.FLAG_ACTIVITY_NEW_TASK
标志启动一个活动意图时,任务就被创建了;这个意图被用作任务的根用途,定义区分哪个任务。如果活动启动时没有这个标记将被运行在同一个任务里(除非你的活动以特殊模式被启动,这个后面会讨论)。如果你使用
当不带
Intent.FLAG_ACTIVITY_NEW_TASK 标记启动一个新的活动,任务亲和力对新启动的活动将没有影响作用:它将一直运行在它启动的
那个任务里。然而,如果使用 NEW_TASK 标记,亲和力会检测已经存在的任务是否具有相同的亲和力。如果是,该任务会被切换到前台,新的 活动会在任务的最上面被启动。你可以在你的表现文件里的应用程序标签里为.apk 包里所有的活动设置你自己的任务亲和力,当然也可以为单独的活动设置标签。这里有些例 子演示如何使用:
• 如果你的.apk 包里包含多个用户可启动的上层应用程序,那么你可能想要为每个活动分配不同的亲和力。这里有一个不错的协定,你可 以将不同的名字字串加上冒号附加在.apk 包名字的后面 。 例如,"com.android.contacts"的亲和力命名可以是
"com.android.contacts:Dialer" and "com.android.contacts:ContactsList"。
• 如果你想替换一个通知,快捷键,或者其它能从外部启动的应用程序的内部活动,你需要在你想替换的活动里明确的设置任务亲和力
(taskAffinity)。例如,如果你想替换联系人详细信息浏览界面(用户可以直接操作或者通过快捷方式调用),你需要设置任务亲和力(taskAffinity) 为“com.android.contacts”。
启动模式以及启动标记
你控制活动和任务通信的最主要的方法是通过设置启动模式的属性以及意图相应的标记。这两个参数能以不同的组合来共同控制活动的启动结 果,这在相应的文档里有描述。这里我们只描述一些通用的用法以及几种不同的组合方式。
你最通常使用的模式是