Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
BYLAppRobot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuyang
BYLAppRobot
Commits
2d3f8212
Commit
2d3f8212
authored
Nov 20, 2018
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
APK抓包>从频道1开始依次抓取, ftp上传优化
#BYLSERVER-1693
parent
c76d67f3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
216 additions
and
75 deletions
+216
-75
ImageUploadTask.kt
...rc/main/java/com/duolebo/blyrobot/data/ImageUploadTask.kt
+137
-0
Task.kt
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
+11
-75
BylRobotService.kt
...main/java/com/duolebo/blyrobot/service/BylRobotService.kt
+2
-0
FtpManager.kt
app/src/main/java/com/duolebo/blyrobot/tools/FtpManager.kt
+66
-0
No files found.
app/src/main/java/com/duolebo/blyrobot/data/ImageUploadTask.kt
0 → 100644
View file @
2d3f8212
package
com.duolebo.blyrobot.data
import
android.content.Context
import
android.util.Log
import
com.duolebo.blyrobot.tools.FtpManager
import
com.duolebo.blyrobot.util.Config
import
net.gotev.uploadservice.*
import
net.gotev.uploadservice.ftp.FTPUploadRequest
import
net.gotev.uploadservice.ftp.UnixPermissions
import
java.io.File
/**
* 图片上传任务
*/
class
ImageUploadTask
(
private
var
context
:
Context
)
:
Thread
()
{
var
uploadImages
=
ArrayList
<
String
>()
var
uploadId
:
String
=
""
var
reUpload
=
false
var
isRunning
=
false
fun
from
(
task
:
Task
)
{
this
.
uploadImages
.
clear
()
this
.
uploadImages
.
addAll
(
task
.
uploadImages
)
}
fun
needReUpload
():
Boolean
{
if
(
this
.
isRunning
)
return
false
if
(!
this
.
reUpload
)
return
false
if
(
isUploadRunning
())
return
false
return
true
}
// 任务是否在上传队列中
private
fun
isUploadRunning
():
Boolean
{
val
runningTaskIds
=
UploadService
.
getTaskList
()
if
(
this
.
uploadId
in
runningTaskIds
)
return
true
return
false
}
override
fun
start
()
{
this
.
isRunning
=
true
super
.
start
()
}
override
fun
run
()
{
uploadImage
()
}
private
fun
uploadImage
()
{
Log
.
i
(
FtpManager
.
TAG
,
"upload image...."
)
try
{
val
uploadRequest
=
FTPUploadRequest
(
context
,
Config
.
instance
.
getFtpServer
(),
21
)
.
setUsernameAndPassword
(
Config
.
instance
.
getFtpUserName
(),
Config
.
instance
.
getFtpPassword
())
.
setNotificationConfig
(
UploadNotificationConfig
())
.
setCreatedDirectoriesPermissions
(
UnixPermissions
(
"777"
))
.
setSocketTimeout
(
15000
)
.
setConnectTimeout
(
15000
)
.
setDelegate
(
uploadImageCallback
())
.
setMaxRetries
(
4
)
this
.
uploadImages
.
forEach
{
val
uploadFile
=
File
(
it
)
if
(
uploadFile
.
exists
())
{
uploadRequest
.
addFileToUpload
(
it
,
Config
.
instance
.
getFtpRemotePath
()
+
uploadFile
.
name
)
}
}
this
.
uploadId
=
uploadRequest
.
startUpload
()
Log
.
i
(
FtpManager
.
TAG
,
"upload id $uploadId"
)
}
catch
(
exc
:
Exception
)
{
Log
.
e
(
FtpManager
.
TAG
,
exc
.
message
,
exc
)
}
}
private
fun
uploadComplete
(
errorCount
:
Int
)
{
Log
.
i
(
FtpManager
.
TAG
,
"upload errorCount: $errorCount"
)
this
.
isRunning
=
false
if
(
errorCount
>
0
&&
errorCount
>
this
.
uploadImages
.
size
/
3
)
{
this
.
reUpload
=
true
}
else
{
// 上传完毕直接删除问题
this
.
uploadImages
.
forEach
{
val
uploadFile
=
File
(
it
)
if
(
uploadFile
.
exists
())
{
uploadFile
.
delete
()
}
}
}
}
/**
* ftp 上传回调监听
*/
private
fun
uploadImageCallback
():
UploadStatusDelegate
{
val
totalUpload
=
this
.
uploadImages
.
size
Log
.
i
(
FtpManager
.
TAG
,
"total upload count : $totalUpload"
)
return
object
:
UploadStatusDelegate
{
override
fun
onCancelled
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?)
{
}
override
fun
onProgress
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?)
{
}
override
fun
onError
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?,
serverResponse
:
ServerResponse
?,
exception
:
java
.
lang
.
Exception
?)
{
val
uploadSize
=
uploadInfo
?.
successfullyUploadedFiles
!!
.
size
Log
.
i
(
FtpManager
.
TAG
,
"onError...uploadCount: $uploadSize"
)
}
override
fun
onCompleted
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?,
serverResponse
:
ServerResponse
?)
{
val
uploadSize
=
uploadInfo
?.
successfullyUploadedFiles
!!
.
size
Log
.
i
(
FtpManager
.
TAG
,
"onCompleted...uploadCount: $uploadSize"
)
uploadComplete
(
totalUpload
-
uploadSize
)
}
}
}
var
uploadTaskListener
:
OnUploadTaskListener
?
=
null
/**
* 图片上传任务状态
*/
interface
OnUploadTaskListener
{
fun
onComplete
()
}
}
\ No newline at end of file
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
View file @
2d3f8212
...
...
@@ -9,12 +9,10 @@ import com.duolebo.appbase.AppBaseHandler
import
com.duolebo.appbase.IAppBaseCallback
import
com.duolebo.appbase.IProtocol
import
com.duolebo.blyrobot.protocol.ApkReportProtocol
import
com.duolebo.blyrobot.tools.FtpManager
import
com.duolebo.blyrobot.util.AdbUtil
import
com.duolebo.blyrobot.util.AppUtil
import
com.duolebo.blyrobot.util.Config
import
net.gotev.uploadservice.*
import
net.gotev.uploadservice.ftp.FTPUploadRequest
import
net.gotev.uploadservice.ftp.UnixPermissions
import
org.json.JSONArray
import
org.json.JSONObject
import
java.io.File
...
...
@@ -39,8 +37,8 @@ class Task : Thread, IAppBaseCallback {
// 抓包存放路径
private
var
capturePath
=
AppUtil
.
getAbsoluteSdcardPath
()
+
"/capture.txt"
private
var
uploadImages
=
ArrayList
<
String
>()
private
var
uploadId
=
""
var
uploadImages
=
ArrayList
<
String
>()
var
uploadTask
:
ImageUploadTask
?=
null
private
var
channelIndex
=
0
var
status
:
State
=
State
.
IDLE
...
...
@@ -96,10 +94,6 @@ class Task : Thread, IAppBaseCallback {
* 执行任务
*/
private
fun
execute
()
{
//如果之前的上传任务还在执行,进行取消
if
(!
uploadId
.
isNullOrEmpty
())
{
UploadService
.
stopUpload
(
uploadId
)
}
this
.
status
=
State
.
RUNNING
this
.
prepareReport
()
...
...
@@ -147,15 +141,6 @@ class Task : Thread, IAppBaseCallback {
this
.
status
=
State
.
IDLE
this
.
channelIndex
=
0
this
.
uploadImages
.
clear
()
val
dir
=
File
(
this
.
taskPath
)
if
(
dir
.
exists
())
{
for
(
file
in
dir
.
listFiles
())
{
if
(
file
.
name
.
endsWith
(
".log"
))
continue
file
.
delete
()
}
}
}
fun
release
()
{
...
...
@@ -166,8 +151,10 @@ class Task : Thread, IAppBaseCallback {
AdbUtil
.
stopApp
(
this
.
apkInfo
.
packageName
)
// 取消ftp上传
// if (!uploadId.isNullOrEmpty())
// UploadService.stopUpload(uploadId)
this
.
uploadTask
?.
run
{
FtpManager
.
instance
.
cancelTask
(
this
)
}
}
fun
exit
()
{
...
...
@@ -409,63 +396,12 @@ class Task : Thread, IAppBaseCallback {
}
}
private
fun
uploadComplete
(
errorCount
:
Int
)
{
Log
.
i
(
TAG
,
"upload errorCount: $errorCount"
)
}
/**
* ftp 上传回调监听
*/
private
fun
uploadImageCallback
():
UploadStatusDelegate
{
val
totalUpload
=
this
.
uploadImages
.
size
Log
.
i
(
TAG
,
"total upload count : $totalUpload"
)
return
object
:
UploadStatusDelegate
{
override
fun
onCancelled
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?)
{
}
override
fun
onProgress
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?)
{
}
override
fun
onError
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?,
serverResponse
:
ServerResponse
?,
exception
:
java
.
lang
.
Exception
?)
{
val
uploadSize
=
uploadInfo
?.
successfullyUploadedFiles
!!
.
size
Log
.
i
(
TAG
,
"onError...uploadCount: $uploadSize"
)
}
override
fun
onCompleted
(
context
:
Context
?,
uploadInfo
:
UploadInfo
?,
serverResponse
:
ServerResponse
?)
{
val
uploadSize
=
uploadInfo
?.
successfullyUploadedFiles
!!
.
size
Log
.
i
(
TAG
,
"onCompleted...uploadCount: $uploadSize"
)
uploadComplete
(
totalUpload
-
uploadSize
)
}
}
}
//通过ftp上传图片到服务器
private
fun
uploadImage
()
{
Log
.
i
(
TAG
,
"upload image...."
)
try
{
val
uploadRequest
=
FTPUploadRequest
(
context
,
Config
.
instance
.
getFtpServer
(),
21
)
.
setUsernameAndPassword
(
Config
.
instance
.
getFtpUserName
(),
Config
.
instance
.
getFtpPassword
())
.
setNotificationConfig
(
UploadNotificationConfig
())
.
setCreatedDirectoriesPermissions
(
UnixPermissions
(
"777"
))
.
setSocketTimeout
(
15000
)
.
setConnectTimeout
(
15000
)
.
setDelegate
(
uploadImageCallback
())
.
setMaxRetries
(
4
)
this
.
uploadImages
.
forEach
{
val
uploadFile
=
File
(
it
)
if
(
uploadFile
.
exists
())
{
uploadRequest
.
addFileToUpload
(
it
,
Config
.
instance
.
getFtpRemotePath
()
+
uploadFile
.
name
)
}
}
this
.
uploadId
=
uploadRequest
.
startUpload
()
Log
.
i
(
TAG
,
"upload id $uploadId"
)
}
catch
(
exc
:
Exception
)
{
Log
.
e
(
TAG
,
exc
.
message
,
exc
)
}
val
uploadTask
=
ImageUploadTask
(
context
)
uploadTask
.
from
(
this
)
FtpManager
.
instance
.
addTask
(
uploadTask
)
this
.
uploadTask
=
uploadTask
}
/**
...
...
app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt
View file @
2d3f8212
...
...
@@ -16,6 +16,7 @@ import com.duolebo.blyrobot.data.ApkInfo
import
com.duolebo.blyrobot.data.AppInfoData
import
com.duolebo.blyrobot.data.Task
import
com.duolebo.blyrobot.protocol.GetAppInfoProtocol
import
com.duolebo.blyrobot.tools.FtpManager
import
com.duolebo.blyrobot.tools.TaskManager
import
com.duolebo.blyrobot.util.AdbUtil
import
com.duolebo.blyrobot.util.AppUtil
...
...
@@ -47,6 +48,7 @@ class BylRobotService: Service(), IAppBaseCallback {
override
fun
onCreate
()
{
super
.
onCreate
()
FtpManager
.
instance
.
init
(
this
)
initBroadcast
()
// requestAppList()
}
...
...
app/src/main/java/com/duolebo/blyrobot/tools/FtpManager.kt
0 → 100644
View file @
2d3f8212
package
com.duolebo.blyrobot.tools
import
com.duolebo.blyrobot.data.ImageUploadTask
import
net.gotev.uploadservice.UploadService
import
java.util.*
/**
* ftp上传管理类
* 因为ftp upload service 并不稳定,这里自己处理重新上传逻辑
*/
class
FtpManager
{
companion
object
{
val
instance
=
FtpManager
()
val
TAG
=
"RobotTaskFtpManager"
}
var
isRunning
=
false
val
uploadTasks
=
ArrayList
<
ImageUploadTask
>()
private
var
scheduleTime
:
Timer
?
=
null
fun
start
()
{
scheduleTime
?.
run
{
cancel
()
}
this
.
isRunning
=
true
scheduleTime
=
Timer
()
scheduleTime
!!
.
schedule
(
object
:
TimerTask
()
{
override
fun
run
()
{
while
(
isRunning
)
{
for
(
uploadTask
in
uploadTasks
)
{
if
(
uploadTask
.
needReUpload
())
{
uploadTask
.
start
()
}
}
Thread
.
sleep
(
1
*
60
*
1000
)
}
}
},
0
)
}
fun
addTask
(
task
:
ImageUploadTask
)
{
this
.
uploadTasks
.
add
(
task
)
task
.
uploadTaskListener
=
object
:
ImageUploadTask
.
OnUploadTaskListener
{
override
fun
onComplete
()
{
uploadTasks
.
remove
(
task
)
}
}
task
.
start
()
}
fun
cancelTask
(
task
:
ImageUploadTask
)
{
//如果之前的上传任务还在执行,进行取消
if
(!
task
.
uploadId
.
isEmpty
())
{
UploadService
.
stopUpload
(
task
.
uploadId
)
}
this
.
uploadTasks
.
remove
(
task
)
}
fun
stop
()
{
scheduleTime
?.
run
{
cancel
()
}
for
(
uploadTask
in
uploadTasks
)
{
cancelTask
(
uploadTask
)
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment