有时候我们写 Android APP,需要让它获取 ROOT 权限,那么如何让 APP 去向系统申请呢?下面提供一个方法,前提是系统是已经 ROOT 权限了,能够执行能 su 命令。如果不能,可以参考上一篇: 获取Android系统的ROOT权限 。
1. 首先编写一个 SystemManager 类。
01 |
package net.nowamagic.magicapp_v17; |
02 |
03 |
import java.io.DataOutputStream; |
04 |
05 |
import android.app.Activity; |
06 |
import android.util.Log; |
07 |
08 |
public class SystemManager extends Activity { |
09 |
|
10 |
/** |
11 |
* 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限) |
12 |
* @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot); |
13 |
* @return 应用程序是/否获取Root权限 |
14 |
*/ |
15 |
public static boolean RootCommand(String command) |
16 |
{ |
17 |
Process process = null ; |
18 |
DataOutputStream os = null ; |
19 |
try |
20 |
{ |
21 |
process = Runtime.getRuntime().exec( "su" ); |
22 |
os = new DataOutputStream(process.getOutputStream()); |
23 |
os.writeBytes(command + "\n" ); |
24 |
os.writeBytes( "exit\n" ); |
25 |
os.flush(); |
26 |
process.waitFor(); |
27 |
} catch (Exception e) |
28 |
{ |
29 |
Log.d( "*** DEBUG ***" , "ROOT REE" + e.getMessage()); |
30 |
return false ; |
31 |
} finally |
32 |
{ |
33 |
try |
34 |
{ |
35 |
if (os != null ) |
36 |
{ |
37 |
os.close(); |
38 |
} |
39 |
process.destroy(); |
40 |
} catch (Exception e) |
41 |
{ |
42 |
} |
43 |
} |
44 |
Log.d( "*** DEBUG ***" , "Root SUC " ); |
45 |
return true ; |
46 |
} |
47 |
|
48 |
} |
2. 然后在 MainActivity 中加入这么两句:
01 |
public class MainActivity extends Activity |
02 |
{ |
03 |
public void onCreate(Bundle savedInstanceState) |
04 |
{ |
05 |
super .onCreate(savedInstanceState); |
06 |
setContentView(R.layout.main); |
07 |
String apkRoot= "chmod 777 " +getPackageCodePath(); |
08 |
SystemManager.RootCommand(apkRoot); |
09 |
} |
10 |
} |
运行 APP,即可向系统申请 ROOT 权限了。