一、工具下载安装
手机端:auto.js(百度即可)
PC端: VS Code JDK SDK Tools(定位工具: Uiautomatorviewer)
注:
VS Code 用于代码编写 Uiautomatorviewer用于元素定位,也就是APP的界面分析
下载地址:
VS code:https://code.visualstudio.com/
JDK网盘64位下载地址: https://pan.baidu.com/s/1dfhaoMVQLDqSOAj45aP4Lg
SDK下载(Android集成开发环境)链接:https://pan.baidu.com/s/1zYTq5Zv2yFjDyI8XyKoMUw 提取码:zovb
(JDK安装配置教程:https://blog.csdn.net/qq_41742494/article/details/99709605)
SDK环境配置步骤:此电脑右键–>属性–>高级系统设置–>环境变量–>找到"Path"编辑–>新建–>浏览(找到Android集成开发环境的解压路径,定位到sdk目录级。如:E:\免安装软件\adt-bundle-windows-x86_64-20131030\adt-bundle-windows-x86_64-20131030\sdk)–>一路确定出来–>Dos命令行输入adb–>不提示adb不是内部命令就成功了
二、ADB及Uiautomatorviewer使用
1. 通过USB数据线将手机连接到电脑
2. 打开adb.exe sdk安装目录 \ platform-tools \ adb.exe 输入命令(查看手机连接状态):
adb devices |
3. 运行uiautomatorviewer.bat sdk安装目录 \ tools \ bin \ uiautomatorviewer.bat
4. uiautomatorviewer不能截取手机屏幕解决办法
(1)在电脑桌面创建两个文本文档并更改后缀名app.uix app.png
(2)在电脑桌面文本文档并更改后缀名为 bat 右键编辑 > 输入以下内容 > 保存
@echo off>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"if '%errorlevel%' NEQ '0' (echo 请求管理员权限...goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs""%temp%\getadmin.vbs"exit /B:gotAdmin@echo onadb shell uiautomator dump /sdcard/app.uixadb pull /sdcard/app.uix C:/Users/hjfdzd/Desktop/app.uixadb shell screencap -p /sdcard/app.pngadb pull /sdcard/app.png C:/Users/hjfdzd/Desktop/app.png
5. 打开uiautomatorviewer点击打开 app.uix app.png 即可分析app界面
三、PC端代码编写
1. PC端打开VS Code 点击EXTENSIONS 搜索Auto.js点击安装
2. 开启Autojs服务 Ctrl + Shift + P > Autojs start server
3. 手机端打开Autojs开启无障碍服务,点击连接电脑输入电脑IP进行连接
四、控件分析及代码编写
1.分析界面如下
2.找出视频红包对应右上角的 2 ,并点击视频红包进行金币的赚取
等待视频看结束点击关闭按钮,返回界面
3.代码如下:
/*** 定义控件btn,父控件btnParent, 关闭控件btnClose* 区域左上角顶点 boundLeft,boundTop 区域右下角顶点 boundRight,boundBottom* 手机适配比: 屏宽比 wRatio 屏高比 hRatio* 计数变量 count* 视频可点击总次数 total(需查找的控件 2 )* 最终点击坐标点 pointX,pointY*/var btn,btnParent,btnClose,boundLeft,boundTop,boundRight,boundBottom,wRatio,hRatio,count,total,pointX,pointY,flag;//屏幕比用2280X1080的屏幕适配其他
wRatio = device.width / 1080;
hRatio = device.height / 2280;/*** 通过uiautomatorviewer分析获得 2 所在控件 bounds=[219,1194][270,1245]* 其中:* boundLeft = 219* boundTop = 1194* boundRight = 270* boundBottom = 1245* 适配其他机型 只需横坐标乘以 wRatio 纵坐标乘以 hRatio*/
boundLeft = 219 * wRatio;
boundTop = 1194 * hRatio;
boundRight = 270 * wRatio;
boundBottom = 1245 * hRatio;/*** UiSelector.boundsInside(left, top, right, buttom)* 在bound区域内查找控件* 在bound区域内查找className("android.view.View") 即 2 所在控件*/btn = className("android.view.View").boundsInside(boundLeft,boundTop,boundRight,boundBottom).findOne(500);
//如果btn不为空
if(btn){flag = true;while (flag) {//获取文本控件 即 2total = btn.text();if (total!=null) {//寻找父控件btnParent = btn.parent().parent().parent();//找到父控件的区域boundLeft = btnParent.bounds().left;boundTop = btnParent.bounds().top;boundRight = btnParent.bounds().right;boundBottom = btnParent.bounds().bottom;//随机点击坐标pointX = Math.random()*(boundRight-boundLeft)+boundLeft;pointY = Math.random()*(boundBottom-boundTop)+boundTop;//点击click(pointX,pointY);console.log(pointX+","+pointY);//等待1ssleep(1000);//等待视频观看完毕while (flag) {//查找关闭按钮btnClose = id("com.xiangzi.jukandian:id/tt_video_ad_close_layout").findOne(500);if (btnClose) {//点击关闭btnClose.click();sleep(1000);//标识符置为false跳出循环flag = false;}//查找关闭按钮btnClose = className("android.widget.TextView").text("关闭广告").findOne(500);if (btnClose) {//点击关闭btnClose.click();sleep(1000);//标识符置为false跳出循环flag = false;}//查找关闭按钮btnClose = id("jump_tv").text("跳过").findOne(500);if (btnClose) {//点击关闭btnClose.click();sleep(1000);//标识符置为false跳出循环flag = false;}}flag = true;}else{flag = false; }}
}
五、总结
1.电脑编码容易便捷
2.uiautomatorviewer界面分析清晰,可轻易找到控件
3.uiautomatorviewer还有好多控件属性尚未列出,可结合autojs悬浮窗进行界面分析
注:
若有帮助,请关注本号,持续分享