diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index 06be6c9903923f7015be5ca1fb533c2750659130..00f81f45314e6d97d83d010cbd89b28b89933f1a 100644 --- a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt +++ b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt @@ -89,7 +89,9 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { private fun start() { startBtn.isEnabled = false + startBtn.isFocusable = false stopBtn.isEnabled = true + stopBtn.isFocusable = true if (TaskManager.instance.tasks.size > 0) { startRobot() } @@ -102,7 +104,9 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { private fun stop() { stopRobot() stopBtn.isEnabled = false + stopBtn.isFocusable = false startBtn.isEnabled = true + startBtn.isFocusable = true } private fun resetStartBtn() { @@ -196,7 +200,6 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { if (TaskManager.instance.tasks.size > 0) { startRobot() startSet = false - startBtn.text = "停止" refreshBtn.isEnabled = false } else { 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 3029724bab6d13af02ad61be25423d611138b577..6cc018d860098df1d22573e2696890ee9b9d1181 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -20,7 +20,9 @@ import java.text.SimpleDateFormat import java.util.* import kotlin.collections.ArrayList - +/** + * 任务类 + */ class Task : Thread, IAppBaseCallback { enum class State { @@ -61,6 +63,9 @@ class Task : Thread, IAppBaseCallback { return true } + /** + * 从apk配置生成信息 + */ fun from(apkInfo: ApkInfo) { this.apkInfo = apkInfo // this.imagePath = this.context.cacheDir.absolutePath + "/" + apkInfo.packageName @@ -85,6 +90,9 @@ class Task : Thread, IAppBaseCallback { execute() } + /** + * 执行任务 + */ private fun execute() { //如果之前的上传任务还在执行,进行取消 if (!uploadId.isNullOrEmpty()) { @@ -130,6 +138,9 @@ class Task : Thread, IAppBaseCallback { report() } + /** + * 重置状态 + */ fun reset() { this.status = State.IDLE this.channelIndex = 0 @@ -165,6 +176,9 @@ class Task : Thread, IAppBaseCallback { } } + /** + * 启动app + */ private fun launchApp(reset: Boolean = false) { Log.i(TAG, "launchApp") if (reset) { @@ -186,6 +200,10 @@ class Task : Thread, IAppBaseCallback { } } + /** + * 频道轮询 + * @param index 频道序号 + */ private fun processChannels(index: Int): Boolean { Log.i(TAG, "processChannels") step() @@ -200,7 +218,7 @@ class Task : Thread, IAppBaseCallback { AdbUtil.sendMultiKey(this.apkInfo.channelKeyEvent) if (!AppUtil.isAppForeground(context, this.apkInfo.packageName)) { - Log.i(TAG, "targe app crashed?") + Log.i(TAG, "target app crashed?") return false } @@ -210,6 +228,10 @@ class Task : Thread, IAppBaseCallback { return true } + /** + * 单个频道处理 + * 分析抓包数据+屏幕截图 + */ private fun step() { Log.i(TAG, "step channel ${this.channelIndex}") @@ -261,6 +283,9 @@ class Task : Thread, IAppBaseCallback { } } + /** + * 退出抓包 + */ private fun quitCapture() { proc?.destroy() AdbUtil.killTcpdump() @@ -365,12 +390,16 @@ class Task : Thread, IAppBaseCallback { Log.i(TAG, "upload errorCount: $errorCount") } + /** + * ftp 上传回调监听 + */ private fun uploadImageCallback(): UploadStatusDelegate { val totalUpload = this.uploadImages.size Log.i(TAG, "total upload count : $totalUpload") return object : UploadStatusDelegate { override fun onCancelled(context: Context?, uploadInfo: UploadInfo?) { + } override fun onProgress(context: Context?, uploadInfo: UploadInfo?) { @@ -389,6 +418,7 @@ class Task : Thread, IAppBaseCallback { } } + //通过ftp上传图片到服务器 private fun uploadImage() { try { @@ -415,7 +445,11 @@ class Task : Thread, IAppBaseCallback { } } + /** + * 先上报数据,截图上传继续在后台进行 + */ private fun report() { + Log.i(TAG, "report....") val postJson = JSONObject() val reportArray = JSONArray() reportArray.put(this.reportJson) @@ -424,23 +458,32 @@ class Task : Thread, IAppBaseCallback { } override fun onProtocolFailed(p0: IProtocol?) { + Log.i(TAG, "onProtocolFailed....") this.status = State.REPORT_FAILED finish(false) } override fun onHttpFailed(p0: IProtocol?) { + Log.i(TAG, "onHttpFailed....") this.status = State.REPORT_FAILED finish(false) } override fun onProtocolSucceed(p0: IProtocol?) { + Log.i(TAG, "onProtocolSucceed....") this.status = State.COMPLETE finish(true) } var taskListener: OnTaskListener? = null + /** + * 任务状态 + */ interface OnTaskListener { + /** + * @param result true 成功完成 + */ fun onComplete(result: Boolean) } diff --git a/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt b/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt index 5abeeb94ba4b802dd0b98e730315dc179783f911..ee1b2ca9db8c56f3d1d63c62106410bf54044271 100644 --- a/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt +++ b/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt @@ -5,6 +5,9 @@ import com.duolebo.blyrobot.data.Task import java.util.* import kotlin.collections.ArrayList +/** + * 任务管理类 + */ class TaskManager { companion object { @@ -20,6 +23,10 @@ class TaskManager { private var currentTask: Task? = null private var scheduleTime: Timer? = null + /** + * 添加任务 + * @param task + */ fun add(task: Task) { for (existTask in tasks) { Log.i(TAG, "exist task app: ${existTask.apkInfo.packageName}")