最近有将手机桌面上的app依次启动、退回到桌面的需求,学习了一波,下面和大家一起分享下。示例手机是小米10青春版。

1. 设计思路

开始想着用app的包名来启动,尝试了后发现太复杂,难以实现按桌面排布顺序依次启动。后来想到了玩游戏时用得自动点击脚本,我们启动app也可以按照桌面坐标来输出点击事件即可。所以需要做几件事:(1)获得桌面所有app的坐标;(2)循环进行点击事件;(3)一屏点击完后,滑动到下一屏。

2. 实现

2.1 获得桌面app所有坐标

在屏幕上放满应用,启动 cmd,输入 adb shell getevent,点击左上角的app,cmd 输出 如图:

手机能不能运行java 手机能不能运行bat_bash


0035所在行最后一栏的数字就是 x 坐标:c6;0036所在行最后一栏的数字就是 y 坐标:11d

该坐标为16进制,转换为十进制坐标就是 (198,285) 测试坐标是否能启动目标位置app: cmd 输入 adb shell input tap 198 285,如果能启动则坐标可用。

用同样的方法获得右下角 app 位置处的坐标,(3b7, 71e)—>(951,1822)

手机能不能运行java 手机能不能运行bat_开发语言_02


我手机桌面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坐标不准确,多调整调整起点、终点、间隔值就好。