android上root权限的代码,工具类还提供在手机上执行指令的方法。PS:并不是所有手机都能root成功,开发项目时尽量不要考虑root,这个代码看看就行。
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; } } |
原文:http://blog.csdn.net/u014311042/article/details/41984361