手把手教你ranorex_android源码instrument
话说ranorex能把android程序看的透彻,关键是在潜伏,他使用instrumentation,在每个界面(activity)里面,准确的说是onresume,也就是页面显示的时候,都给安装了个钩子(hook),等到界面不显示了,也就是pause了,就去掉这个hook,所以ranorex才能对android程序的界面元素一清二楚。
好吧,我说说具体步骤:
instrumentation处理源文件:
1. 在源文件工程中引用:ranorex.jar,位置在:C:\安装目录\Ranorex 4.1\Bin\ RxEnv\Android\
001.png
2. 给所有的activity加上代码:
|
@Override public void onResume() { super.onResume(); com.ranorex.android.RanorexAndroidAutomation.Hook(this); } @Override public void onPause() { super.onPause(); com.ranorex.android.RanorexAndroidAutomation.UnHook(this); } @Override public boolean dispatchKeyEvent(android.view.KeyEvent event) { com.ranorex.android.RanorexAndroidAutomation.Key(event); return super.dispatchKeyEvent(event); } |
3. 添加权限
|
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INJECT_EVENTS" /> |
002.png
这个意思是只有系统应用程序才可以使用这个权限,在程序中插入事件,绝对不是干好事的。^_^
不用搭理他,project-clean一下,报错就消失了,编译能通过的。
4. 添加版本号
|
帮助中说明: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="YOUR PACKAGE" android:versionCode="YOUR CODE VERSION" android:versionName="YOUR VERSION NAME (RxInstrumented$<RANOREX-VERSION>)"> |
|
原文: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amem" android:versionCode="1" android:versionName="1.0" > |
|
修改为: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amem" android:versionCode="1" android:versionName="1.0(RxInstrumented$4.1.5)>" > |
版本号查看方法:
003.png
好了,这就搞定了,编译成apk就可以用来测试了。
其实在deploy的时候,勾选上instrument就工具就自动帮你搞定了,是不是有点崩溃,这篇文章白看了。^_^
手把手教你ranorex_android源码instrument的更多相关文章
- 手把手教你ranorex_android自动化测试第一个示例
要说android的自动化,那真是折腾死我了,从早期的monkeyrunner,到后来的robotium,再到最新的uiautomator,各有各的问题,总之性价比都不够高,不太适合我的使用场景.于是 ...
- 一步步教你如何源码编译Recovery
*1 准备Ubuntu作为您的操作系统,笔者的版本是12.04_amd64. *2 准备 Android 源码的编译环境,主要是安装一些编译用到的lib库,以及同步源码的一些工具 ,如GIT,CURL ...
- 全网最新最详细最明白教程之Spring源码搭建,没有之一,超详细
相关帖子有很多但是都不是最新的Gradle,我在使用Gradle最新版编译的时候简直坑死我了,弄了好久.接下来给大家详细说一下这个安装过程,以及相关的软件版本号. 相关软件.依赖的版本号: Gradl ...
- 手把手教你IDEA连接码云(Gitee)
目录 前言 一.下载.安装git 1.打开git官网,选择你的操作系统 2.根据你的系统位数选择相应的版本下载 3.安装 4.配置全局的用户名.邮箱 5.在idea中配置git目录 二.配置Gitee ...
- 手把手教你用Pytorch-Transformers——部分源码解读及相关说明(一)
一.简介 Transformers是一个用于自然语言处理(NLP)的Python第三方库,实现Bert.GPT-2和XLNET等比较新的模型,支持TensorFlow和PyTorch.本文介对这个库进 ...
- 手把手教你调试SpringBoot启动 IoC容器初始化源码,spring如何解决循环依赖
授人以鱼不如授人以渔,首先声明这篇文章并没有过多的总结和结论,主要内容是教大家如何一步一步自己手动debug调试源码,然后总结spring如何解决的循环依赖,最后,操作很简单,有手就行. 本次调试 是 ...
- 手把手教你玩转nginx负载均衡(四)--源码安装nginx
引言: 在上一篇,我们已经装好了虚拟机,并且已经配置好了网络,那么今天我们就要开始安装nginx服务器了. 安装工具以及过程 安装gcc编译套件以及nginx依赖模块 yum -y install g ...
- Android应用系列:手把手教你做一个小米通讯录(附图附源码)
前言 最近心血来潮,突然想搞点仿制品玩玩,很不幸小米成为我苦逼的第一个试验品.既然雷布斯的MIUI挺受欢迎的(本人就是其的屌丝用户),所以就拿其中的一些小功能做一些小demo来玩玩.小米的通讯录大家估 ...
- 手把手教你调试Entity Framework 6源码
0 摘要 本文讲述在Visual Studio 2013(VS 2013)下调试Entity Framework 6(EF 6)源码的配置过程.原则上,VS 2012也适用. 之前打算编写<E ...
随机推荐
- (转)pip和easy_install使用方式
easy_install 跟 pip 都是 Python 的套件管理程式,有了它們,在使用 Python 開發程式的時候會帶來不少方便. easy_install 和 pip 有什麼不一樣?據 pip ...
- PSQL命令小结
经常使用psql查询数据,现在总结几个常用的命令参数,供以后参考 -h 数据库地址 -U 数据库用户名 -t 不打印字段等信息 -c 执行的SQL语句 -s 单步执行,就是执行的时 ...
- js模板 arttemplate 让数据与html分离
js模板引擎 前后交互过程中最麻烦的就是如何将json数据展示到页面中,循环拼接html的方法实在是太low了,饱受其苦,BAT同样会遇到这样的问题,于是乎就有个各自的js模板引擎,目的只有一个:让数 ...
- Maven仓库下载jar包失败的处理方案
Maven仓库下载jar包失败的处理方案 在使用Maven项目的时候,有时候中央仓库并没有对应的包比如kaptcha-2.3.2.jar: 为了使我们的 项目能够正常运行下去,我们可以去别的地方下载对 ...
- SpringMVC学习笔记七:SpringMVC统一异常处理
发现有位前辈写得比我从书上看到的还详细,我就不写了,前辈的博文地址如下: http://blog.csdn.net/eson_15/article/details/51731567
- Echarts饼图更改颜色、显示数据且换行
var option = { title : { text: '数据来源', x:'center' }, tooltip : { trigger: 'i ...
- 使用Phantom omni力反馈设备控制机器人
传统的工业机器人普遍采用电机 .齿轮减速器 .关节轴三者直接连接的传动机构,这种机构要求电机与减速器安装在机械臂关节附近,其缺点是对于多关节机械臂,下一级关节的电机与减速器等驱动装置成为上一级关节的额 ...
- V-rep学习笔记:视觉传感器1
Vision sensors, which can detect renderable entities(Renderable objects are objects that can be seen ...
- 最大整数(Noip1998连接多位数)
最大整数(Noip1998连接多位数)[问题描述] 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:343312 ...
- PendingIntent传递数据注意参数RequestCode和Flag
数据发送方: public static void notify(Context context, TxrjMessage msg) { NotificationManager notifiM ...