From f6747eed88af84a47e9c883d9d92daed3d7880d3 Mon Sep 17 00:00:00 2001 From: liuyang Date: Tue, 9 Oct 2018 13:56:36 +0800 Subject: [PATCH] =?UTF-8?q?APK=E5=9B=BE=E7=89=87=E6=8A=93=E5=8F=96?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=8F=8A=E8=BD=AE=E6=92=AD=E6=B5=81=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=8A=93=E5=8F=96=EF=BC=8C=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=20#BYLSE?= =?UTF-8?q?RVER-1438?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/assets/test.json | 2 +- .../java/com/duolebo/blyrobot/MainActivity.kt | 44 +++++++++++++++++-- .../com/duolebo/blyrobot/data/AppInfoData.kt | 13 ++++-- .../java/com/duolebo/blyrobot/data/Task.kt | 22 +++++++--- .../blyrobot/protocol/GetAppInfoProtocol.kt | 8 ++++ .../blyrobot/service/BylRobotService.kt | 7 --- .../com/duolebo/blyrobot/tools/TaskManager.kt | 13 ++++-- app/src/main/res/layout/activity_main.xml | 18 ++++---- app/src/main/res/layout/app_config_item.xml | 16 ++++++- 10 files changed, 112 insertions(+), 33 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ec3970f..d773b63 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { minSdkVersion 15 targetSdkVersion 22 versionCode 1 - versionName "1.0" + versionName "1.1" } signingConfigs { diff --git a/app/src/main/assets/test.json b/app/src/main/assets/test.json index 6962835..b184e53 100644 --- a/app/src/main/assets/test.json +++ b/app/src/main/assets/test.json @@ -1,5 +1,5 @@ { - "name": "电视家", + "name": "电视家2.0", "packageName": "com.elinkway.tvlive2", "launcher": "com.elinkway.tvlive2.activity.SplashActivity", "launchDelay": "15", diff --git a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt index 81cceaf..6020e5e 100644 --- a/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt +++ b/app/src/main/java/com/duolebo/blyrobot/MainActivity.kt @@ -1,6 +1,7 @@ package com.duolebo.blyrobot import android.content.Intent +import android.graphics.drawable.Drawable import android.os.Bundle import android.support.v4.content.LocalBroadcastManager import android.support.v7.app.AppCompatActivity @@ -12,7 +13,9 @@ import android.widget.Toast import com.duolebo.appbase.AppBaseHandler import com.duolebo.appbase.IAppBaseCallback import com.duolebo.appbase.IProtocol +import com.duolebo.blyrobot.activity.PackageListActivity import com.duolebo.blyrobot.data.ApkInfo +import com.duolebo.blyrobot.data.ApkPackageInfo import com.duolebo.blyrobot.data.AppInfoData import com.duolebo.blyrobot.data.Task import com.duolebo.blyrobot.protocol.GetAppInfoProtocol @@ -22,6 +25,7 @@ import com.duolebo.blyrobot.ui.AppConfigListItem import com.duolebo.blyrobot.util.AdbUtil import com.duolebo.blyrobot.util.Config import com.duolebo.blyrobot.util.Constants +import com.minhui.vpn.utils.ThreadProxy import kotlinx.android.synthetic.main.activity_main.* import java.util.* @@ -33,13 +37,14 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { private lateinit var appInfoAdapter: AppConfigAdapter private lateinit var refreshTimer: Timer + private var apkPackageInfo: List? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.i(TAG, "onCreate....") setContentView(R.layout.activity_main) - apkInfoProtocol = GetAppInfoProtocol(this, Config.instance) - this.dataHandler = AppBaseHandler(this) + getLocalAppList() this.appInfoAdapter = AppConfigAdapter() listView.adapter = this.appInfoAdapter @@ -65,6 +70,22 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { stopRobot() } startBtn.requestFocus() + + requestAppList() + } + + private fun requestAppList() { + apkInfoProtocol = GetAppInfoProtocol(this, Config.instance) + this.dataHandler = AppBaseHandler(this) + apkInfoProtocol.execute(this.dataHandler) + } + + private fun getLocalAppList() { + ThreadProxy.getInstance().execute(object : Runnable { + override fun run() { + apkPackageInfo = ApkPackageInfo.getAppInfos(applicationContext) + } + }) } private fun initRefreshTimer() { @@ -122,6 +143,21 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { } } + private fun getAppIcon(packageName: String): Drawable? { + var drawable:Drawable ?= null + apkPackageInfo?.run { + val targetPackage = this.find { + it.packageName == packageName + } + + if (targetPackage != null) { + drawable = targetPackage.applicationInfo.loadIcon(packageManager) + } + } + + return drawable + } + class AppConfigAdapter: BaseAdapter() { private val dataList = ArrayList() @@ -132,10 +168,12 @@ class MainActivity : AppCompatActivity(), IAppBaseCallback { } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - var itemView = convertView as AppConfigListItem + var itemView: AppConfigListItem if (convertView == null) { itemView = AppConfigListItem(parent.context) } + else + itemView = convertView as AppConfigListItem itemView.setData(dataList[position]) diff --git a/app/src/main/java/com/duolebo/blyrobot/data/AppInfoData.kt b/app/src/main/java/com/duolebo/blyrobot/data/AppInfoData.kt index e935df4..36ed6f9 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/AppInfoData.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/AppInfoData.kt @@ -1,22 +1,25 @@ package com.duolebo.blyrobot.data -import com.duolebo.appbase.IModel import com.duolebo.appbase.prj.XMLHelper +import com.duolebo.appbase.prj.bmtv.model.ModelBase import org.json.JSONArray import org.json.JSONObject -class AppInfoData : IModel { +class AppInfoData : ModelBase() { val apkInfos = ArrayList() + var result = -1 override fun from(json: JSONObject): Boolean { val data = json.optJSONArray("data") if (data != null) { - for (i in 0..data.length()) { + for (i in 0 until data.length()) { val apkInfo = ApkInfo() apkInfo.from(data.getJSONObject(i)) apkInfos.add(apkInfo) } } + result = 0 + return true } @@ -27,4 +30,8 @@ class AppInfoData : IModel { override fun from(p0: XMLHelper?): Boolean { return false } + + override fun getCode(): Int { + return result + } } \ No newline at end of file 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 3014197..55371ca 100644 --- a/app/src/main/java/com/duolebo/blyrobot/data/Task.kt +++ b/app/src/main/java/com/duolebo/blyrobot/data/Task.kt @@ -3,6 +3,7 @@ package com.duolebo.blyrobot.data import android.content.Context import android.os.Environment import android.util.Log +import android.widget.Toast import com.duolebo.appbase.AppBaseHandler import com.duolebo.appbase.IAppBaseCallback import com.duolebo.appbase.IProtocol @@ -10,10 +11,7 @@ import com.duolebo.blyrobot.protocol.ApkReportProtocol import com.duolebo.blyrobot.util.AdbUtil import com.duolebo.blyrobot.util.AppUtil import com.duolebo.blyrobot.util.Config -import net.gotev.uploadservice.ServerResponse -import net.gotev.uploadservice.UploadInfo -import net.gotev.uploadservice.UploadNotificationConfig -import net.gotev.uploadservice.UploadStatusDelegate +import net.gotev.uploadservice.* import net.gotev.uploadservice.ftp.FTPUploadRequest import net.gotev.uploadservice.ftp.UnixPermissions import org.json.JSONObject @@ -43,10 +41,12 @@ class Task : IAppBaseCallback { .getExternalStorageDirectory().absolutePath + "/capture.txt" private var uploadImages = ArrayList() + private var uploadId = "" private var channelIndex = 0 private var status = "0" + private var reportProtocol: ApkReportProtocol private var dataHandler:AppBaseHandler private lateinit var reportJson: JSONObject @@ -91,6 +91,18 @@ class Task : IAppBaseCallback { AdbUtil.stopApp(this.apkInfo.packageName) } + fun destroy() { + // 杀掉tcpdump进程 + AdbUtil.killTcpdump() + + // 退出应用 + AdbUtil.stopApp(this.apkInfo.packageName) + + // 取消ftp上传 + if (!uploadId.isNullOrEmpty()) + UploadService.stopUpload(uploadId) + } + private fun finish(result: Boolean) { this.taskListener?.run { onComplete(result) @@ -290,7 +302,7 @@ class Task : IAppBaseCallback { } } - val uploadId = uploadRequest.startUpload() + this.uploadId = uploadRequest.startUpload() Log.i(TAG, "upload id $uploadId") } catch (exc: Exception) { Log.e(TAG, exc.message, exc) diff --git a/app/src/main/java/com/duolebo/blyrobot/protocol/GetAppInfoProtocol.kt b/app/src/main/java/com/duolebo/blyrobot/protocol/GetAppInfoProtocol.kt index 2b47b3f..3cb2abd 100644 --- a/app/src/main/java/com/duolebo/blyrobot/protocol/GetAppInfoProtocol.kt +++ b/app/src/main/java/com/duolebo/blyrobot/protocol/GetAppInfoProtocol.kt @@ -2,6 +2,7 @@ package com.duolebo.blyrobot.protocol import android.content.Context import com.duolebo.appbase.IModel +import com.duolebo.appbase.net.Parser import com.duolebo.appbase.prj.bmtv.protocol.IProtocolConfig import com.duolebo.appbase.prj.bmtv.protocol.ProtocolBase import com.duolebo.blyrobot.data.AppInfoData @@ -10,6 +11,10 @@ class GetAppInfoProtocol(context: Context?, config: IProtocolConfig?) : Protocol val model = AppInfoData() + override fun prepareHttpBody(): ByteArray { + return "".toByteArray() + } + override fun prepareProtocolBody(p0: MutableMap?) { } @@ -21,4 +26,7 @@ class GetAppInfoProtocol(context: Context?, config: IProtocolConfig?) : Protocol return "" } + override fun requestHttpMethod(): Parser.ParserClient.HttpMethod { + return Parser.ParserClient.HttpMethod.GET + } } \ No newline at end of file diff --git a/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt b/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt index 3e05dc5..8f923f3 100644 --- a/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt +++ b/app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt @@ -33,7 +33,6 @@ class BylRobotService: Service() { Constants.CMD_START -> loadTask() Constants.CMD_STOP -> stopTask() } - loadTask() } } } @@ -78,12 +77,6 @@ class BylRobotService: Service() { TaskManager.instance.stop() } - private fun screenShot() { - Thread(Runnable { - - }).start() - } - private fun testKey() { Thread(Runnable { AdbUtil.sendMultiKey("down/up/right") 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 5d531be..b0da779 100644 --- a/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt +++ b/app/src/main/java/com/duolebo/blyrobot/tools/TaskManager.kt @@ -9,9 +9,13 @@ class TaskManager { val tasks = ArrayList() private var isRunning = false private var currentTask: Task ?= null + // 处理时间 + var updateTime = 0L private val runnable = Runnable { - while (isRunning && tasks.size > 0) { + val dist = System.currentTimeMillis() - updateTime + while (isRunning && tasks.size > 0 && dist > 6*60*60*1000) { + this.updateTime = System.currentTimeMillis() currentTask = tasks[0] currentTask!!.start() } @@ -20,7 +24,7 @@ class TaskManager { fun add(task: Task) { task.taskListener = object : Task.OnTaskListener { override fun onComplete(result: Boolean) { - remove(task) + Log.i(TAG, "task ${task.apkInfo.name} complete with result: $result") } } this.tasks.add(task) @@ -55,9 +59,12 @@ class TaskManager { } fun stop() { + updateTime = 0L this.tasks.forEach { - + it.destroy() } + + this.tasks.clear() this.isRunning = false } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 23ea9c5..512ef07 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,11 +5,20 @@ android:layout_height="match_parent" android:layout_width="match_parent"> + +