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
3f1fa42c
Commit
3f1fa42c
authored
Sep 25, 2018
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
root shell
parent
de0b3030
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
268 additions
and
15 deletions
+268
-15
MainActivity.kt
app/src/main/java/com/duolebo/blyrobot/MainActivity.kt
+14
-3
Task.kt
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
+6
-2
BylRobotService.kt
...main/java/com/duolebo/blyrobot/service/BylRobotService.kt
+1
-1
AdbUtil.kt
app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt
+18
-9
ShellUtils.java
app/src/main/java/com/duolebo/blyrobot/util/ShellUtils.java
+220
-0
activity_main.xml
app/src/main/res/layout/activity_main.xml
+7
-0
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/src/main/java/com/duolebo/blyrobot/MainActivity.kt
View file @
3f1fa42c
...
...
@@ -5,9 +5,11 @@ import android.os.Bundle
import
android.support.v4.content.LocalBroadcastManager
import
android.support.v7.app.AppCompatActivity
import
android.util.Log
import
android.widget.Button
import
com.duolebo.blyrobot.service.BylRobotService
import
com.duolebo.blyrobot.util.AdbUtil
import
com.duolebo.blyrobot.util.Constants
import
com.duolebo.blyrobot.util.ShellUtils
import
kotlinx.android.synthetic.main.activity_main.*
class
MainActivity
:
AppCompatActivity
()
{
...
...
@@ -18,14 +20,23 @@ class MainActivity : AppCompatActivity() {
Log
.
i
(
TAG
,
"onCreate...."
)
setContentView
(
R
.
layout
.
activity_main
)
// val result = ShellUtils.execCommand("killall", true)
// Log.i(TAG, result.errorMsg + " " + result.errorMsg)
val
hasRoot
=
AdbUtil
.
checkRootPermission
()
if
(
hasRoot
)
{
Log
.
i
(
TAG
,
"rooted..."
)
textView
.
setText
(
R
.
string
.
tips_device_rooted
)
}
else
{
textView
.
setText
(
R
.
string
.
tips_device_not_root
)
}
startRobotService
()
val
startBtn
=
findViewById
<
Button
>(
R
.
id
.
startBtn
)
startBtn
.
setOnClickListener
{
startRobot
()
}
val
stopBtn
=
findViewById
<
Button
>(
R
.
id
.
stopBtn
)
stopBtn
.
setOnClickListener
{
stopRobot
()
}
...
...
app/src/main/java/com/duolebo/blyrobot/data/Task.kt
View file @
3f1fa42c
...
...
@@ -48,9 +48,13 @@ class Task {
}
}
fun
launchApp
(
reset
:
Boolean
=
tru
e
)
{
fun
launchApp
(
reset
:
Boolean
=
fals
e
)
{
if
(
reset
)
{
AdbUtil
.
resetApp
(
this
.
packageName
)
try
{
AdbUtil
.
resetApp
(
this
.
packageName
)
}
catch
(
e
:
java
.
lang
.
Exception
)
{
e
.
printStackTrace
()
}
}
AdbUtil
.
launchApp
(
"$packageName/$launcher"
)
...
...
app/src/main/java/com/duolebo/blyrobot/service/BylRobotService.kt
View file @
3f1fa42c
...
...
@@ -53,7 +53,7 @@ class BylRobotService: Service() {
// proc?.destroy()
}
}
},
2000
,
10
*
1000
)
},
2000
,
1
8
0
*
1000
)
}
private
fun
initBroadcast
()
{
...
...
app/src/main/java/com/duolebo/blyrobot/util/AdbUtil.kt
View file @
3f1fa42c
...
...
@@ -13,6 +13,11 @@ object AdbUtil {
const
val
LINE_BREAK
=
"\n"
const
val
EXIT
=
"exit"
fun
checkRootPermission
():
Boolean
{
val
proc
=
getRootShell
()
return
proc
!=
null
}
fun
getRootShell
():
Process
?
{
var
proc
:
Process
?
=
null
try
{
...
...
@@ -45,17 +50,14 @@ object AdbUtil {
fun
exeCmdEcho
(
commands
:
ArrayList
<
String
>,
root
:
Boolean
=
false
)
{
Log
.
i
(
TAG
,
"exe cmd echo: $commands"
)
val
exeCommands
=
ArrayList
<
String
>()
if
(
root
)
exeCommands
.
add
(
"su"
)
exeCommands
.
addAll
(
commands
)
exeCommands
.
add
(
EXIT
)
val
results
=
sendCommands
(
exeCommands
)
val
results
=
sendCommands
(
exeCommands
,
root
)
for
(
line
in
results
!!
)
{
Log
.
i
(
TAG
,
"echo line: $line"
)
}
}
fun
sendCommands
(
commands
:
ArrayList
<
String
>):
List
<
String
>?
{
fun
sendCommands
(
commands
:
ArrayList
<
String
>
,
root
:
Boolean
=
false
):
List
<
String
>?
{
val
results
=
ArrayList
<
String
>()
var
status
=
-
1
if
(
commands
.
isEmpty
())
{
...
...
@@ -69,17 +71,23 @@ object AdbUtil {
var
dos
:
DataOutputStream
?
=
null
try
{
proc
=
Runtime
.
getRuntime
().
exec
(
SHELL
)
proc
=
if
(
root
)
Runtime
.
getRuntime
().
exec
(
ROOT_SHELL
)
else
Runtime
.
getRuntime
().
exec
(
SHELL
)
dos
=
DataOutputStream
(
proc
!!
.
outputStream
)
for
(
command
in
commands
)
{
if
(
command
.
isEmpty
())
{
continue
}
dos
.
write
(
command
.
toByteArray
()
)
dos
.
write
Bytes
(
command
)
dos
.
writeBytes
(
LINE_BREAK
)
dos
.
flush
()
}
dos
.
writeBytes
(
EXIT
)
dos
.
flush
()
status
=
proc
.
waitFor
()
errorMsg
=
StringBuilder
()
...
...
@@ -243,7 +251,8 @@ object AdbUtil {
}
fun
killTcpdump
()
{
exeCmdEcho
(
"killall tcpdump"
,
true
)
exeCmdEcho
(
"killall"
,
true
)
// exeCmdEcho("killall tcpdump", true)
}
fun
resetApp
(
packageName
:
String
)
{
...
...
@@ -255,7 +264,7 @@ object AdbUtil {
}
fun
stopApp
(
packageName
:
String
)
{
exeCmdEcho
(
"am force-stop $packageName"
)
exeCmdEcho
(
"am force-stop $packageName"
,
true
)
}
}
\ No newline at end of file
app/src/main/java/com/duolebo/blyrobot/util/ShellUtils.java
0 → 100644
View file @
3f1fa42c
package
com
.
duolebo
.
blyrobot
.
util
;
import
java.io.BufferedReader
;
import
java.io.DataOutputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.util.List
;
/**
* ShellUtils
* <ul>
* <strong>Check root</strong>
* <li>{@link ShellUtils#checkRootPermission()}</li>
* </ul>
* <ul>
* <strong>Execte command</strong>
* <li>{@link ShellUtils#execCommand(String, boolean)}</li>
* <li>{@link ShellUtils#execCommand(String, boolean, boolean)}</li>
* <li>{@link ShellUtils#execCommand(List, boolean)}</li>
* <li>{@link ShellUtils#execCommand(List, boolean, boolean)}</li>
* <li>{@link ShellUtils#execCommand(String[], boolean)}</li>
* <li>{@link ShellUtils#execCommand(String[], boolean, boolean)}</li>
* </ul>
*/
public
class
ShellUtils
{
public
static
final
String
COMMAND_SU
=
"su"
;
public
static
final
String
COMMAND_SH
=
"sh"
;
public
static
final
String
COMMAND_EXIT
=
"exit\n"
;
public
static
final
String
COMMAND_LINE_END
=
"\n"
;
private
ShellUtils
()
{
throw
new
AssertionError
();
}
/**
* check whether has root permission
*
* @return
*/
public
static
boolean
checkRootPermission
()
{
return
execCommand
(
"echo root"
,
true
,
false
).
result
==
0
;
}
/**
* execute shell command, default return result msg
*
* @param command command
* @param isRoot whether need to run with root
* @return
* @see ShellUtils#execCommand(String[], boolean, boolean)
*/
public
static
CommandResult
execCommand
(
String
command
,
boolean
isRoot
)
{
return
execCommand
(
new
String
[]
{
command
},
isRoot
,
true
);
}
/**
* execute shell commands, default return result msg
*
* @param commands command list
* @param isRoot whether need to run with root
* @return
* @see ShellUtils#execCommand(String[], boolean, boolean)
*/
public
static
CommandResult
execCommand
(
List
<
String
>
commands
,
boolean
isRoot
)
{
return
execCommand
(
commands
==
null
?
null
:
commands
.
toArray
(
new
String
[]
{}),
isRoot
,
true
);
}
/**
* execute shell commands, default return result msg
*
* @param commands command array
* @param isRoot whether need to run with root
* @return
* @see ShellUtils#execCommand(String[], boolean, boolean)
*/
public
static
CommandResult
execCommand
(
String
[]
commands
,
boolean
isRoot
)
{
return
execCommand
(
commands
,
isRoot
,
true
);
}
/**
* execute shell command
*
* @param command command
* @param isRoot whether need to run with root
* @param isNeedResultMsg whether need result msg
* @return
* @see ShellUtils#execCommand(String[], boolean, boolean)
*/
public
static
CommandResult
execCommand
(
String
command
,
boolean
isRoot
,
boolean
isNeedResultMsg
)
{
return
execCommand
(
new
String
[]
{
command
},
isRoot
,
isNeedResultMsg
);
}
/**
* execute shell commands
*
* @param commands command list
* @param isRoot whether need to run with root
* @param isNeedResultMsg whether need result msg
* @return
* @see ShellUtils#execCommand(String[], boolean, boolean)
*/
public
static
CommandResult
execCommand
(
List
<
String
>
commands
,
boolean
isRoot
,
boolean
isNeedResultMsg
)
{
return
execCommand
(
commands
==
null
?
null
:
commands
.
toArray
(
new
String
[]
{}),
isRoot
,
isNeedResultMsg
);
}
/**
* execute shell commands
*
* @param commands command array
* @param isRoot whether need to run with root
* @param isNeedResultMsg whether need result msg
* @return <ul>
* <li>if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and
* {@link CommandResult#errorMsg} is null.</li>
* <li>if {@link CommandResult#result} is -1, there maybe some excepiton.</li>
* </ul>
*/
public
static
CommandResult
execCommand
(
String
[]
commands
,
boolean
isRoot
,
boolean
isNeedResultMsg
)
{
int
result
=
-
1
;
if
(
commands
==
null
||
commands
.
length
==
0
)
{
return
new
CommandResult
(
result
,
null
,
null
);
}
Process
process
=
null
;
BufferedReader
successResult
=
null
;
BufferedReader
errorResult
=
null
;
StringBuilder
successMsg
=
null
;
StringBuilder
errorMsg
=
null
;
DataOutputStream
os
=
null
;
try
{
process
=
Runtime
.
getRuntime
().
exec
(
isRoot
?
COMMAND_SU
:
COMMAND_SH
);
os
=
new
DataOutputStream
(
process
.
getOutputStream
());
for
(
String
command
:
commands
)
{
if
(
command
==
null
)
{
continue
;
}
// donnot use os.writeBytes(commmand), avoid chinese charset error
os
.
write
(
command
.
getBytes
());
os
.
writeBytes
(
COMMAND_LINE_END
);
os
.
flush
();
}
os
.
writeBytes
(
COMMAND_EXIT
);
os
.
flush
();
result
=
process
.
waitFor
();
// get command result
if
(
isNeedResultMsg
)
{
successMsg
=
new
StringBuilder
();
errorMsg
=
new
StringBuilder
();
successResult
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getInputStream
()));
errorResult
=
new
BufferedReader
(
new
InputStreamReader
(
process
.
getErrorStream
()));
String
s
;
while
((
s
=
successResult
.
readLine
())
!=
null
)
{
successMsg
.
append
(
s
);
}
while
((
s
=
errorResult
.
readLine
())
!=
null
)
{
errorMsg
.
append
(
s
);
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
if
(
os
!=
null
)
{
os
.
close
();
}
if
(
successResult
!=
null
)
{
successResult
.
close
();
}
if
(
errorResult
!=
null
)
{
errorResult
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
if
(
process
!=
null
)
{
process
.
destroy
();
}
}
return
new
CommandResult
(
result
,
successMsg
==
null
?
null
:
successMsg
.
toString
(),
errorMsg
==
null
?
null
:
errorMsg
.
toString
());
}
/**
* result of command
* <ul>
* <li>{@link CommandResult#result} means result of command, 0 means normal, else means error, same to excute in
* linux shell</li>
* <li>{@link CommandResult#successMsg} means success message of command result</li>
* <li>{@link CommandResult#errorMsg} means error message of command result</li>
* </ul>
*
* @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-5-16
*/
public
static
class
CommandResult
{
/** result of command **/
public
int
result
;
/** success message of command result **/
public
String
successMsg
;
/** error message of command result **/
public
String
errorMsg
;
public
CommandResult
(
int
result
)
{
this
.
result
=
result
;
}
public
CommandResult
(
int
result
,
String
successMsg
,
String
errorMsg
)
{
this
.
result
=
result
;
this
.
successMsg
=
successMsg
;
this
.
errorMsg
=
errorMsg
;
}
}
}
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
3f1fa42c
...
...
@@ -22,6 +22,13 @@
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:text=
"停止"
/>
<TextView
android:id=
"@+id/textView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"@color/colorAccent"
android:layout_marginTop=
"20dp"
/>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
3f1fa42c
<resources>
<string
name=
"app_name"
>
DLB辅助分析
</string>
<string
name=
"tips_device_not_root"
>
未获取到root权限
</string>
<string
name=
"tips_device_rooted"
>
获取到root权限
</string>
</resources>
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