Commit 80c21a83 authored by liuyang's avatar liuyang

APK图片抓取识别及轮播流地址抓取, 增加自动清理图片缓存逻辑及部分异常捕捉

#BYLSERVER-1438
parent 74a9b4f1
......@@ -13,7 +13,7 @@ android {
minSdkVersion 15
targetSdkVersion 22
versionCode 15
versionName "1.4.40"
versionName "1.4.45"
}
signingConfigs {
......
......@@ -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<String>()
// 处理图片上传信息
val screenImages = ArrayList<String>()
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 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment