Commit 661cd827 authored by liuyang's avatar liuyang

APK图片抓取识别及轮播流地址抓取,流程串联

#BYLSERVER-1438
parent fe591e7d
package com.duolebo.blyrobot.data
import android.content.Context
import android.os.Environment
import android.util.Log
import com.duolebo.appbase.AppBaseHandler
import com.duolebo.appbase.IAppBaseCallback
......@@ -23,8 +24,11 @@ class Task : IAppBaseCallback {
private val TAG = "Task"
lateinit var apkInfo: ApkInfo
//截图存放路径
// 截图存放路径
private lateinit var imagePath: String
// 抓包存放路径
private var capturePath = Environment
.getExternalStorageDirectory().absolutePath + "/capture.txt"
private var channelIndex = 0
......@@ -43,11 +47,13 @@ class Task : IAppBaseCallback {
}
fun from(apkInfo: ApkInfo) {
this.imagePath = this.context.cacheDir.absolutePath + "/" + apkInfo.packageName
this.apkInfo = apkInfo
// this.imagePath = this.context.cacheDir.absolutePath + "/" + apkInfo.packageName
this.imagePath = Environment
.getExternalStorageDirectory().absolutePath + "/" + apkInfo.packageName
val dir = File(this.imagePath)
if (!dir.exists())
dir.mkdirs()
}
fun start() {
......@@ -100,8 +106,11 @@ class Task : IAppBaseCallback {
// 抓包处理
private fun capture() {
Log.i(TAG, "capture")
val file = File(this.capturePath)
if (file.exists())
file.delete()
Thread(Runnable {
proc = AdbUtil.tcpCapture("")
proc = AdbUtil.tcpCapture(this.capturePath)
}).start()
Log.i(TAG, "capture sleep ${this.apkInfo.captureDelay} seconds")
Thread.sleep(this.apkInfo.captureDelay * 1000L)
......@@ -113,7 +122,8 @@ class Task : IAppBaseCallback {
// 分析http抓包文件
private fun analysisCapture(): ArrayList<PlayInfo> {
val playUrlItems = ArrayList<PlayInfo>()
val file = File("/sdcard/capture.txt")
val file = File(Environment
.getExternalStorageDirectory().absolutePath + "/capture.txt")
val lines = file.readLines()
var partUrl = ""
......@@ -189,7 +199,7 @@ class Task : IAppBaseCallback {
// 截图处理,转成jpg
private fun screenShot(absName : String) {
val pngPath = "/$absName.png"
val pngPath = "$absName.png"
val jpgPath = pngPath.replace(".png", ".jpg")
AdbUtil.screenShot(pngPath)
// png转换成jpg
......
......@@ -5,6 +5,7 @@ import com.duolebo.appbase.IModel
import com.duolebo.appbase.prj.bmtv.protocol.IProtocolConfig
import com.duolebo.appbase.prj.bmtv.protocol.ProtocolBase
import com.duolebo.blyrobot.data.ApkReportData
import com.duolebo.blyrobot.util.Config
class ApkReportProtocol(context: Context?, config: IProtocolConfig?) : ProtocolBase(context, config) {
......@@ -19,7 +20,7 @@ class ApkReportProtocol(context: Context?, config: IProtocolConfig?) : ProtocolB
}
override fun prepareProtocolRequestKey(): String {
return "http://test.duolebo.com/staging/apkReport/report.do"
return Config.instance.getReportProtocolUrl()
}
}
\ No newline at end of file
......@@ -21,8 +21,4 @@ class GetAppInfoProtocol(context: Context?, config: IProtocolConfig?) : Protocol
return ""
}
override fun prepareHttpRequestUrl(): String {
return "http://test.duolebo.com/staging/apkInfo/query.do"
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import android.content.IntentFilter
import android.os.IBinder
import android.support.v4.content.LocalBroadcastManager
import android.util.Log
import com.duolebo.blyrobot.data.ApkInfo
import com.duolebo.blyrobot.data.Task
import com.duolebo.blyrobot.tools.TaskManager
import com.duolebo.blyrobot.util.AdbUtil
......@@ -65,7 +66,10 @@ class BylRobotService: Service() {
private fun loadTask() {
Log.i(TAG, "loadTask...")
val task = Task(this)
task.from(JSONObject(AppUtil.readFromAssert(this, "test.json")))
val apkInfo = ApkInfo()
val apkJson = JSONObject(AppUtil.readFromAssert(this, "test.json"))
apkInfo.from(apkJson)
task.from(apkInfo)
TaskManager.instance.add(task)
TaskManager.instance.start()
}
......
......@@ -19,7 +19,7 @@ class TaskManager {
fun add(task: Task) {
task.taskListener = object : Task.OnTaskListener {
override fun onComplete() {
override fun onComplete(result: Boolean) {
remove(task)
}
}
......@@ -28,7 +28,7 @@ class TaskManager {
fun remove(task: Task) {
val item = tasks.find {
it.packageName == task.packageName
it.apkInfo.packageName == task.apkInfo.packageName
}
item?.run {
......@@ -38,7 +38,7 @@ class TaskManager {
fun isExist(task: Task): Boolean {
val item = tasks.find {
it.packageName == task.packageName
it.apkInfo.packageName == task.apkInfo.packageName
}
return item != null
......
......@@ -202,8 +202,8 @@ object AdbUtil {
exeCmdEcho(commands, true)
}
fun tcpCapture(tcpdump: String): Process? {
val captureCmd = "tcpdump -p -vv -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'" // >> /sdcard/capture.txt\n"
fun tcpCapture(path: String): Process? {
val captureCmd = "tcpdump -p -vv -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' >> $path"
val proc = getRootShell()
var dos: DataOutputStream? = null
......
......@@ -3,8 +3,12 @@ package com.duolebo.blyrobot.util
import com.duolebo.appbase.prj.bmtv.protocol.IProtocolConfig
class Config: IProtocolConfig {
private val isDebug = false
override fun getProtocolUrl(): String {
return ""
if (isDebug)
return "http://192.168.2.42:8080/manage/apkInfo/query.do"
return "http://test.duolebo.com/staging/apkInfo/query.do"
}
override fun getTvid(): String {
......@@ -15,6 +19,12 @@ class Config: IProtocolConfig {
return ""
}
fun getReportProtocolUrl(): String {
if (isDebug)
return "http://192.168.2.42:8080/manage/apkInfo/report.do"
return "http://test.duolebo.com/staging/apkReport/report.do"
}
companion object {
val instance = Config()
}
......
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