android 模拟点击3

本文涉及的产品
语种识别,语种识别 100万字符
文档翻译,文档翻译 1千页
文本翻译,文本翻译 100万字符
简介: 引用:http://blog.csdn.net/yiyaaixuexi/article/details/6574001  Android 真机和模拟器的差异问题,是永恒的话题,问不完的为什么,解不完的迷。

引用:http://blog.csdn.net/yiyaaixuexi/article/details/6574001

 Android 真机和模拟器的差异问题,是永恒的话题,问不完的为什么,解不完的迷。模拟器的存在,有它的作用,但不要什么都相信模拟器。除非你是Android纯上层应用开发人员或者爱好者,否则我建议你扔掉模拟器。它理想化的引导给我们添了不少麻烦。当然,这也是件好事。最起码,让我有兴趣去寻求答案,让我收获了更多。

      问题的缘由是有个自动化测试的需求,我需要写脚本模拟点击触摸屏的一系列操作,以代替手工测试(话说~遇上连续启动1000次camera并且拍照后退出这种变态测试,你们都是怎么做的?)。以此来证明:头儿,此bug真的解了!

     


    

     Linux上可以通过sendEvent来模拟键盘或者鼠标点击事件,而Android是基于Linux2.6的,所以也可以模拟点击事件。网络文章很多都给出这样一段数据信息,告诉你怎么去实现模拟点击:


adb shell sendevent /dev/input/event0 3 0 110       //x坐标
adb shell sendevent /dev/input/event0 3 1 70         //y坐标
adb shell sendevent /dev/input/event0 1 330 1       //按下状态,准确的说是有压力值
adb shell sendevent /dev/input/event0 0 0 0           //必要的一行数据
adb shell sendevent /dev/input/event0 1 330 0       //抬起状态,无压力值
adb shell sendevent /dev/input/event0 0 0 0           //必要的一行,相当于终止一段完整数据的标致

 

 

用上面的方法可以点击模拟器的(110,70)点,但是,在真机上,却不可以,原因有两点。


    
  1.  /dev/input/event0 ×

      模拟器上只有一个/dev/input/event0,但是真机上不是(如果还真是,那你这设备还是别出厂了-_-||)。

 

用cat获得的设备对应event信息:

# cat /proc/bus/input/devices

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="qtouch-touchscreen"
P: Phys=
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=event5
B: EV=b
B: KEY=400 0 4 0 0 0 0 0 0 0 0
B: ABS=2750000 11030003

"qtouch-touchscreen"不是规定死的event几,话说1234567都有可能,看你设备了。

 

  2.  数据类型 ×

      探究原因的时候,通过:

#adb shell getevent /dev/input/event5 > getvalue

 

可以得到:

 0003 0035 000007c8
 0003 0036 00000771
 0003 0038 00000001
 0000 0002 00000000
 0003 0037 00000010
 0000 0000 00000000

 

这和我之前所想象的坐标信息不一样,看到c,就知道是16进制数喽,第一反应就是做个10进制的转换。具体怎么转换?

int main (int argc, char *argv[]) 点点点... (这个.c 还不会写?不会写还不会搜吗?)

可以得到:

3 53 1992 
3 54 1905 
3 56 1 
0 2 0 
3 55 16

0 0 0

 

先不管为什么,做个测试验证下结果:

adb shell sendevent /dev/input/event5 3 53 1992 
adb shell sendevent /dev/input/event5 3 54 1905 
adb shell sendevent /dev/input/event5 3 56 1 
adb shell sendevent /dev/input/event5 0 2 0 
adb shell sendevent /dev/input/event5 3 55 16 
adb shell sendevent /dev/input/event5 0 0 0

 

这里提一下,倘若操作的数据特别大,那我们可以利用vi的强大,在脚本中实现批量数据的转换,例如:

vim '+%normal gg' '+.,$g/^/s//adb shell sendevent //dev//input//event5 /g' '+wq' value

 

结果可以实现点击

 

既然测试的结果证明那乱七八糟的数是对的,那就必究其缘由!其实问题的根本原因,是因为手里的真机设备已经支持了多点触摸。

在Android中,多点触摸功能依赖于RawInputEvent.java 中定义的以下几个主要的软件位:

 

[java]  view plain copy print ?
  1. public class RawInputEvent {   
  2.   
  3. ...  
  4.   public static final int ABS_MT_TOUCH_MAJOR = 0x30;   
  5.   
  6.   public static final int ABS_MT_TOUCH_MINOR = 0x31;   
  7.   
  8.   public static final int ABS_MT_WIDTH_MAJOR = 0x32;   
  9.   
  10.   public static final int ABS_MT_WIDTH_MINOR = 0x33;   
  11.   
  12.   public static final int ABS_MT_ORIENTATION = 0x34;   
  13.   
  14.   public static final int ABS_MT_POSITION_X = 0x35;   
  15.   
  16.   public static final int ABS_MT_POSITION_Y = 0x36;   
  17.   
  18.   public static final int ABS_MT_TOOL_TYPE = 0x37;   
  19.   
  20.   public static final int ABS_MT_BLOB_ID = 0x38;   
  21.   
  22. ...  
  23. }  

 

在 KeyInputQueue.java 中,系统创建了一个线程,把所有的 Input 事件放入一个队列,在 KeyInputQueue.java 的最后,将多点事件类型转化为单点事件类型,返回一个新的 InputDevice。

 

 

android的开源unit测试框架,发现点击事件在模拟器上和真机上确实有差别。

相关文章
|
6月前
|
Android开发
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
82 0
|
8月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
9月前
|
人工智能 测试技术 Android开发
Android实现点击链接跳转功能
Android实现点击链接跳转功能
161 1
|
9月前
|
XML Android开发 数据格式
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
android点击FrameLayout、LinearLayout等父布局没响应的原因以及解决方案
212 2
|
9月前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
78 1
|
9月前
|
Android开发
解决在Android Compose中点击空白处收回软键盘
解决在Android Compose中点击空白处收回软键盘
264 0
|
9月前
|
XML Java Android开发
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
604 0
|
9月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
821 0
|
Android开发
Android 实现点击输入框以外的区域隐藏软键盘
Android 实现点击输入框以外的区域隐藏软键盘
162 0
|
XML JavaScript Java
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 3
    Android历史版本与APK文件结构
    120
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    27
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    56
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 8
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    118
  • 10
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29