最近有将手机桌面上的app依次启动、退回到桌面的需求,学习了一波,下面和大家一起分享下。示例手机是小米10青春版。
1. 设计思路
开始想着用app的包名来启动,尝试了后发现太复杂,难以实现按桌面排布顺序依次启动。后来想到了玩游戏时用得自动点击脚本,我们启动app也可以按照桌面坐标来输出点击事件即可。所以需要做几件事:(1)获得桌面所有app的坐标;(2)循环进行点击事件;(3)一屏点击完后,滑动到下一屏。
2. 实现
2.1 获得桌面app所有坐标
在屏幕上放满应用,启动 cmd,输入 adb shell getevent
,点击左上角的app,cmd 输出 如图:
0035所在行最后一栏的数字就是 x 坐标:c6;0036所在行最后一栏的数字就是 y 坐标:11d
该坐标为16进制,转换为十进制坐标就是 (198,285)
测试坐标是否能启动目标位置app: cmd 输入 adb shell input tap 198 285
,如果能启动则坐标可用。
用同样的方法获得右下角 app 位置处的坐标,(3b7, 71e)—>(951,1822)
我手机桌面app的排布是 4 × 6,所以app的横向排布间距为 (951-198)/3 ≈250,纵向间距为 (1822-285)/5≈307.
2.2 循环输出点击事件
先启动第一行 app 做测试,以下是在 bat 脚本中命令,在 cmd 中 %%
写为 %
for /l %%x in (198,250,951) do adb shell input tap %%x 285 & timeout /T 3 & adb shell input keyevent HOME & timeout /T 2
for /l %%x in (198,250,1000)
:在 198 到 951 间以 250 为间隔循环timeout /T waittTme
:等待 waitTime 秒&
:连接两个 cmd 命令,无论前一条是否成功,都会执行后一条
同样测试第一列:
for /l %%y in (285,307,1822) do adb shell input tap 198 %%y & timeout /T 3 & adb shell input keyevent HOME & timeout /T 2
测试通过后,测试启动整屏 app,直接硬套二重 for 即可:
for /l %%y in (285,307,1822) do for /l %%x in (198,250,951) do adb shell input tap %%x %%y & timeout /T 3 & adb shell input keyevent HOME & timeout /T 2
该内容存储为 E:\adb\startAppCurrentPage.bat
。
2.3 屏幕滑动
adb shell input swipe 600 1000 400 1000
(600,1000):滑动起点的(x,y)
(400,1000):滑动终点的(x,y)
能实现依次启动桌面 app然后返回桌面,并滑动到下一屏继续执行的 bat 脚本完成了:
for /l %%i in (1,1,3) do E:\adb\startAppCurrentPage.bat & adb shell input swipe 600 1000 400 1000 & timeout /T 2
3 注意
timeout /T waitiTime
不可少,启动app、回桌面、滑屏都需要时间,不等待手机系统会跟不上节奏;
坐标不一定能一次找成功,因为是大概计算的,可能某个位置的app坐标不准确,多调整调整起点、终点、间隔值就好。