android上代码去执行"su"命令
来源:互联网 发布:v9调色软件 编辑:程序博客网 时间:2024/05/29 16:54
执行“su”命令有一个前提,那就是手机被root过或者是手机里面的busybox支持“su”命令,否则会执行失败。
具体实现代码如下:
import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import android.util.Log;public abstract class AExecuteAsRoot { public static boolean canRunRootCommands() { boolean retval = false; Process suProcess; try { suProcess = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); DataInputStream osRes = new DataInputStream(suProcess.getInputStream()); if (null != os && null != osRes) { // Getting the id of the current user to check if this is root os.writeBytes("id\n"); os.flush(); String currUid = osRes.readLine(); boolean exitSu = false; if (null == currUid) { retval = false; exitSu = false; Log.d("ROOT", "Can't get root access or denied by user"); } else if (true == currUid.contains("uid=0")) { retval = true; exitSu = true; Log.d("ROOT", "Root access granted"); } else { retval = false; exitSu = true; Log.d("ROOT", "Root access rejected: " + currUid); } if (exitSu) { os.writeBytes("exit\n"); os.flush(); } } } catch (Exception e) { // Can't get root ! // Probably broken pipe exception on trying to write to output // stream after su failed, meaning that the device is not rooted retval = false; Log.d("ROOT", "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage()); } return retval; } public final boolean execute() { boolean retval = false; try { ArrayList<String> commands = getCommandsToExecute(); if (null != commands && commands.size() > 0) { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); for (String currCommand : commands) { os.writeBytes(currCommand + "\n"); os.flush(); } os.writeBytes("exit\n"); os.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader( process.getInputStream())); int read; char[] buffer = new char[4096]; StringBuffer output = new StringBuffer(); while ((read = reader.read(buffer)) > 0) { output.append(buffer, 0, read); } reader.close(); try { int suProcessRetval = process.waitFor(); if (255 != suProcessRetval) { retval = true; } else { retval = false; } System.out.println("BBBB: "+output.toString()) ; } catch (Exception ex) { //Log.e("Error executing root action", ex); } } } catch (IOException ex) { Log.w("ROOT", "Can't get root access", ex); } catch (SecurityException ex) { Log.w("ROOT", "Can't get root access", ex); } catch (Exception ex) { Log.w("ROOT", "Error executing internal operation", ex); } return retval; } protected abstract ArrayList<String> getCommandsToExecute();}
import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class SuActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { Log.d("ROOT", "result:" + new ExecuteAsRoot().execute()); } catch (Exception e) { e.printStackTrace(); } } private class ExecuteAsRoot extends AExecuteAsRoot { @Override protected ArrayList<String> getCommandsToExecute() { ArrayList<String> list = new ArrayList<String>(); list.add("add kill-server"); list.add("adb devices"); return list; } }}
- android上代码去执行"su"命令
- android上代码去执行"su"命令
- 执行SU命令的错误
- android 执行shell命令代码
- android代码执行linux命令
- 【Android】 ProcessBuild Process su 命令
- 在Linux操作系统上执行java代码,执行交互式命令
- 在FreeBSD上要使用su命令
- Android中使用代码执行shell命令
- Android Java代码执行adb Shell命令
- Android Java代码执行adb Shell命令
- Android Java代码执行adb Shell命令
- su,su-,sudo命令
- Android系统su命令源码分析
- su命令
- su 命令
- su 从root用户切到普通用户执行命令
- Android在代码中执行shell命令,针对root命令
- 一道关于买房的面试题
- 2012总结
- web
- 诡异的pg安装
- (转)daemon进程原理及实现
- android上代码去执行"su"命令
- Linux服务器性能评估与优化
- Qt工程实现打开目录并选中指定文件的方法
- 性能计算公式
- 百度 JavaScript 开源库 与 百度地图 JavaScript API
- 思维导图软件 Mindjet MindManager 的入门视频
- 性能分析
- cvsnt-2.5.01.1976.msi破解版
- _countof()