From b89ddb3d7bb25aa7f76c30aaf2bfdcf54d8919f6 Mon Sep 17 00:00:00 2001 From: liuyang Date: Thu, 27 Sep 2018 18:13:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E9=94=AE=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/test.json | 3 +- .../com/duolebo/blyrobot/data/EmulateKey.kt | 6 +++ .../java/com/duolebo/blyrobot/data/Task.kt | 17 ++++++- .../blyrobot/service/BylRobotService.kt | 2 +- .../duolebo/blyrobot/service/BylWebService.kt | 2 +- .../java/com/duolebo/blyrobot/util/AdbUtil.kt | 49 ++++++++++++------- .../java/com/duolebo/blyrobot/util/AppUtil.kt | 2 +- .../com/duolebo/blyrobot/util/Constants.kt | 5 ++ 8 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/duolebo/blyrobot/data/EmulateKey.kt diff --git a/app/src/main/assets/test.json b/app/src/main/assets/test.json index 0676cbf..156c9d4 100644 --- a/app/src/main/assets/test.json +++ b/app/src/main/assets/test.json @@ -2,5 +2,6 @@ "name": "电视家", "packageName": "com.elinkway.tvlive2", "launcher": "com.elinkway.tvlive2.activity.SplashActivity", - "launchDelay": "15" + "launchDelay": "15", + "keyEvents": "down|3/ok" } \ No newline at end of file diff --git a/app/src/main/java/com/duolebo/blyrobot/data/EmulateKey.kt b/app/src/main/java/com/duolebo/blyrobot/data/EmulateKey.kt new file mode 100644 index 0000000..3c7d64a --- /dev/null +++ b/app/src/main/java/com/duolebo/blyrobot/data/EmulateKey.kt @@ -0,0 +1,6 @@ +package com.duolebo.blyrobot.data + +class EmulateKey { + var key: String = "down" + var delay = "1" +} \ No newline at end of file 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 a496d79..f053f8b 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -3,6 +3,7 @@ package com.duolebo.blyrobot.data import android.content.Context import android.util.Log import com.duolebo.blyrobot.util.AdbUtil +import com.duolebo.blyrobot.util.AppUtil import com.duolebo.blyrobot.util.Constants import org.json.JSONObject import net.gotev.uploadservice.UploadNotificationConfig @@ -18,6 +19,8 @@ class Task { private lateinit var launcher: String private lateinit var imagePath: String private var launchDelay = 15 + private lateinit var keyEvent: String + private var context: Context private val imageDateFormat = SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.CHINA) var proc: Process? = null @@ -31,6 +34,7 @@ class Task { this.launcher = json.optString(Constants.LAUNCHER) this.launchDelay = json.optInt(Constants.LAUNCH_DELAY, 15) this.imagePath = this.context.cacheDir.absolutePath + "/" + this.packageName + this.keyEvent = json.optString(Constants.KEY_EVENT) val dir = File(this.imagePath) if (!dir.exists()) dir.mkdirs() @@ -38,6 +42,9 @@ class Task { fun start() { this.launchApp() + this.capture() + this.uploadImage() + this.report() stop() } @@ -72,6 +79,10 @@ class Task { }).start() } + private fun report() { + + } + private fun parseCaptureFile(filterUrl: String) { val file = File("/sdcard/capture.txt") val lines = file.readLines() @@ -112,8 +123,10 @@ class Task { fun screenShot() { val time = imageDateFormat.format(Date()) - val imagePath = this.imagePath + "/${packageName}_$time.png" - AdbUtil.screenShot(imagePath) + var pngPath = this.imagePath + "/${packageName}_$time.png" + val jpgPath = pngPath.replace(".png", ".jpg") + AdbUtil.screenShot(pngPath) + AppUtil.pngToJpg(pngPath, jpgPath) } fun uploadImage() { diff --git a/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt b/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt index 1864256..4af9088 100644 --- a/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt +++ b/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt @@ -82,7 +82,7 @@ class BylRobotService: Service() { private fun testKey() { Thread(Runnable { - AdbUtil.sendMultiKey("down/up/right",0.5f) + AdbUtil.sendMultiKey("down/up/right") }).start() } diff --git a/app/src/main/java/com/duolebo/blyrobot/service/BylWebService.kt b/app/src/main/java/com/duolebo/blyrobot/service/BylWebService.kt index 048c793..987b6f4 100644 --- a/app/src/main/java/com/duolebo/blyrobot/service/BylWebService.kt +++ b/app/src/main/java/com/duolebo/blyrobot/service/BylWebService.kt @@ -7,7 +7,7 @@ import com.duolebo.blyrobot.web.CaptureWebServer class BylWebService : Service() { - lateinit var webServer: CaptureWebServer + private lateinit var webServer: CaptureWebServer override fun onCreate() { super.onCreate() 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 118872a..527ecb8 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt @@ -1,6 +1,7 @@ package com.duolebo.blyrobot.util import android.util.Log +import com.duolebo.blyrobot.data.EmulateKey import java.io.BufferedReader import java.io.DataOutputStream import java.io.IOException @@ -47,7 +48,7 @@ object AdbUtil { exeCmdEcho(exeCommands, root) } - fun exeCmdEcho(commands: ArrayList, root: Boolean = false) { + fun exeCmdEcho(commands: ArrayList, root: Boolean = false): List? { Log.i(TAG, "exe cmd echo: $commands") val exeCommands = ArrayList() exeCommands.addAll(commands) @@ -55,6 +56,8 @@ object AdbUtil { for (line in results!!) { Log.i(TAG, "echo line: $line") } + + return results } fun sendCommands(commands: ArrayList, root: Boolean = false): List? { @@ -85,7 +88,7 @@ object AdbUtil { dos.flush() } - dos.writeBytes(EXIT) + dos.writeBytes(EXIT + LINE_BREAK) dos.flush() status = proc.waitFor() @@ -156,26 +159,38 @@ object AdbUtil { exeCmdEcho(cmdKey, true) } - fun sendMultiKey(keyPath: String, delay: Float) { - val allKey = ArrayList() - val keys = keyPath.split('/') + fun sendMultiKey(keyPath: String) { + val keyEvents = ArrayList() + val keys = keyPath.split(Constants.SLASH) for (stepKey in keys) { - if ('*' in stepKey) { - val params = stepKey.split('*') - for (i in 0..params[1].toInt()) - allKey.add(params[0]) - } else - allKey.add(stepKey) + var delay = "1" + if (Constants.VERTICAL_BAR in stepKey) { + val params = stepKey.split(Constants.VERTICAL_BAR) + delay = params[1] + } + + 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) + } + } else { + val keyEvent = EmulateKey() + keyEvent.key = stepKey + keyEvent.delay = delay + keyEvents.add(keyEvent) + } } val commands = ArrayList() - for (key in allKey) { - Log.i(TAG, "send key: $key") - val cmdKey = "input keyevent ${Constants.KEY_MAP[key]}" + for (keyEvent in keyEvents) { + Log.i(TAG, "send key: $keyEvent") + val cmdKey = "input keyevent ${Constants.KEY_MAP[keyEvent.key]}" commands.add(cmdKey) - if (delay > 0) { - commands.add("sleep $delay") - } + commands.add("sleep ${keyEvent.delay}") } exeCmdEcho(commands, true) diff --git a/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt b/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt index 04c39a2..9987ff5 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/AppUtil.kt @@ -65,7 +65,7 @@ object AppUtil { return "" } - fun pntToJpg(pngFilePath: String, jpgFilePath: String) { + fun pngToJpg(pngFilePath: String, jpgFilePath: String) { val bitmap = BitmapFactory.decodeFile(pngFilePath) try { BufferedOutputStream(FileOutputStream(jpgFilePath)).use { bos -> diff --git a/app/src/main/java/com/duolebo/blyrobot/util/Constants.kt b/app/src/main/java/com/duolebo/blyrobot/util/Constants.kt index e25bb89..28e8939 100644 --- a/app/src/main/java/com/duolebo/blyrobot/util/Constants.kt +++ b/app/src/main/java/com/duolebo/blyrobot/util/Constants.kt @@ -37,6 +37,11 @@ object Constants { const val PACKAGE_NAME = "packageName" const val LAUNCHER = "launcher" const val LAUNCH_DELAY = "launchDelay" + const val KEY_EVENT = "keyEvent" + + const val ASTERISK = "*" + const val SLASH = "/" + const val VERTICAL_BAR = "|" const val ACTION_LOCAL_SERVICE = "action_local_service" } \ No newline at end of file -- 2.21.0