android上root权限的代码,工具类还提供在手机上执行指令的方法。PS:并不是所有手机都能root成功,开发项目时尽量不要考虑root,这个代码看看就行。
[1].[代码] [Java]代码 跳至 [1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
package
com.linin.utils;
import
java.io.DataInputStream;
import
java.io.DataOutputStream;
import
java.io.IOException;
/**
* root权限工具类
*
* @author linin
*
*/
public
class
RootUtil {
private
static
final
String TAG =
"linin.root"
;
private
static
boolean
mHaveRoot =
false
;
/**
* 判断机器Android是否已经root,即是否获取root权限
*/
public
static
boolean
haveRoot() {
if
(!mHaveRoot) {
int
ret = execRootCmdSilent(
"echo test"
);
// 通过执行测试命令来检测
if
(ret != -
1
) {
L.i(TAG,
"have root!"
);
mHaveRoot =
true
;
}
else
{
L.i(TAG,
"not root!"
);
}
}
else
{
L.i(TAG,
"mHaveRoot = true, have root!"
);
}
return
mHaveRoot;
}
/** 获取root权限 */
public
static
boolean
root() {
try
{
Runtime.getRuntime().exec(
new
String[] {
"/system/bin/su"
,
"-c"
,
"chmod 777 /dev/graphics/fb0"
});
}
catch
(IOException e) {
e.printStackTrace();
L.i(TAG,
"root fail!"
);
return
false
;
}
L.i(TAG,
"root success!"
);
return
true
;
}
/**
* 执行命令并且输出结果
*/
public
static
String execRootCmd(String cmd) {
String result =
""
;
DataOutputStream dos =
null
;
DataInputStream dis =
null
;
try
{
Process p = Runtime.getRuntime().exec(
"su"
);
// 经过Root处理的android系统即有su命令
dos =
new
DataOutputStream(p.getOutputStream());
dis =
new
DataInputStream(p.getInputStream());
L.i(TAG, cmd);
dos.writeBytes(cmd +
"\n"
);
dos.flush();
dos.writeBytes(
"exit\n"
);
dos.flush();
String line =
null
;
while
((line = dis.readLine()) !=
null
) {
L.d(
"result"
, line);
result += line;
}
p.waitFor();
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
if
(dos !=
null
) {
try
{
dos.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
if
(dis !=
null
) {
try
{
dis.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
return
result;
}
/**
* 执行命令但不关注结果输出
*/
public
static
int
execRootCmdSilent(String cmd) {
int
result = -
1
;
DataOutputStream dos =
null
;
try
{
Process p = Runtime.getRuntime().exec(
"su"
);
dos =
new
DataOutputStream(p.getOutputStream());
L.i(TAG, cmd);
dos.writeBytes(cmd +
"\n"
);
dos.flush();
dos.writeBytes(
"exit\n"
);
dos.flush();
p.waitFor();
result = p.exitValue();
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
if
(dos !=
null
) {
try
{
dos.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
return
result;
}
}
|