Android的底层实际是Linux内核,当然在shell环境下可以运行Linux命令,尤其是经过root处理的android系统,基本上可以通过调用Linux命令完全控制手机,
下面的RootCmd.java代码就是实现运行Linux外部命令。

package my.Android.code;

import Android.os.Environment;
import dalvik.annotation.Signature;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;

public final class RootCmd
{
//执行linux命令并且输出结果
protected static Vector execRootCmd(String paramString)
{
Vector localVector = new Vector();
try
{
Process localProcess = Runtime.getRuntime().exec("su ");//经过Root处理的Android系统即有su命令
OutputStream localOutputStream = localProcess.getOutputStream();
DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);
InputStream localInputStream = localProcess.getInputStream();
DataInputStream localDataInputStream = new DataInputStream(localInputStream);
String str1 = String.valueOf(paramString);
String str2 = str1 + "\n";
localDataOutputStream.writeBytes(str2);
localDataOutputStream.flush();
String str3 = localDataInputStream.readLine();
localVector.add(str3);
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
return localVector;
}
catch (Exception localException)
{
localException.printStackTrace();
}
}

//执行linux命令但不关注结果输出
protected static int execRootCmdSilent(String paramString)
{
try
{
Process localProcess = Runtime.getRuntime().exec("su");
Object localObject = localProcess.getOutputStream();
DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream)localObject);
String str = String.valueOf(paramString);
localObject = str + "\n";
localDataOutputStream.writeBytes((String)localObject);
localDataOutputStream.flush();
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
localObject = localProcess.exitValue();
return localObject;
}
catch (Exception localException)
{
localException.printStackTrace();
}
}

//判断机器Android是否已经root,即是否获取root权限
protected static boolean haveRoot()
{

int i = execRootCmdSilent("echo test"); //通过执行测试命令来检测
if (i != -1)return true;
retrun false;
}

}

更多相关文章

  1. Android(安卓)4.4 KitKat 支持 u 盘功能
  2. Android之常用adb指令
  3. android adb命令
  4. 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件
  5. android(1)(四种点击事件)
  6. Android中Activity状态的保存和恢复:onSaveInstanceState和onRest
  7. Android——你可能不知道的Debug细节
  8. android调用shell命令及权限问题
  9. Android(安卓)Java执行Shell命令

随机推荐

  1. Activity的启动模式和onNewIntent
  2. 最完整Android(安卓)Studio插件整理 (转)
  3. AIDL使用和Binder机制详解
  4. android 利用java反射调用系统类的隐藏方
  5. Android使用getIdentifier()方法根据资源
  6. 让你的代码减少三倍!使用kotlin开发Androi
  7. Android(安卓)电量分析之Battery Histori
  8. Android(安卓)6.0运行时权限 (危险权限)
  9. android自定义大小对话框
  10. Android原生(Native)C开发之六:libpng移植