diff --git a/app/build.gradle b/app/build.gradle index a27ca3f9f375836873510f38b64aaa4e186aa775..0a143bfb52ed59daec4b16a512ca4f0c908d2208 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,7 +13,7 @@ android { minSdkVersion 15 targetSdkVersion 22 versionCode 15 - versionName "1.4.40" + versionName "1.4.45" } signingConfigs { 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 4bcfe1749591721b9ed055de2a41be571d7658af..41ab160eee3af0438a0ebbc60f9cffd795a9e2f5 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -104,6 +104,7 @@ class Task : Thread, IAppBaseCallback { var success = this.processChannels(0) // 再次尝试 if (!success) { + Log.i(TAG, "app seems to be quit,so try again") if (this.status == State.MANUAL_STOP) { Log.i(TAG, "manual exit") return @@ -116,8 +117,13 @@ class Task : Thread, IAppBaseCallback { } success = this.processChannels(this.channelIndex) - if (!success && this.status == State.MANUAL_STOP) - return + if (!success) { + Log.i(TAG, "interrupt on channel: $channelIndex") + if (this.status == State.MANUAL_STOP) { + Log.i(TAG, "manual exit and interrupt") + return + } + } } // 上传图片 @@ -126,6 +132,7 @@ class Task : Thread, IAppBaseCallback { } catch (e: java.lang.Exception) { this.status = State.INTERRUPT e.printStackTrace() + Log.i(TAG, "exception : ${e.message}") } // 退出应用 AdbUtil.stopApp(this.apkInfo.packageName) @@ -199,7 +206,7 @@ class Task : Thread, IAppBaseCallback { * @param index 频道序号 */ private fun processChannels(index: Int): Boolean { - Log.i(TAG, "processChannels") + Log.i(TAG, "processChannels...count:${this.apkInfo.channelCount}") quitCapture() processChannelItem() @@ -236,51 +243,57 @@ class Task : Thread, IAppBaseCallback { */ private fun processChannelItem() { Log.i(TAG, "processChannelItem channel ${this.channelIndex}") - // 处理抓包数据 - var playUrlItems = analysisCapture() - // 如果没有抓取到地址,再次尝试 - if (playUrlItems.size <= 0) { - capture(this.apkInfo.captureDelay) - playUrlItems = analysisCapture() - } - val channels = this.reportJson.optJSONArray("channels") - val channelJson = JSONObject() - val playUrls = JSONArray() - for (playUrl in playUrlItems) { - playUrls.put(playUrl) - } + try { + // 处理抓包数据 + var playUrlItems = analysisCapture() + // 如果没有抓取到地址,再次尝试 + if (playUrlItems.size <= 0) { + capture(this.apkInfo.captureDelay) + playUrlItems = analysisCapture() + } + val channels = this.reportJson.optJSONArray("channels") + val channelJson = JSONObject() - channelJson.putOpt("playUrls", playUrls) + val playUrls = JSONArray() + for (playUrl in playUrlItems) { + playUrls.put(playUrl) + } + + channelJson.putOpt("playUrls", playUrls) - // 处理图片上传信息 - val screenImages = ArrayList() + // 处理图片上传信息 + val screenImages = ArrayList() - var time = imageDateFormat.format(Date()) - val absName = this.taskPath + "/${this.apkInfo.packageName}_${channelIndex}_$time" - screenShot(absName) - screenImages.add("$absName.jpg") + var time = imageDateFormat.format(Date()) + val absName = this.taskPath + "/${this.apkInfo.packageName}_${channelIndex}_$time" + screenShot(absName) + screenImages.add("$absName.jpg") - AdbUtil.sendMultiKey(this.apkInfo.menuKeyEvent) - time = imageDateFormat.format(Date()) - val absOkName = this.taskPath + "/${this.apkInfo.packageName}_${channelIndex}_${time}_ok" - screenShot(absOkName) - screenImages.add("$absOkName.jpg") + AdbUtil.sendMultiKey(this.apkInfo.menuKeyEvent) + time = imageDateFormat.format(Date()) + val absOkName = this.taskPath + "/${this.apkInfo.packageName}_${channelIndex}_${time}_ok" + screenShot(absOkName) + screenImages.add("$absOkName.jpg") - // 对于一些epg弹出时间过长的应用,模拟点击一次返回键,比如电视家3.0 - if (this.apkInfo.epgBack) - AdbUtil.sendMultiKey("back") + // 对于一些epg弹出时间过长的应用,模拟点击一次返回键,比如电视家3.0 + if (this.apkInfo.epgBack) + AdbUtil.sendMultiKey("back") - if (screenImages.size > 0) - uploadImages.addAll(screenImages) + if (screenImages.size > 0) + uploadImages.addAll(screenImages) - val channelImageFile = File(screenImages[0]) - channelJson.putOpt("channelImage", channelImageFile.name) - val channelEpgImageFile = File(screenImages[1]) - channelJson.putOpt("channelEpgImage", channelEpgImageFile.name) - channelJson.putOpt("channelId", this.channelIndex) + val channelImageFile = File(screenImages[0]) + channelJson.putOpt("channelImage", channelImageFile.name) + val channelEpgImageFile = File(screenImages[1]) + channelJson.putOpt("channelEpgImage", channelEpgImageFile.name) + channelJson.putOpt("channelId", this.channelIndex) - channels.put(channelJson) + channels.put(channelJson) + } catch (e : Exception) { + e.printStackTrace() + Log.i(TAG, "exception processChannelItem channel ${this.channelIndex}") + } } // 抓包处理 @@ -322,49 +335,58 @@ class Task : Thread, IAppBaseCallback { var timeStr = "" val tagGet = "GET /" lines.forEach { - if (it.contains("IP (")) { - val end = it.indexOf('.') - timeStr = it.substring(0, end) - } - if (it.contains(tagGet)) { - val start = it.indexOf(tagGet) + tagGet.length - 1 - val end = it.lastIndexOf(' ') - partUrl = it.substring(start, end) - } + try { + if (it.contains("IP (")) { + val end = it.indexOf('.') + timeStr = it.substring(0, end) + } - if (it.contains("Host")) { - val start = it.indexOf(' ') + 1 - val host = it.substring(start) - val url = "http://$host$partUrl" + if (it.contains(tagGet)) { + val start = it.indexOf(tagGet) + tagGet.length - 1 + val end = it.lastIndexOf(' ') + if (start < end && end < it.length) + partUrl = it.substring(start, end) + else + partUrl = "/" + } - Log.i(TAG, "capture url: $url") + if (it.contains("Host")) { + val start = it.indexOf(' ') + 1 + val host = it.substring(start) + val url = "http://$host$partUrl" - var add = true - // 如果筛选url不为空,这里需要进行过滤 - if (!this.apkInfo.filterUrl.isEmpty()) { - if (!url.contains(this.apkInfo.filterUrl)) - add = false - } + Log.i(TAG, "capture url: $url") + + var add = true + // 如果筛选url不为空,这里需要进行过滤 + if (!this.apkInfo.filterUrl.isEmpty()) { + if (!url.contains(this.apkInfo.filterUrl)) + add = false + } - if (add) { - // 这里进行媒体视频播放地址识别 - add = false - val extArr = this.apkInfo.mediaExt.split("|") - for (ext in extArr) { - if (url.contains(ext)) { - add = true - break + if (add) { + // 这里进行媒体视频播放地址识别 + add = false + val extArr = this.apkInfo.mediaExt.split("|") + for (ext in extArr) { + if (url.contains(ext)) { + add = true + break + } } } - } - if (add && !playUrlItems.contains(url)) { + if (add && !playUrlItems.contains(url)) { - playUrlItems.add(url) - } + playUrlItems.add(url) + } - partUrl = "" + partUrl = "" + } + } catch (e: Exception) { + e.printStackTrace() + Log.i(TAG, "exception at line: $it") } } @@ -408,7 +430,7 @@ class Task : Thread, IAppBaseCallback { * 先上报数据,截图上传继续在后台进行 */ private fun report() { - Log.i(TAG, "report....") + Log.i(TAG, "report....status: ${this.status}") val postJson = JSONObject() val reportArray = JSONArray() try {