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
80c21a83
Commit
80c21a83
authored
Nov 22, 2018
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
APK图片抓取识别及轮播流地址抓取, 增加自动清理图片缓存逻辑及部分异常捕捉
#BYLSERVER-1438
parent
74a9b4f1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
74 deletions
+96
-74
build.gradle
app/build.gradle
+1
-1
Task.kt
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
+95
-73
No files found.
app/build.gradle
View file @
80c21a83
...
...
@@ -13,7 +13,7 @@ android {
minSdkVersion
15
targetSdkVersion
22
versionCode
15
versionName
"1.4.4
0
"
versionName
"1.4.4
5
"
}
signingConfigs
{
...
...
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
View file @
80c21a83
...
...
@@ -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
{
...
...
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