每日一贴,今天的内容关键字为权限执行

RunTime.exec()这个接口可以说是给我们开发者供给了一个很好的直观操纵底层操纵系统的机遇,但是这个接口的使用还有很多需要注意的问题。由于要完全的分析这个接口需要较大的篇幅,我在这里只针对一点停止分析“如何故root权限执行多条指令

1.这里首先面临的是root权限,这个需要将手机停止root,具体方法可以通过360一键root来搞定。

2.先来看一下这段代码

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("su");
runtime.exec("cmd1");
runtime.exec("cmd2");

这里,执行su是向系统请求root权限,proc是返回执行su的这个独立进程。

下面来看一下cmd1和cmd2,我们假设这两个命令都需要root权限,那么按照上述方法写的话会发明cmd1和cmd2都会出现permission denied。

这是为什么呢?

因为su命令只会使得当前的进程获得root权限,也就是使得proc获得root权限,而不是让整个应用都具有root权限,又由于前面cmd1和cmd2停止runtime.exec的时候又各自存在于一个独立的进程中,所以不具备root权限。

那么应当怎么来解决呢?往下看

3.让全部指令处在一个进程中

    每日一道理
盈盈月光,我掬一杯最清的;落落余辉,我拥一缕最暖的;灼灼红叶,我拾一片最热的;萋萋芳草,我摘一束最灿的;漫漫人生,我要采撷世间最重的———毅力。
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("su;cmd1;cmd2");

我满怀欢喜地执行上述代码,首先我是知道“cmd_a;cmd_b;cmd_c”这样的写法是准确的,而且经过诸如runtime("cd /mnt;ls -l") 这样的测试证明是可以执行的。

但是上述代码执行后就卡住了,貌似是进程挂起了,个人认为是su指令的问题,但是确实原因还不清楚,在这里希望哪位大牛知道原因可以告诉一下~先谢过!

4.继续探寻

既然proc这个进程已具有了root权限,那么我们就要想办法怎么在这个线程的前提下停止一些操纵,经过查询,终于求的真经,如下:

Process proc = runtime.exec("su");
DataOutputStream os = new DataOutputStream(proc.getOutputStream());
os.writeBytes("cmd1\n");
os.writeBytes("cmd2\n");
os.writeBytes("exit\n");
os.flush();

这里必定要注意cmd1和cmd2前面的“\n”是不可缺少的,由于DataOutputStream这个接口并不能直接操纵底层shell,所以需要"\n"来标记一条命令的结束。

ok,搞定。

纵情享受随心所欲的操纵操纵系统的快感吧~

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

---------------------------------
原创文章 By
权限和执行
---------------------------------

最新文章

  1. C# 获取本机指定类型指定网卡的Ip地址
  2. Web开发人员必读的12个网站
  3. Java 修改Windows注册表,以实现开机自启动应用程序。
  4. XStream使用详解
  5. git初步使用总结
  6. [转]ASP.NET MVC中你必须知道的13个扩展点
  7. BT5之配置笔记
  8. dplyr 数据操作 常用函数(1)
  9. 版本控制-Git对象
  10. TypeScript 中非代码模块的导入
  11. Android Material Design控件使用(一)——ConstraintLayout 约束布局
  12. 轨迹系列6——车载GPS对接方案汇总小结(809、自定义协议、前置库、WS)
  13. django进阶开发(一)--session
  14. python爬虫,使用urllib2库报错
  15. 筛选最小值---verilog
  16. Mongoose基础
  17. Android 监听 ScrollView 滑动到最底部。
  18. 细说ASP.NET Windows身份认证
  19. 0. 前言【从零开始学Spring Boot】
  20. 访问修饰符(C# 编程指南)

热门文章

  1. 【C#学习笔记】写文件
  2. Hibernate向MySQL插入中文数据--乱码解决
  3. 【js】js方法中直接跳转到servlet
  4. sql test
  5. 【LeetCode 231】Power of Two
  6. C++ 编程第二章小结
  7. 【随便走走】Vietnam
  8. Ajax异步请求PHP数据
  9. web服务器分析与设计(四)
  10. 修改 myeclipse8.5 servlet 模板