使用远程adb操作手机自动打开软件进行打卡

1、下载adb调试工具。

Windows下载方式如下

https://developer.android.com/tools/releases/platform-tools?hl=zh-cn

linux服务器下载方式:
(1)安装扩展YUM源,基础YUM源是没有adb工具包的

yum install -y epel-release

(2)安装adb命令

yum install -y adb

不管是使用数据线还是远程调试手机,第一次调试时需要在手机上进行授权,手机会自动弹出授权,你需要点击确定,否则无法连接到手机。

手机打开开发者模式USB调试和无线调试

所有的前提都是需要手机打开开发者模式,并开启调试

开启界面
请添加图片描述
USB数据线链接提示要允许,如果是更换账户或者更电脑无线链接也会弹出,点击确定就好
请添加图片描述

电脑端调试软件

因为我们需要远程控制手机打开钉钉,所以需要先获取手机上关于钉钉的信息。

步骤1:在电脑上打开CMD控制台,进入adb工具所在目录,如:

请添加图片描述

步骤2:使用数据线连接手机,确保手机已开启USB调试,电脑可以正常查看到连接的手机:
adb.exe devices

请添加图片描述

步骤3:在手机上打开钉钉,打开后显示在主页,或者在“消息”页面:

请添加图片描述

步骤4:获取应用的包名和应用名
adb.exe shell "dumpsys window | grep -i mCurrentFocus"

请添加图片描述

记录:
com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity
测试使用命令找开钉钉

测试时,先将前面打开的页面退出后再测试,使用返回键或者直接返回到手机主页即可,执行命令:

adb.exe shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity

请添加图片描述

对于显示信息“Warning: Activity not started, its current task has been brought to the front”可以忽略,因为钉钉在后台处于运行状态,如果再次打开则会有警告信息;
如果后台没有运行就不会有相关提示,但在登录时钉钉需要好几秒钟才会被完全打开,在后面的脚本中,我们会设置延时来保证APP完全正常运行。

开启手机远程调试

上面讲的是使用数据线直接连接手机,通过USB接口调试,在使用网络访问手机时需要具备以下条件:

(1)电脑或者服务器访问手机:因为手机已连接wifi,所以与电脑在同一内网之中,可以使用内网IP地址访问;
(2)手机开启远程调试,在笔记本电脑上执行命令:

adb.exe tcpip 5555

请添加图片描述

端口5555可以自定义,手机重启后端口需要重新开启。

在电脑上adb远程访问手机

连接手机,手机的IP地址是10.11.0.20

adb.exe connect 10.11.0.20:5555

请添加图片描述
测试启动钉钉:

adb.exe shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity

请添加图片描述

执行完命令后,手机端可以正常打开APP了;
当我们可以使用电脑打开手机上的APP时,就可以开始写脚本了

亮屏和密码输入

手机默认情况下肯定是黑屏状态,为了安全我们还设置了密码,我们在使用手机时,一般先把屏幕点亮,然后输入密码,使用完手机后,会顺手将手机黑屏。

亮屏和息屏

使用224代码进行亮屏,223进行熄屏:

adb shell input keyevent 224
adb shell input keyevent 223

使用代码26也可以亮屏,代码26相当于我们手动按开机/关机键:

adb shell input keyevent 26

再执行一次命令则息屏。
命令执行过程中可能会因为网络质量问题,导致命令执行时间过长。
注意,时间间隔太长的话,电脑与手机的连接可能会超时,需要重新连接手机:

adb.exe connect 10.11.0.20:5555
输入密码

我的密码都是数字,以下是每个数字的代码

KeyName说明KeyID
KEYCODE_0按键07
KEYCODE_1按键18
KEYCODE_2按键29
KEYCODE_3按键310
KEYCODE_4按键411
KEYCODE_5按键512
KEYCODE_6按键613
KEYCODE_7按键714
KEYCODE_8按键815
KEYCODE_9按键916

手机上的密码都有很多种,我使用的是纯数字模式。更多关于代码的操作,参考:另一篇Android开启远程ADB调试指南

编写脚本

Windwos版本(使用python)

这里可以直接执行adb程序,是因为前期已经把adb.exe加入到了环境变量中

输入密码要有延时不然速度太快 输入会不全,导致进不去桌面

import os
import time

# 定义命令列表和对应的延迟时间(秒)
commands = [
    ("adb connect 10.11.0.20:5555", 5),
    # 连接手机
    ("adb shell input keyevent 223", 0.5),
    # 先息屏,方式手机处于亮屏状态
    ("adb shell input keyevent 224", 1),
    # 亮屏
    ("adb shell input swipe 500 1500 500 100 1000", 1),
    # 滑动屏幕,进入密码输入界面
    ("adb shell input keyevent 9", 0.3),
    ("adb shell input keyevent 12", 0.3),
    ("adb shell input keyevent 15", 0.3),
    ("adb shell input keyevent 7", 0.3),
    ("adb shell input keyevent 14", 0.3),
    ("adb shell input keyevent 16", 0.3),
    # 依次输入密码进行手机解锁
    ("adb shell input keyevent 3", 1),
    # 返回手机主页,防止APP正在桌面运行,一般APP需要重新点击才能完成“快速打卡”操作
    ("adb shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity", 30),
    # 打开钉钉,30秒后执行下一条命令
    ("adb shell am force-stop com.alibaba.android.rimet", 1),
    # 关闭钉钉程序
    ("adb shell input keyevent 26",1)
    # 按一下开关机键,息屏
]

# 执行每个命令,并延迟指定时间
for command, delay in commands:
    os.system(command)
    time.sleep(delay)

# 关闭 adb.exe 程序
os.system("taskkill /IM adb.exe /F")

运行成功截图
请添加图片描述

然后把python程序打包成exe文件,就可以在计划任务或者其他局域网电脑执行:

pip install pyinstaller
# 安装下python转exe工具
pyinstaller --onefile OpenApp.py
# 把当前py文件转换为exe文件
写一条任务计划,让它每天定时运行(用当前用户运行,如果用system用户,需要手机重新授权)
schtasks /create /tn "打开APP" /tr "C:\OpenAPP.exe" /sc weekly /d MON,TUE,WED,THU,FRI /st 08:00 /ru Admin /rl HIGHEST /rp 12345

schtasks: 调用 Windows 的任务计划程序命令行工具。
/create: 指定要创建一个新的计划任务
/tn "打开APP": 指定任务的名称为 打开APP
/tr “C:\OpenAPP.exe”: 指定任务运行时要执行的程序路径为 C:\OpenAPP.exe
/sc weekly: 指定任务的计划频率为每周
/d MON,TUE,WED,THU,FRI: 指定任务在周一、周二、周三、周四、周五运行
/st 08:00: 指定任务开始的时间为早上 8 点
/ru Admin: 指定任务运行的用户账户为 Admin
/rl HIGHEST: 指定任务以最高权限运行
/rp 12345: 指定运行任务的用户账户的密码为 12345

请添加图片描述

Windwos版本(使用Powershell)

这个加入到了环境变量但是他执行报错,还是直接在根目录或者制定目录运行adb.exe比较稳。

输入密码要有延时不然速度太快 输入会不全,导致进不去

$commands = @(
    @(".\adb.exe connect 10.11.0.20:5555", 5),
    # 连接手机
    @(".\adb.exe shell input keyevent 223", 0.5),
    # 先息屏,方式手机处于亮屏状态
    @(".\adb.exe shell input keyevent 224", 1),
    # 亮屏
    @(".\adb.exe shell input swipe 500 1500 500 100 1000", 1),
    # 滑动屏幕,进入密码输入界面
    @(".\adb.exe shell input keyevent 9", 0.3),
    @(".\adb.exe shell input keyevent 12", 0.3),
    @(".\adb.exe shell input keyevent 15", 0.3),
    @(".\adb.exe shell input keyevent 7", 0.3),
    @(".\adb.exe shell input keyevent 14", 0.3),
    @(".\adb.exe shell input keyevent 16", 0.3),
     # 依次输入密码进行手机解锁
    @(".\adb.exe shell input keyevent 3", 1),
    # 返回手机主页,防止APP正在桌面运行,一般APP需要重新点击才能完成“快速打卡”操作
    @(".\adb.exe shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity", 30),
    # 打开钉钉,30秒后执行下一条命令
    @(".\adb.exe shell am force-stop com.alibaba.android.rimet", 1),
    # 关闭钉钉程序
    @(".\adb.exe shell input keyevent 26",1)
    # 按一下开关机键,息屏
)
# 定义命令列表和对应的延迟时间(秒)
foreach ($command in $commands) {
    $cmd = $command[0]
    $delay = $command[1]
    Invoke-Expression $cmd
    Start-Sleep -Milliseconds ($delay * 1000)
}
taskkill /IM adb.exe /F
# 关闭 adb.exe 程序

运行成功截图
请添加图片描述

Linux版本 .sh脚本

在Linux系统第一次连接adb connect 10.11.0.20:5555,手机弹出USB调试,点击允许
请添加图片描述

#!/bin/bash
adb connect 10.11.0.20:5555 > /dev/null 2>&1
# 连接手机
sleep 2
adb shell input keyevent 223
# 先息屏,防止手机处于亮屏状态
sleep 2
adb shell input keyevent 224
# 亮屏
sleep 2
adb shell input swipe 500 1500 500 100 1000
# 滑动手机进入密码输入界面
sleep 2
adb shell input keyevent 9
adb shell input keyevent 12
adb shell input keyevent 15
adb shell input keyevent 7
adb shell input keyevent 14
adb shell input keyevent 16
# 依次输入密码
adb shell input keyevent 3
# 返回手机主页,防止app桌面运行
sleep 2
adb shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.LaunchHomeActivity > /dev/null 2>&1
# 启动APP
sleep 30
#设置延时,防止APP没有完全打开
adb shell am force-stop com.alibaba.android.rimet
# 关闭APP
sleep 2
adb shell input keyevent 223
# 熄屏

执行脚本

sh OpenApp.sh
然后把这个脚本写一个任务计划:
[root@localhost ~]# crontab -e
0 8 * * 1-5 /root/OpenApp.sh

每周一到周五的早上八点运行 /root/OpenApp.sh 脚本

如果钉钉设置了快速打卡,当APP重新打开后,则会自动进行打卡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hadesls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值