利用 Tasker 打造自动签到神器

 

Android 上的 Tasker 绝对称得上是 Android 系统的神器之一, 可以完成很复杂多样的自定义任务。这里介绍一下利用他完成某 APP 自动签到的过程。

思路

保证手机正常联网,通过USB调试做以下步骤:

  1. 解锁屏幕进入桌面
  2. 打开签到 APP
  3. 模拟点击 APP 中签到按钮
  4. 退出签到 APP
  5. 锁屏

准备

  1. 能够安装 Magisk 的安卓手机一部
  2. 安装 Magisk 模块:ADB & Fastboot for Android NDK,Busybox for Android NDK
  3. 安装 APP:终端模拟器,RE文件管理器,Tasker,Secure Settings
  4. 装有 adb tools 及 Git for Windows 的 PC 一台(用来计算模拟点击坐标)
  5. 打开手机 USB 调试模式,并允许通过 USB 调试模拟点击
  6. 保证Tasker,Secure Settings后台常驻 – 非常重要!!!

唤醒屏幕

在进行模拟点击前,必须保证手机屏幕是唤醒状态,不然点了也没用。网上很多人说的采用adb shell input keyevent 26这种方法只有在亮屏时有用,相当于按下一次电源键,但熄屏状态并不起作用,所以我采用另一种办法:通过Tasker调用Secure Settings唤醒屏幕。

具体做法是

  1. 打开Secure Settings然后 enable System+ Modul
  2. 打开Tasker -> 任务 -> 新建任务 -> 插件 -> Secure Settings -> 配置 -> Actions -> Wake Device
  3. 手机系统设置中找到设备管理器,激活 Secure Settings

测试:可以在 Tasker 中设定一个延时任务测试下,比如延时三秒后亮屏

滑动解锁

亮屏后默认是系统的锁屏界面,简单起见,我已经把手机解锁密码去掉,只剩下滑动锁。滑动解锁处理起来比较容易,adb shell input swipe x1 y1 x2 y2即可,所以我们需要定起始和终止两个坐标点,来模拟滑动,继续往下看。

获得屏幕点击的位置坐标

此方法比较土,但胜在只要有adb tools就能用,不需要别的东西。

计算比例

通过命令adb shell getevent -p | grep -e "0035" -e "0036"获得event体系里宽和高

我的手机输出如下信息:

我们需要的就是其中的 max

手机分辨率是已知的,我手机是:1080 x 2248

计算比例:

计算点击位置坐标

执行命令adb shell getevent | grep -e "0035" -e "0036"

输出如下信息:

把0035和0036后面的位置数据从16进制转化为10进制,祭出 Windows10 自带计算器,选程序员转换之得到十进制坐标为:(1072, 1457)

这是在event体系里的位置,将其转化为屏幕位置

所以得到刚才点击的屏幕坐标位置是(1072, 1457)

自己adb调试自己

一般我们是在 PC 端利用 adb 调试安卓手机,但实际上安卓自己也可以调试自己,这样可以只用手机就完成模拟点击操作,不需要电脑的帮助。还记得准备工作要求的安装 ADB & Fastboot for Android NDK,Busybox for Android NDK 这个 Magisk 模块么?就是来干这个的。

打开终端模拟器,输入代码:

出来弹窗选择信任即可

打开签到 APP

这一步你当然可以通过模拟点击来打开相应 APP 来进行后续的操作,但这要求你手机解锁开屏后不能有别的 APP 占据屏幕,否则点击就乱套。这里我采用的是am start -n {包(package)名}/{包名}.{活动(activity)名称}方法,APP 包名一般都能在对应的市场比如酷安应用详情中看到,钉钉的包名是com.alibaba.android.rimet。那么如何知道 APP 的 activity 名称呢?继续往下看。

快速获取当前Activity类名

据说有个叫re-sign.jar的小工具可以干这个,但我这里总是报OOM的错,懒得深究,直接上 adb 敲如下命令

adb shell dumpsys activity activities | findstr "应用包名",输入之后信息会有很多,过滤一下,主要找包名.开头的,比如钉钉是com.alibaba.android.rimet.ui.activity.StartActivity(版本不同可能会有差异,需要自己琢磨),找到后用如下命令启动 APP:

打开 APP 后模拟点击完签到流程,最后退出

熄屏

屏幕老亮着太费电,还是关了的好,有两种方法

  1. adb shell input keyevent 26 相当于按电源键
  2. Tasker 调用 Secure Settings 插件,选择 Lock Device(步骤类似唤醒屏幕

只在工作日签到

Tasker 自带的定时功能并不能满足这个需求,我们需要借助第三方 API 接口来判断当天是否为工作日,是工作日才签到。类似的第三方接口很多,有开发能力的机油甚至可以自己写,这里我用的是免费节假日API提供的接口。

整个自动签到脚本内容如下:

ALL IN

使用 RE 管理器将上述auto_login移动到/system/xbin/目录下,改可执行权限。剩下的操作均在 Tasker 应用中完成:

  1. 新建配置文件,时间选每天上下班时间,关联任务名字随便取
  2. 唤醒屏幕前最好随机睡段时间(睡多久自己把控)
  3. 唤醒屏幕
  4. 调用auto_login脚本完成签到流程
  5. 锁屏

懒人福利:Tasker 配置文件(复制保存为xml后缀文件,可直接在应用内导入还原):

发现自动签到方案还是不甚完美:签到成功与否没有消息通知。

所以就想到用 IFTTT 结合 Telegram 来搞一搞这个签到反馈,实现的效果是这样的:

签到完成

需要在 IFTTT 中开一个 applets

ifttt_sign

脚本加点新内容:

搞定!

参考

  1. Run adb command inside the terminal emulator or programmatically without root
  2. 使用工具re-sign.jar获取android的包名和主类名
  3. Android使用ADB启动应用程序
  4. 免费节假日API
  5. Android快速获取当前Activity类名的三种方法
  6. Android adb shell 获得点击屏幕的位置坐标
  7. Tasker FAQ
  8. Magisk – The Universal Systemless Interface, to create an altered mask of the system without changing the system itself.

原文链接:https://blog.ferstar.org/post/use-tasker-do-some-funny-things/

发表评论

联系我们

联系我们

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部