Android 运行底层linux外部命令的实现
16lz
2021-01-23
分类:Android 2012-04-06 21:15 600人阅读 评论(0) 收藏 举报 android linux string vector exception linux内核 Android运行底层linux外部命令的实现 android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。
[java] view plain copy
- packagemy.android.code;
- importandroid.os.Environment;
- importdalvik.annotation.Signature;
- importjava.io.BufferedReader;
- importjava.io.DataInputStream;
- importjava.io.DataOutputStream;
- importjava.io.File;
- importjava.io.FileReader;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.util.Vector;
- publicfinalclassRootCmd
- {
- //执行linux命令并且输出结果
- protectedstaticVectorexecRootCmd(StringparamString)
- {
- VectorlocalVector=newVector();
- try
- {
- ProcesslocalProcess=Runtime.getRuntime().exec("su");//经过Root处理的android系统即有su命令
- OutputStreamlocalOutputStream=localProcess.getOutputStream();
- DataOutputStreamlocalDataOutputStream=newDataOutputStream(localOutputStream);
- InputStreamlocalInputStream=localProcess.getInputStream();
- DataInputStreamlocalDataInputStream=newDataInputStream(localInputStream);
- Stringstr1=String.valueOf(paramString);
- Stringstr2=str1+"\n";
- localDataOutputStream.writeBytes(str2);
- localDataOutputStream.flush();
- Stringstr3=localDataInputStream.readLine();
- localVector.add(str3);
- localDataOutputStream.writeBytes("exit\n");
- localDataOutputStream.flush();
- localProcess.waitFor();
- returnlocalVector;
- }
- catch(ExceptionlocalException)
- {
- localException.printStackTrace();
- }
- }
- //执行linux命令但不关注结果输出
- protectedstaticintexecRootCmdSilent(StringparamString)
- {
- try
- {
- ProcesslocalProcess=Runtime.getRuntime().exec("su");
- ObjectlocalObject=localProcess.getOutputStream();
- DataOutputStreamlocalDataOutputStream=newDataOutputStream((OutputStream)localObject);
- Stringstr=String.valueOf(paramString);
- localObject=str+"\n";
- localDataOutputStream.writeBytes((String)localObject);
- localDataOutputStream.flush();
- localDataOutputStream.writeBytes("exit\n");
- localDataOutputStream.flush();
- localProcess.waitFor();
- localObject=localProcess.exitValue();
- returnlocalObject;
- }
- catch(ExceptionlocalException)
- {
- localException.printStackTrace();
- }
- }
- //判断机器Android是否已经root,即是否获取root权限
- protectedstaticbooleanhaveRoot()
- {
- inti=execRootCmdSilent("echotest");//通过执行测试命令来检测
- if(i!=-1)returntrue;
- retrunfalse;
- }
- }
更多相关文章
- android的m、mm、mmm编译命令的使用
- Android 命令行手动编译打包详解
- android 内核编译成功
- Android:adb shell am命令行发送Activity/Service/Broadcast
- 使用命令行编译Qt Android apps
- Android底层和中间层共同学习系列之android键盘映射
- Linux SVN命令