基于Instrumentation Framework的开源项目AndroidMonkey简介

在上一篇文章《MonkeyRunner和Android设备通讯方式源码分析》中本人提到MonkeyRunner跟目标安卓机器交互的其中一种方式是通过在目标机器端开启‘monkey
-port $port‘来跟monkeyrunner建立连接进行交互的,后来打算下载安卓机器端的monkey源代码来分析下monkey是如何处理的,在google中打入关键字“android monkey source code“后定位到以下连接”https://code.google.com/p/androidmonkey“, 看到是google的然后又是android,以为就是自己想要的monkey了,所以没有多看就直接下载进行分析。

过程中越看越糊涂,最大的一个疑问是怎么monkey是用instrumentation来注入event呢?这样的话它怎么做到跨进程应用的事件发送呢?因为根据本人的了解instrumentation框架是不能跨进程的,而monkey是绝对跨进程的!

	@Override
	public int fireEvent(Instrumentation testRuner) {
		String note;
		if (mAction == KeyEvent.ACTION_UP) {
			note = "ACTION_UP";
		} else {
			note = "ACTION_DOWN";
		}

		System.out.println(":Typing Key (" + note + "): " + mKeyCode
				+ "    // ");
		try {
//			testRuner.sendKeySync(getEvent());
			testRuner.sendKeyDownUpSync(mKeyCode);
		} catch (Exception e) {
			System.out.println("Failed to send key (" + note + "): " + mKeyCode
					+ "    // ");
			return MonkeyEvent.INJECT_FAIL;
		}

		return MonkeyEvent.INJECT_SUCCESS;
	}

纠结了一段时间后返回下载地方看了下概览,很短,但很清楚的描述了这个不是我想要的monkey,而是原生monkey的一个修改后做成的android库。既然碰上了就顺便翻译下它的介绍和使用吧,反正就那么几句话,待今后有时间再来进一步研究它了,至于它是否真的如我所言不能跨进程,就留待今后或者大家来验证了。

1. 概览

官方原文:https://code.google.com/p/androidmonkey

AndroidMonkey is an Android Library. It is, in fact, a copy of the original Android Monkey Toolhttp://developer.android.com/guide/developing/tools/monkey.html and
made as a library for testing and analysis (e.g. code coverage) purposes.

AndroidMonkey是一个android库。事实上它是在基于原生monkey的基础上做成的一个方便测试和分析(比如:代码覆盖率)的一个测试库。

Tester/User can easily use the library to create random test cases to test android apps with GUI.

测试人员/用户可以很方便的使用这个库来创建针对安卓gui应用的随机测试脚本


Why this library:

为什么使用这个库:

  • You can use this library to create random test cases for your application, with just few lines of code
  • 使用这个库的话你可以只用几行代码就能编写出针对你的app的随机测试用例
  • You can add your assertions to access the state of the SUT (you can hardly do this with the Android Monkey Tool)
  • 你可以在你的测试代码中加入断言从而很方便的去判断你的SUT(被测系统/应用)的当前情况(如果你用monkey的话是很难做到的)
  • You can do Coverage analysis of random testing on Android Application, this is useful for Research Purpose (like what I‘m doing)
  • 你可以通过随即测试对你的app做覆盖率分析,这对我们的研究是很有用的(像我现在所做的)(译者注:其实最后这一句话应该这样子去理解:如果你是一个公司的采购,你想去评估一个应用是否足够稳定满足你的需求,那么你就会先试用做一些前期研究)

Code example/代码实例

public class ContactAdderTest extends
                ActivityInstrumentationTestCase2<ContactAdder> {

        private int NUM_EVENTS = 1000;

        public ContactAdderTest() {
                super("com.example.android.contactmanager", ContactAdder.class);
        }

        @Override
        protected void setUp() throws Exception {
                super.setUp();
                setActivityInitialTouchMode(false);

        }

        public void testMonkeyEvents() {
                Display display = getActivity().getWindowManager().getDefaultDisplay();
                Instrumentation inst = getInstrumentation();
                PackageManager pm = getActivity().getPackageManager();

                Monkey monkey = new Monkey(display,
                                "com.example.android.contactmanager", inst, pm);

                // Generate and fire a random event.
                for (int i = 0; i < NUM_EVENTS; i++) {
                        monkey.nextRandomEvent();
                }

        }
}

官方原文:https://code.google.com/p/androidmonkey/wiki/HowToUse

2.使用简介

HowToUse  /使用简介

Introduction/简介

Here‘s how to use the library/以下是介绍如何使用这个库:

Details/详情

Create an android test project/创建android项目

An Android Test project should be created first, using Android ADT [http://developer.android.com/sdk/eclipse-adt.html] Refer
the the AndroidMonkey library (jar or project)

先创建一个Android Test Project项目,通过Android ADT[http://developer.android.com/sdk/eclipse-adt.html]
添加对AndroidMonkey库的引用(引用jar或者项目)

Create a test class/创建测试类

Create a normal ActivityInstrumentationTestCase2 test class, and add the following test case:

创建一个普通的ActivityInstrumentationTestCase2测试类,然后加入如下的测试用例代码:

public void testMonkeyEvents(){
Display display = getActivity().getWindowManager().getDefaultDisplay(); Instrumentation inst = getInstrumentation(); PackageManager pm = getActivity().getPackageManager();
Monkey monkey = new Monkey(display, packageToTest, inst, pm);
for (int i = 0; i < NUM_EVENTS; i++){
monkey.nextRandomEvent();
}
}
时间: 2024-08-09 02:08:50

基于Instrumentation Framework的开源项目AndroidMonkey简介的相关文章

基于WebRTC的MCU开源项目Licode的环境搭建

基于WebRTC的MCU开源项目Licode的环境搭建 由于项目需求,需要构建多人通讯,调研了多人通讯的三种常见结构: 1.前一篇博客已经基于codelab实现了三人聊天,这种多人系统基于Mesh结构.具体来说,假设有N+1个客户端,那么对于每一个客户端都需要与其他N个对象建立PeerConnection,这样消耗了大量的带宽和CPU资源.对于客户端数量较少的应用比较适合,延迟小.开发简单.画面无损失. 2.基于MCU的结构,该MCU的核心功能就是视频和音频的Mix.通过将多路信号混合成一路,达

.NET 程序员-你应该知道的一些开源项目——收藏

Json.NET http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换. Math.NET http://www.mathdotnet.com/ Math.NET的目标是为提供一款自身包含清晰框架的

go语言值得学习的开源项目推荐

谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq.docker等的项目. 下面推荐几款适合学习的项目: 1.cache2go https://github.com/muesli/cache2go 比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁.goroutines等. 2.groupcache https://gith

视频会议及流媒体十大开源项目

在视频会议领域,有许多可以值得参考的开源项目,这些开源项目有的是协议栈.有的是编码器或者是传输协议,由于视频会议系统是一个综合性的应用系统,里面包含功能较多,如能把这些开源项目选择性的加入我们的视频会议开发当中,我们的开发效率肯定会事半功倍,下面我们列举一下视频会议相关的十大开源项目,并对其重要性及优缺点做一个全面的评价与排名. 1. OpenH323项目        (★★★★★) 上榜理由:最著名的H.323开源协议栈,视频会议开发必备协议栈,强烈推荐 最著名的H.323开源协议栈,包含了

可删除超炫&amp;amp;多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载

       实例Demo下载地址在本文最后 简介 这个Demo主要是使用了cardsui-for-android开源项目,而且做了一些优化和改进: 1.自己定义card视图 2.加入长按事件.避免误操作 3.长按后能够删除card,并播放选中动画 4.删除后浮现一个悬浮button 5.点击悬浮button能够恢复之前删除的card视图 看内容前强烈建议先阅读下面的两篇文章,由于这个demo是在这两个文章的基础上写的: 关于cardsui-for-android这个开源项目的介绍和实现请看这篇

视频会议十大开源项目排行

目录(?)[+] 在视频会议领 域,有许多可以值得参考的开源项目,这些开源项目有的是协议栈.有的是编码器或者是传输协议,由于视频会议系统是一个综合性的应用系统,里面包含功能较 多,如能把这些开源项目选择性的加入我们的视频会议开发当中,我们的开发效率肯定会事半功倍,下面我们列举一下视频会议相关的十大开源项目,并对其重要性 及优缺点做一个全面的评价与排名. 1. OpenH323项目        (★★★★★) 上榜理由:最著名的H.323开源协议栈,视频会议开发必备协议栈,强烈推荐 最著名的H.

Android 开源项目

StickerCamera 一个完整的开源项目.贴纸标签相机(类似nice,in),拍照,裁剪,贴贴纸打标签功能. MD-BiliBili 基于 Material Design 的 BiliBili 第三方 Android 客户端. MaterialUp MaterialUp客户端. ImportNewApp 一个专注于 Java 技术分享的博客平台的客户端. VCameraDemo 微信小视频+秒拍 rox-android 一个Material Design风格的基于用户和朋友喜欢的地点给游客

2018年阿里巴巴重要开源项目汇总(持续更新中)

摘要: 云栖社区特在2018年年末,将阿里巴巴的一些重要的开源项目进行整理,希望对大家有所帮助. 开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来.阿里巴巴各个团队都是发自内心地将踩过的坑和总结的经验融入到开源项目中,供业界所有人使用,希望帮助他人解决问题. 云栖社区特在2018年年末,将阿里巴巴的一些重要的开源项目进行整理,希望对大家有所帮助.(以下项目排名不

GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. 对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局.能够让开发者轻松开发