Android中的自动测试(1)
1,478 views| 2010-01-12| 李先静| Uncategorized| | 发表评论转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli@gmail.com>
这几天做Broncho A1的Android兼容性测试(CTS),研究了一下Android的自动测试功能。它的执行流程如下:
1.用adb shell去启动测试程序,如:
adb shell am start -n com.google.android.contacts/.ContactsActivity
am是一个脚本命令:
# Script to start "am" on the device, which has a very rudimentary # shell. # base=/system export CLASSPATH=$base/framework/am.jar exec app_process $base/bin com.android.commands.am.Am $*
不加任何参数运行am,我们可以看帮助信息:
[root@localhost ~]# adb shell am
usage: am [start|broadcast|instrument|profile]
am start -D INTENT
am broadcast INTENT
am instrument [-r] [-e ] [-p ]
[-w]
am profile [start |stop]
INTENT is described with:
[-a ] [-d ] [-t ]
[-c [-c ] ...]
[-e|--es ...]
[--ez ...]
[-e|--ei ...]
[-n ] [-f ] []
am 是在命令行启动android程序的一种方法,它是在cmds/am/src/com/android/commands/am/Am.java里实现的。
在函数runInstrument实现了instrument 命令,主要做了下面的事:
1.参数解析
2.创建一个InstrumentationWatcher对象,用来接收测试结果。
3.调用IActivityManager的startInstrumentation运行测试程序。
4.调用InstrumentationWatcher的waitForFinish函数等待测试结束。
private void runInstrument() { ... try { if (!mAm.startInstrumentation(cn, profileFile, 0, args, watcher)) { System.out.println("INSTRUMENTATION_FAILED: " + cn.flattenToString()); showUsage(); return; } } catch (RemoteException e) { } ... if (watcher != null) { if (!watcher.waitForFinish()) { System.out.println("INSTRUMENTATION_ABORTED: System has crashed."); } } ... }
startInstrumentation实际上是在services/java/com/android/server/am/ActivityManagerService.java里执行的,执行过程如下:
1.调用PackageManager的getInstrumentationInfo获取InstrumentationInfo和ApplicationInfo。
2.uninstall原来的测试程序(如果前面运行了相同的测试程序,就会停止它)
3.运行新的测试程序。
public boolean startInstrumentation(ComponentName className, String profileFile, int flags, Bundle arguments, IInstrumentationWatcher watcher) { ... try { ii = mContext.getPackageManager().getInstrumentationInfo( className, 0); ai = mContext.getPackageManager().getApplicationInfo( ii.targetPackage, PackageManager.GET_SHARED_LIBRARY_FILES); } catch (PackageManager.NameNotFoundException e) { ... uninstallPackageLocked(ii.targetPackage, -1, true); ProcessRecord app = addAppLocked(ai); ... }
a1 , Android Share
Tags
Recent Posts
Most Viewed
- 系统程序员成长计划写作提纲 - 19,646 views
- Android IPC机制详解 - 6,350 views
- 系统程序员成长计划-走近专业程序员(上) - 6,262 views
- 系统程序员成长计划-写得又快又好的秘诀(一) - 5,419 views
- 系统程序员成长计划-背景知识 - 5,075 views
- i++循环与i–循环的执行效率 - 4,738 views
- 系统程序员成长计划-Write once, run anywhere(WORA)(上) - 4,708 views
- 系统程序员成长计划-走近专业程序员(下) - 4,262 views
- Linux下的调试工具 - 4,033 views
- Advanced Linux Sound Architecture (ALSA) 研究笔记 - 4,032 views
- 系统程序员成长计划-序 - 3,998 views
- 系统程序员成长计划-写得又快又好的秘诀(三) - 3,937 views
- 中国人与自由软件文化研究(搞笑版) - 3,743 views
- Android中的MessageQueue,Handler,Looper和Thread - 3,715 views
- 答复:我不会OOO,仍然可以XXX - 3,665 views
Categories
- Android (28)
- Broncho-A1-Hack (6)
- DirectFB (7)
- FTK(嵌入式GUI) (24)
- GTK+ (29)
- KVM hack notes (8)
- Linux Mobile (65)
- Management (5)
- Mozilla (9)
- Open Source (5)
- Programming (34)
- Tools (9)
- Uncategorized (23)
- Win32 (3)
- X Windows (31)
- 沉思录 (29)
- 系统程序员成长计划 (67)
Blogroll
gallery
Linux guru
推荐网站
Recent Comments
- Dig on 嵌入式GUI FTK设计与实现-事件源(FtkSource)
- 用心生活每一天 » GNU gprof: linux profiling tools 使用 on gcc profiling的工作原理
- JavaScript for: i++ vs i–-传播、沟通、分享-一直“有你” on i++循环与i–循环的执行效率
- Frankly Law on 嵌入式GUI FTK介绍(11)-交叉编译
- tracing on Linux下的调试工具
- ndljsn on FTK移植指南(初稿)
- tracing on 爬塘朗山
- tracing on GTK+(基于DirectFB)的字体处理
- Kely on 系统程序员成长计划写作提纲
- tracing on 爬塘朗山



January 12th, 2010