要在android應用程式中使用root許可權,那麼運行程式的裝置必須具有root許可權
public static boolean runRootCommand(String command) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command+"\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { Log.d(TAG, "the device is not rooted, error message: " + e.getMessage()); return false; } finally { try { if (os != null) { os.close(); } if(process != null) { process.destroy(); } } catch (Exception e) { e.printStackTrace(); } } return true; }
如果裝置擷取了root許可權,那麼程式執行su命令時,就會提示使用者進行授權,
寫個小程式需要用到擷取ROOT許可權,在網上找了好久,發現這種方法可行,前提時裝置必須已經破解過!能執行su命令。
一、建一個方法:代碼如下:
package cn.ycmoon.utility;import java.io.DataOutputStream;import android.app.Activity;import android.util.Log;public class SystemManager extends Activity{ /** * 應用程式運行命令擷取 Root許可權,裝置必須已破解(獲得ROOT許可權) * @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot); * @return 應用程式是/否擷取Root許可權 */ public static boolean RootCommand(String command) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage()); return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } Log.d("*** DEBUG ***", "Root SUC "); return true; }}
二、在應用程式的MainActivity方法中:二、在應用程式的MainActivity方法中:
public class MainActivity extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String apkRoot="chmod 777 "+getPackageCodePath(); SystemManager.RootCommand(apkRoot); }}
這樣,在應用程式啟動並執行時候,會彈出訊息對話方塊“應用程式已擷取root許可權”