位置: 编程技术 - 正文

C#通过ADB和UiAutomator实现对安卓手机的控制(一)(c# addin)

编辑:rootadmin

推荐整理分享C#通过ADB和UiAutomator实现对安卓手机的控制(一)(c# addin),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c# adodb,c# abb,c# ads,c# add,c# addin,c# add,c# add,c# ads,内容如对您有帮助,希望把文章链接给更多的朋友!

从事安卓开发的朋友应该都知道adb和UiAutomator是什么了,前者是安卓调试桥(Android Debug Bridge),通过它我们可以调试安卓设备中的程序;后者是一款安卓ui的自动化测试工具,它可以对安卓设备实现自动化的点击、滑动、输入等操作。

通过这两个工具我们可以控制安卓设备 安装/卸载/打开/关闭 某个应用,也可以让手机自动执行浏览、点击、输入文字等操作。但是这两款工具是通过命令行操作的,没有图形界面,没法给其他有同样需求的小白用户使用。今天我们就来介绍下如何用C#封装它们来开发一个图形界面的手机控制工具(说到这里有朋友就明白了,这不就是手机助手的开发原理嘛)。

先介绍下adb的一些常用命令: adb devices 查看当前已连接电脑的安卓设备的信息 adb install < apk在PC端的文件路径 > 比如adb install d:test.apk 就是把D盘的test.apk安装到手机中。 adb uninstall <软件名> 或 adb uninstall -k <软件名> 这两个命令都是用来卸载安卓设备中的某个程序的,加-k的作用是卸载软件但是保留配置和缓存文件。 adb push <电脑端的文件路径> <安卓设备中的路径> 这个命令的作用是把电脑端的某个文件发送到安卓设备的指定位置。 adb pull <安卓设备中的路径> <电脑端的文件路径> 这个命令同上面一个相反,是把安卓设备中指定位置的文件发送到电脑端指定位置。 adb shell 进入安卓设备的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下的方式:adb shell [command] 如:adb shell dmesg会打印出内核的调试信息。 备注:更多ADB命令,参见下面这位网友的文章:

上面就是adb的简单使用方法了,下面我们再来看看如何使用UiAutomator。

UiAutomator是java开发的Ui自动化测试工具,我们要使用它的话就要创建一个java项目(注意:不是安卓项目),然后引入android.jar和uiautomator.jar这两个包(这两个包存放于安卓sdk安装目录中的platforms中不同安卓版本的文件夹里,具体用哪一个版本取决于你要测试的安卓设备的系统版本),并且创建的测试类必须集成自UiAutomatorTestCase这个类。 完成上面的步骤以后我们就可以编写测试代码了,比如下面这段根据文本来点击安卓设备上的某个组件:

上面这个方法实现的作用是根据传入的文本来点击安卓设备上的某个组件,如果根据这个文本没有找到组件的话就会寻找包含这个文本的组件,比如我们传入“game”那么就会点击显示文本为“game”或””game center”的组件。(我用”组件“来描述是因为点击的对象有可能是桌面上的应用图标,也有可能是某个应用的文本框或TextView等)

这里有一点要注意的是如果我们想传入中文来点击的话,必须先把中文转换成可以传输到手机的文字格式,比如Base格式,然后在UiAutomator程序中再转换回中文,具体如何实现以后会专门写文章介绍,这里就先不说了。

C#通过ADB和UiAutomator实现对安卓手机的控制(一)(c# addin)

UiAutomator可以根据以下条件来查找目标组件: text 根据显示文本 resourceId 根据组件的resourceId,这个是在安卓4.4.2以上的系统才支持。 className 根据组件的className,比如:android.widget.ImageView 、android.widget.EditText或 android.widget.TextView等

根据这些条件我们查找到目标组件之后,就可以进行 点击、滑动、输入文本、读取文本的操作了,比如下面这段代码实现了根据resourceId来给目标组件输入文本:

这段代码根据传入的resourceId来查找目标组件,如果目标组件不存在就不进行操作,如果存在就输入传入的文本,比如我们传入的resourceId为 com.android.mms:id/recipients_editor,传入的content为abc,那么就会在resourceId为com.android.mms:id/recipients_editor的文本框中输入abc

有心的朋友可能注意到了,上面的两个方法都是test开头的,这是使用UiAutomator的一个规范,大家写的时候要注意。

更多关于UiAutomator的使用方法因为篇幅太长就不介绍了,大家可以看下这些视频,上面介绍的很详细: 第一步:要把编写好的程序编译成jar包。 方法是用命令行工具进入我们创建的java项目所在文件夹中,比如:cd E:workspaceUiAutomatorTest 然后使用下面这个命令: android create uitest-project -n AutoRunner -t -p E:workspaceUiAutomatorTest 先解释下上面三个参数 -n -t和 -p的意思。-n是我们生成的jar包的名字,这个可以自己填写。-t表示安卓系统相应的版本号,这个可以用android list命令取查询,比如安卓4.4.2对应的是 -p表示我们的java项目所在文件夹。 成功运行上面这个命令后在项目文件夹里会生成一个build.xml文件,然后我们可以运行下面这个命令生成jar包: ant build 如果运行后提示BUILD SUCCESSFUL说明jar包编译成,我们可以在项目文件夹中的bin目录里找到它。 第二步:用adb命令把jar包推送到手机的data/local/tmp目录中 adb push E:workspaceUiAutomatorTestbinAutoRunner.jar data/local/tmp (我们生成的jar包的名字是AutoRunner,对应的就是上面-n后面的文本)

第三步:使用adb shell 命令来运行具体的测试方法 上面我们写了两个测试方法,如果我们想运行它们的话可以通过下面这个命令: adb shell uiautomator runtest AutoRunner.jar -c com.erlimanong.AutoRunner#testClickByText -e text Messaging 其中-c指定的是我们所编写的java程序的包名和类型,比如:com.erlimanong.AutoRunner 就是我刚才写的com.erlimanong包下面的AutoRunner 井号(#) 指定的是方法名,比如testClickByText就是我上面编写的根据显示文本点击目标组件的方法 -e的作用是传入参数,比如-e text Messaging传入的是名为text的字符串”Messaging“,程序中的Bundle对象就可以根据text这个键名来获取字符串”Messaging“。假如我们要传入多个参数的话,可以在后面中叠加一个-e,比如:-e text Messaging -e resourceId com.android.mms:id/recipients_editor 这样就同时传入了text参数和resourceId参数。

就这样,我们完成了一个自动测试程序,如果把手机的语言调成英文模式的话,上面那个命令就自动打开了短信窗口。

大家可以发现,我们直到现在使用最多的都是命令行工具,这个对于程序员来说是小case,可对于小白用户来说却很困难,所以如果有一些普通的用户想实现某些特殊的需求,我们就要做一个图形界面的程序来供他们使用了。由于这篇文章已经写的很长了,所以如何用C#来封装放在下一篇来讲。

瀑布流 之前在面试的时候被问过瀑布流的问题貌那个面试官是蘑菇街出来的当时压根不知道瀑布流是什么东东也就说了些自定义控件的思路到这几天想起来也

安卓逆向学习笔记()- 安卓逆向学习资料 因为喜欢Android安全,而Android逆向是Android安全的一个分支,所以小弟利用业余时间自学了一点Android逆向。在学习过程中总结了一点学习资料,特此分享

The specified child already has a parent. You must call removeView() on the child&#;s parent first. java.lang.IllegalStateException:Thespecifiedchildalreadyhasaparent.YoumustcallremoveView()onthechildsparentfirst.今天写代码要给AlertDialog加一个自定义的View然后就报错了,报错是

标签: c# addin

本文链接地址:https://www.jiuchutong.com/biancheng/386802.html 转载请保留说明!

上一篇:Android布局中实现圆角边框(android 布局属性大全)

下一篇:瀑布流(瀑布流水风景图片)

  • 当月不发工资会影响社保吗
  • 公司取得违约金合法吗
  • 营业执照办理税务登记需要什么资料
  • 公司没有收入怎么报销
  • 个税里的累计专票是什么
  • 个税扣除项生效日期
  • 收到发票未付款怎么处理
  • 开发票产品名称
  • 负债类科目有借方余额吗
  • 加计扣除所得税怎么算
  • 以前年度多交所得税,跨年退回怎么做会计分录
  • 挂靠单位怎么缴纳增值税?
  • 保证金抵扣货款合同
  • 银行账户销户时需要收回开户许可证吗
  • 托收承付是收到钱了吗
  • 学校里的水电费是政府买单吗
  • 资金账簿印花税最新政策2022年
  • 在建工程需要交哪些税
  • 差额征税发票的图片
  • 公司购买宿舍楼申请书
  • 固定资产金额小于5000元,可以不一次性税前扣除吗
  • 一般纳税人增值税怎么做账务处理
  • 人民法院被收买了怎么办
  • 发票先入账,但发票不对
  • Windows11怎么连接网络
  • 差额承兑汇票办法规定
  • reg.dll是什么
  • 增值税普通发票怎么开
  • 外币交易犯法吗
  • 不动产经营租赁范围
  • 防伪税控盘全额抵扣政策
  • 科尼西卡神庙在哪里
  • pnp算法简介与代码解析
  • 螺旋状芦荟 (© David Madison/Getty Images)
  • 怎么计提企业所得税
  • Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法
  • php类的作用
  • 非盈利组织固定资产没入帐 怎么调账
  • php标准数据类型共有四种
  • java enum tostring
  • 土地增值税可以抵扣吗
  • 连锁店会计的工作内容
  • 帝国cms会员注册天数自动升级会员组
  • u8已经记账的凭证怎么修改
  • 小微企业所得税优惠政策最新2023
  • Mysql以utf8存储gbk输出的实现方法提供
  • sql server 链接
  • mysql数据库sid
  • 以前年度损益调整结转到本年利润吗
  • 税法税前扣除
  • 运费增值税发票抵扣
  • 挂靠在运输公司的车辆为什么要记入"固定资产"科目?
  • 会计利润调增调减项目
  • 税局代开的专票能作废或红冲吗?
  • 已经计提工资后怎么做账
  • 建筑工程公司的经营范围有哪些
  • 不同税率的产品可以开在同一张发票上吗
  • 财政拨款结转是
  • 公司进项不够可以退税吗
  • etc电子发票需要勾选吗
  • 公司购药品入什么科目
  • 受同一方重大影响的企业之间为什么不构成关联方
  • sql server语句查询
  • vistasp3
  • Windows Server 2008关闭闲置状态的IDE通道
  • linux怎么使用ping命令
  • win7打印错误怎么解决
  • cocos2dx CardinalSpline和CatmullRom算法
  • 使用jquery实现的项目
  • python数据结构教程
  • JavaScript对象的创建
  • android入门基础知识
  • 理解js绑定事件是什么
  • 农机免税范围
  • 南京电费余额查询
  • 开展和组织开展什么区别
  • 税务备案表的有效期
  • 上海税务举报邮箱号
  • 苹果官网手机号码无效
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设