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

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
权限和执行
---------------------------------

权限执行[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?的更多相关文章

  1. [Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?

    转:http://blog.csdn.net/alexander_xfl/article/details/9150971 RunTime.exec()这个接口可以说是给我们开发者提供了一个很好的直观操 ...

  2. Android开发第一讲之目录结构和程序的执行流程

    1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...

  3. Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制

    Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...

  4. Android开发学习之路-Android6.0运行时权限

    在Android6.0以后开始,对于部分敏感的“危险”权限,需要在应用运行时向用户申请,只有用户允许的情况下这个权限才会被授予给应用.这对于用户来说,无疑是一个提升安全性的做法.那么对于开发者,应该怎 ...

  5. [Android开发常见问题-11] Unable to execute dex: Multiple dex files define 解决方法

    最近在开发一个工程,其中用到了一个开源的库项目Android-ViewPagerIndicator. 这个项目是作为一个库出现的,如下图: 这个项目中包含了android-support-v4.jar ...

  6. [Android开发常见问题-12] Android开发中debug.keystore如何使用。

    有些团度在开发较大的项目的时候会用到debug.keystore这种debug签名,那么这个东西怎么用呢?之前在导出签名包的时候只需要android tools -> export signed ...

  7. android 开发常见问题

    指定版本 就OK了 路径: android/app/build.gradle compile ("com.facebook.react:react-native:填你自己的RN版本" ...

  8. Android开发常见问题小结

    1.布局文件 自己写的布局文件无得使用 原因:导入了系统的R文件 修改:将android.R 这句注释 或者删除 2.Activity作为主窗口设置 Activity无法启动,或者要设置Activit ...

  9. Android开发常见问题系列之一:eclipse中adb.exe启动失败或者无法启动

    这种情况下大多数是因为存在kadb.exe在执行,或者adb.exe端口被占用. 1,检查是否存在kadb.exe程序正在执行 打开任务管理器,打开详细信息,按照字母顺序找到kadb.exe,结束进程 ...

随机推荐

  1. Darwin Streaming Server 简介

    Darwin Streaming Server     概要 Darwin Streaming Server简称DSS.DSS是Apple公司提供的开源实时流媒体播放服务器程序.整个程序使用C++编写 ...

  2. 30种oracle常见的等待事件说明

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这 ...

  3. Android开发 |常见的内存泄漏问题及解决办法

    在Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要 ...

  4. 为SQL表添加全文索引范例

    --范例: --为HR_Job中的JobTitle,JobDes创建全文索引 execute sp_fulltext_catalog 'boli188', 'create' --创建全文目录,boli ...

  5. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)宏的运行机理:1. ( (TYPE *)0 ) 将零转型为TY ...

  6. MyBatis 入门到精通(一) 了解MyBatis获取SqlSession

    MyBatis是什么? MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...

  7. UVA 10529-Dumb Bones(概率dp)

    题意: 给出放一个多米诺骨牌,向左向右倒的概率,求要放好n个骨牌,需要放置的骨牌的期望次数. 分析: 用到区间dp的思想,如果一个位置的左面右面骨牌都已放好,考虑,放中间的情况, dp[i]表示放好前 ...

  8. 《Python 学习手册4th》 第四章 介绍Python对象类型

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' ...

  9. Sql中判断“数据库"、"表"、"临时表"、"存储过程"和列”是否存在

    --判断数据库是否存在   IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME = ''库名'')      PRINT ''exists ...

  10. Apriori学习笔记

    Apriori算法是一种挖掘关联规则的频繁项集算法,是由Rakesh Agrawal和Ramakrishnan Srikant两位在1994年提出的布尔关联规则的频繁项集挖掘算法.算法的名字" ...