Commit 661cd827 authored by liuyang's avatar liuyang

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

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