一、工具下载安装
手机端: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安装配置教程:)
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 )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
@echo on
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix C:/Users/hjfdzd/Desktop/app.uix
adb shell screencap -p /sdcard/app.png
adb 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) {
//获取文本控件 即 2
total = 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);
//等待1s
sleep(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悬浮窗进行界面分析
注: