From eaa21e7db917f013d3fab0828da401174d9b7050 Mon Sep 17 00:00:00 2001 From: liuyang Date: Thu, 8 Nov 2018 17:01:37 +0800 Subject: [PATCH] =?UTF-8?q?APK=E6=8A=93=E5=8C=85>=E4=BB=8E=E9=A2=91?= =?UTF-8?q?=E9=81=931=E5=BC=80=E5=A7=8B=E4=BE=9D=E6=AC=A1=E6=8A=93?= =?UTF-8?q?=E5=8F=96=20#BYLSERVER-1693?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/duolebo/blyrobot/data/Task.kt | 19 ++++--- .../java/com/duolebo/blyrobot/util/AdbUtil.kt | 54 +++++++++++-------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt index fbcf1d8..13ab88f 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -168,9 +168,8 @@ class Task : IAppBaseCallback { } AdbUtil.launchApp("${this.apkInfo.packageName}/${this.apkInfo.launcher}") - Thread.sleep(2 * 1000L) - // 启动2s开始抓取,避免第一个频道没有抓到 - capture(this.apkInfo.launchDelay + this.apkInfo.captureDelay) + // 启动立即抓取,避免第一个频道没有抓到 + capture(this.apkInfo.captureDelay, false) Thread.sleep(this.apkInfo.launchDelay * 1000L) // 启动后按键事件模拟 @@ -182,6 +181,7 @@ class Task : IAppBaseCallback { private fun processChannels(index:Int): Boolean { Log.i(TAG, "processChannels") step() + quitCapture() for (i in index + 1 until this.apkInfo.channelCount) { if (this.status == "7") @@ -237,7 +237,7 @@ class Task : IAppBaseCallback { } // 抓包处理 - private fun capture(delay: Int) { + private fun capture(delay: Int, quit: Boolean = true) { Log.i(TAG, "capture") val file = File(this.capturePath) if (file.exists()) @@ -245,8 +245,15 @@ class Task : IAppBaseCallback { Thread(Runnable { proc = AdbUtil.tcpCapture(this.capturePath) }).start() - Log.i(TAG, "capture sleep $delay seconds") - Thread.sleep(delay * 1000L) + + if (quit) { + Log.i(TAG, "capture sleep $delay seconds") + Thread.sleep(delay * 1000L) + quitCapture() + } + } + + private fun quitCapture() { proc?.destroy() AdbUtil.killTcpdump() Thread.sleep(2000L) diff --git a/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt b/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt index bb74226..493b8fc 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt @@ -1,5 +1,6 @@ package com.duolebo.blyrobot.util +import android.text.TextUtils import android.util.Log import com.duolebo.blyrobot.data.EmulateKey import java.io.BufferedReader @@ -211,7 +212,7 @@ object AdbUtil { val keyEvents = ArrayList() val keys = keyPath.split(Constants.SLASH) for (stepKey in keys) { - var delay = "0" + var delay = "1" var key = stepKey if (Constants.VERTICAL_BAR in stepKey) { val params = stepKey.split(Constants.VERTICAL_BAR) @@ -221,11 +222,16 @@ object AdbUtil { if (Constants.ASTERISK in stepKey) { val params = stepKey.split(Constants.ASTERISK) - for (i in 0..params[1].toInt()) { - val keyEvent = EmulateKey() - keyEvent.key = params[0] - keyEvent.delay = delay - keyEvents.add(keyEvent) + if (params.size > 1 && TextUtils.isDigitsOnly(params[1])) { + for (i in 0..params[1].toInt()) { + val keyEvent = EmulateKey() + keyEvent.key = params[0] + keyEvent.delay = delay + keyEvents.add(keyEvent) + } + } + else { + Log.i(TAG, "multi key event is invalid.") } } else { val keyEvent = EmulateKey() @@ -240,7 +246,7 @@ object AdbUtil { Log.i(TAG, "send key: $keyEvent") val cmdKey = "input keyevent ${Constants.KEY_MAP[keyEvent.key]}" commands.add(cmdKey) - if (keyEvent.key.toInt() > 0) + if (keyEvent.delay.toInt() > 0) commands.add("sleep ${keyEvent.delay}") } @@ -318,23 +324,27 @@ object AdbUtil { } fun killTcpdump() { - val result = exeCmdEcho("killall", true) - - if (result.status != -1) - exeCmdEcho("killall tcpdump", true) - else { - val psResult = exeCmdEcho("ps | grep tcpdump", true) - for (line in psResult.successLines) { - val arr = line.split(' ') - val items = ArrayList() - arr.forEach { - if (!it.isNullOrEmpty()) - items.add(it) - } - if (items.isNotEmpty()) { - exeCmdEcho("kill " + items[1], true) + try { + val result = exeCmdEcho("killall", true) + + if (result.status != -1) + exeCmdEcho("killall tcpdump", true) + else { + val psResult = exeCmdEcho("ps | grep tcpdump", true) + for (line in psResult.successLines) { + val arr = line.split(' ') + val items = ArrayList() + arr.forEach { + if (!it.isNullOrEmpty()) + items.add(it) + } + if (items.isNotEmpty()) { + exeCmdEcho("kill " + items[1], true) + } } } + } catch (e: Exception) { + e.printStackTrace() } } -- 2.21.0