分类:Android 600人阅读 评论(0) 收藏 举报 android linux string vector exception linux内核 Android运行底层linux外部命令的实现 android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。

[java] view plain copy
  1. packagemy.android.code;
  2. importandroid.os.Environment;
  3. importdalvik.annotation.Signature;
  4. importjava.io.BufferedReader;
  5. importjava.io.DataInputStream;
  6. importjava.io.DataOutputStream;
  7. importjava.io.File;
  8. importjava.io.FileReader;
  9. importjava.io.InputStream;
  10. importjava.io.OutputStream;
  11. importjava.util.Vector;
  12. publicfinalclassRootCmd
  13. {
  14. //执行linux命令并且输出结果
  15. protectedstaticVectorexecRootCmd(StringparamString)
  16. {
  17. VectorlocalVector=newVector();
  18. try
  19. {
  20. ProcesslocalProcess=Runtime.getRuntime().exec("su");//经过Root处理的android系统即有su命令
  21. OutputStreamlocalOutputStream=localProcess.getOutputStream();
  22. DataOutputStreamlocalDataOutputStream=newDataOutputStream(localOutputStream);
  23. InputStreamlocalInputStream=localProcess.getInputStream();
  24. DataInputStreamlocalDataInputStream=newDataInputStream(localInputStream);
  25. Stringstr1=String.valueOf(paramString);
  26. Stringstr2=str1+"\n";
  27. localDataOutputStream.writeBytes(str2);
  28. localDataOutputStream.flush();
  29. Stringstr3=localDataInputStream.readLine();
  30. localVector.add(str3);
  31. localDataOutputStream.writeBytes("exit\n");
  32. localDataOutputStream.flush();
  33. localProcess.waitFor();
  34. returnlocalVector;
  35. }
  36. catch(ExceptionlocalException)
  37. {
  38. localException.printStackTrace();
  39. }
  40. }
  41. //执行linux命令但不关注结果输出
  42. protectedstaticintexecRootCmdSilent(StringparamString)
  43. {
  44. try
  45. {
  46. ProcesslocalProcess=Runtime.getRuntime().exec("su");
  47. ObjectlocalObject=localProcess.getOutputStream();
  48. DataOutputStreamlocalDataOutputStream=newDataOutputStream((OutputStream)localObject);
  49. Stringstr=String.valueOf(paramString);
  50. localObject=str+"\n";
  51. localDataOutputStream.writeBytes((String)localObject);
  52. localDataOutputStream.flush();
  53. localDataOutputStream.writeBytes("exit\n");
  54. localDataOutputStream.flush();
  55. localProcess.waitFor();
  56. localObject=localProcess.exitValue();
  57. returnlocalObject;
  58. }
  59. catch(ExceptionlocalException)
  60. {
  61. localException.printStackTrace();
  62. }
  63. }
  64. //判断机器Android是否已经root,即是否获取root权限
  65. protectedstaticbooleanhaveRoot()
  66. {
  67. inti=execRootCmdSilent("echotest");//通过执行测试命令来检测
  68. if(i!=-1)returntrue;
  69. retrunfalse;
  70. }
  71. }

更多相关文章

  1. android的m、mm、mmm编译命令的使用
  2. Android 命令行手动编译打包详解
  3. android 内核编译成功
  4. Android:adb shell am命令行发送Activity/Service/Broadcast
  5. 使用命令行编译Qt Android apps
  6. Android底层和中间层共同学习系列之android键盘映射
  7. Linux SVN命令

随机推荐

  1. android弹出和关闭软键盘
  2. Android studio3.0 使用Lambda表达式
  3. 在android中,如何用指定的浏览器打开某网
  4. IOS/Android 读取蓝牙设备电量信息
  5. Android Activity或者Fragment 向Adapter
  6. android 经纬度 double类型 转换成 度分
  7. android之短信发不出去,短信空指针,smsMana
  8. Android SmartRefreshLayout的使用
  9. Android 状态栏背景颜色修改与状态栏字体
  10. AndroidStudio导入ViewPagerIndicator以