Android运行底层linux外部命令的实现
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实现字体闪烁动画的方法
  2. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  3. 在Fragment中设置控件点击方法,执行失败。
  4. Android(安卓)bluetooth介绍(四): a2dp connect流程分析
  5. Android(安卓)命令行编译、打包生成apk文件
  6. Ionic 运行报错No resource identifier found for attribute 'ap
  7. android 开机直接运行app并当做手机桌面
  8. Android(安卓)之 AsyncTask 异步任务
  9. Android出现java.lang.RuntimeException: Can't toast on a thre

随机推荐

  1. Android锁屏与解屏相关代码分析
  2. Android 开发者从0到1发布一个微信小程序
  3. Android搜索控件的基本使用方法
  4. 开博第一日
  5. Android结合Retrofit实现统一加解密处理(G
  6. 深入探索Android稳定性优化
  7. Android自定义视图
  8. Android与WebView的同步和异步访问机制
  9. Android消息循环的同步屏障机制及UI渲染
  10. android中的下载问题