运用安卓无障碍实现抖音关注
.next(StepTag.STEP_3) { val packageName = Assists.getPackageName() if (packageName != targetPkg) { overLog("未成功启动,重新启动") return@next Step.get(StepTag.STEP_1) } OverManager.log("进入搜索") OverManager.log("输入要关注的抖音号") Assists.findByTags("android.widget.EditText").forEach { it.performAction(AccessibilityNodeInfo.ACTION_FOCUS) it.paste("")//输入关注的抖音号 return@next Step.get(StepTag.STEP_4) } return@next Step.repeat }.next(StepTag.STEP_4) { Assists.findById("com.ss.android.ugc.aweme.lite:id/nuk").firstOrNull()?.let { OverManager.log("点击【搜索】") it.gestureClick() runIO { delay(3000) } return@next Step.get(StepTag.STEP_5) } return@next Step.repeat }.next(StepTag.STEP_5) { OverManager.log("展示搜索结果") OverManager.log("准备点击【关注】按钮") Assists.findByText("关注").forEach { if (it.contentDescription != null && it.containsText("关注按钮")){ it.gestureClick() OverManager.log("关注成功") Assists.back() return@next Step.none } }
直播点赞
.next(StepTag.STEP_3) { val packageName = Assists.getPackageName() if (packageName != targetPkg) { overLog("未成功启动,重新启动") return@next Step.get(StepTag.STEP_1) } Assists.findByText("直播中").forEach { if (it.isVisibleToUser && it.containsText("直播中") && it.text is String) { overLog(it.text as String) // it.parent.parent.click() runIO { delay(250) } return@next Step.get(StepTag.STEP_4) } } AssistsWindowManager.switchNotTouchableAll() runIO { delay(250) } val x = ScreenUtils.getAppScreenWidth() / 2F val distance = ScreenUtils.getAppScreenHeight() / 2F val startY = distance + distance / 2F val endY = distance - distance / 2F overLog("滑动:$x/$startY,$x/$endY") Assists.gesture( floatArrayOf(x, startY), floatArrayOf(x, endY), 0, 200L ) AssistsWindowManager.switchTouchableAll() runIO { delay(2000) } return@next Step.repeat }
视频点赞
next(StepTag.STEP_4) { // runIO { delay(250) } val home = Assists.findById("com.ss.android.ugc.aweme.lite:id/dlu").firstOrNull() if (home == null) { OverManager.log("不是首页") Assists.back() return@next Step.get(StepTag.STEP_3) } val x = ScreenUtils.getAppScreenWidth()/2 val y = ScreenUtils.getAppScreenHeight()/2 OverManager.log("开始点赞 x:$x y:$y") // 点击 20 次 for (i in 1..10) { // 生成 x 和 y 坐标的随机偏移值,范围是 [-250, 250] 之间的随机数 val randomXOffset = Random.nextInt(-250, 251) // -250 到 250 之间的随机数 val randomYOffset = Random.nextInt(-250, 251) // -250 到 250 之间的随机数 // 计算新的点击位置 val clickX = x + randomXOffset val clickY = y + randomYOffset // 触发点击 Assists.gestureClick(clickX.toFloat(), clickY.toFloat(), 10) runIO { delay(50) } // 延迟 250 毫秒后执行下一次点击 } runIO { delay(1000) } AssistsWindowManager.switchNotTouchableAll() runIO { delay(250) } val startY = y + y / 2F val endY = y - y / 2F overLog("滑动:$x/$startY,$x/$endY") Assists.gesture( floatArrayOf(x.toFloat(), startY), floatArrayOf(x.toFloat(), endY), 0, 200L ) AssistsWindowManager.switchTouchableAll() runIO { delay(1000) }