Android开发工具系列目录

  1. Android项目中Git工具的使用
  2. 史上最全Git命令使用手冊
  3. 史上最新最全的ADB命令行
  4. Android中的su命令使用
  5. Postman测试WebService接口
  6. 2022 Android studio 最全必用插件

su命令

  • <font color=#FF7E17>前言
  • <font color=#FF7E17>一、怎么使用su?
  • <font color=#FF7E17>二、代码异常情况
  • <font color=#FF7E17>三、Android ROOT

博客创建时间:2022.09.24
博客更新时间:2022.09.25

以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。


前言

在日常开发Android程序中,我们可能碰到在程序中获取su权限,然后获取io流,执行shell命令。但是Android system/xbin 下的 su 是系统原生带的 su 程序,只给有 system 和 shell 用户使用,普通app 无法访问。

要使普通 app也能 su ,就要替换系统的 su 程序,有专门的,比如 SuperSU。或者将系统root,这样普通程序就能有权限使用。


一、怎么使用su?

常见的使用代码如下,通过以下代码能让我们提权使用shell命令,做一些更高级的指令操作。比如我要给某个USB串口授权chmod 777 /dev/ttyACM

 // cmd="chmod 777 /dev/ttyACM"public static int execRootCmdSilent(String cmd) {int result = -1;DataOutputStream dos = null;try {Process p = Runtime.getRuntime().exec("su");dos = new DataOutputStream(p.getOutputStream());Log.i(TAG, cmd);dos.writeBytes(cmd + "\n");dos.flush();dos.writeBytes("exit\n");dos.flush();p.waitFor();result = p.exitValue();} catch (Exception e) {e.printStackTrace();} finally {if (dos != null) {try {dos.close();} catch (IOException e) {e.printStackTrace();}}}return result;}

设备是否有root权限可以通过代码进行测试,此处提供检测设备是否root过的权限

   /*** 判断机器Android是否已经root,即是否获取root权限*/public static boolean haveRoot() {// 通过执行测试命令来检测int ret = execRootCmdSilent("echo test");if (ret != -1) {Log.i(TAG, "have root!");return true;} else {Log.i(TAG, "not root!");return false;}}

二、代码异常情况

上面给出的代码是在Android系统被root过,或者手动授予了su操作命令,否则代码运行会出现两种异常情况(情况由本人亲测):

  1. java.io.IOException: Error running exec(). Command: [su] Working Directory: null Environment: null

    在Android 6.0及以下的真机和虚拟机中会出现以上的报错异常,意思就是没有su执行环境,无法执行su命令。

  2. java.io.IOException: Cannot run program “su”: error=13, Permission denied

    Android 7.0及以后的Android真机和模拟器是没有Root权限的,所以执行代码会出现权限denied。


三、Android ROOT

Android系统的超级用户一般命名为root,root是系统中唯一的超级用户。root权限是指Linux的系统管理员权限,类似于Windows系统中的Administrator。
安卓root权限具有系统中所有的权限,可以访问和修改你手机中几乎所有的文件(Android系统文件及用户文件,不包括ROM),启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。

Root的优点:

  1. 可以备份系统。
  2. 使用高级的程序,例如屏幕截图、root explorer等等。
  3. 修改或是删除系统的内部程序。
  4. 可以更改apk安装到data分区或是sd卡分区中,将程序安装到SD卡中
  5. 手机开发人员,需要使用命令行控制设备

Root风险:

  1. 如果在ROOT的过程中遇到问题,可能使手机变砖(无法开机)。
  2. 如果不小心安装了恶意软件,可能使手机中的个人隐私信息暴露。
  3. 容易被病毒软件、黑客伤害
  4. 个别手机厂商会检测用户是否曾进行ROOT操作,这可能与保修有关。

相关链接

  1. Android项目中Git工具的使用
  2. 史上最全Git命令使用手冊
  3. 史上最新最全的ADB命令行
  4. Android中的su命令使用
  5. Postman测试WebService接口
  6. 2022 Android studio 最全必用插件

扩展链接:

  1. Material Design UI方案使用讲解
  2. Material TextInputLayout使用详解
  3. Room数据库,用过你才知道好
  4. ART与Dalvik、JVM之间的关系你懂了吗
  5. 一篇文章弄懂Java多线程基础和Java内存模型

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

Android中的su命令使用相关推荐

  1. Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)

    一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...

  2. Android中的run-as命令引出升降权限的安全问题

    转载自:http://blog.csdn.net/jiangwei0910410003/article/details/51405631 一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天 ...

  3. Android系统篇之----Android中的run-as命令引出升降权限的安全问题 Linux中的setuid和se

    一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...

  4. android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...

    ## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...

  5. linux中su命令源码,Linux中的su命令的详细解释

    linxu下的su命令的主要作用是变更为其他使用者的身份执行命令,面由学习啦小编为大家整理了linux的su命令的详细解释的相关知识,希望对大家有帮助! 一.Linux中的su命令的详细解释 建议大家 ...

  6. android中的ping命令使用

    前言 在做Android开发时,有时我们需要知道设备的网络好不好,光看手机上的信号格数是不准确的,比如在广州南站,人那么多,如果带宽不够的话,虽然你看着信号是满格的,但是网速也会很慢,有些地方,人少, ...

  7. docker使用过程中遇到的Linux中的su命令

    遇到的Linux中的su命令 linux环境下,常常需要我们切换用户,通过不同的权限,可以控制系统的安全性.所以例如ES会明确要求不能用root用户进行开发. 于是我们需要使用su命令切换用户. 然而 ...

  8. Android录屏并利用FFmpeg转换成gif(三) 在Android中使用ffmpeg命令

    Android录屏并利用FFmpeg转换成gif(三) 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方 ...

  9. 学习转载:Android中常用shell命令详解

    https://blog.csdn.net/Z_HUALIN/article/details/77878609 设置adb环境变量 其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使 ...

最新文章

  1. 剑指offer面试题6:重建二叉树
  2. 实时通信技术之websocket
  3. iOS开发之protocol和delegate
  4. hdu3786 Floyd或搜索 水题
  5. Java基础:JDK1.5新特性
  6. 【解决方案】如何实现在HTML页面加载完毕后运行某个js
  7. select框怎么传值到服务端_前端简历中的项目经历怎么突出亮点?
  8. python 支付宝个人账单_金融支付财务融合业务-实践分享1:订单、账单、交易流水、账套知识解构、原理解析...
  9. 在位置 0 处没有任何行。_我家孩子最爱这个小零食,外酥里糯,没有任何添加剂,0失败教程...
  10. Oracle中的sql操作符 和分析函数
  11. Android 6.0 sensor 框架详解 (application层)
  12. 山海经电子书古文/翻译白话文版发布,免费电子书。
  13. mysql查看表编码_MySQL中使用SQL语句查看某个表的编码方法
  14. php计算macd,macd计算公式?MACD指标的原理是什么
  15. #foxpro(VFP) 入门(一) 常用命令
  16. 2020腾讯实习生客户端三轮面经
  17. 一般格式 | 分离变量法(三)| 偏微分方程(十五)
  18. 退休当月要干到月底吗_到退休年龄,是当月办理退休,还是提前一个月办理?...
  19. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?
  20. 训练营day01 数组 | 704-二分查找、27-移除元素

热门文章

  1. 情侣相处最佳模式(转)
  2. php stortm 老是闪退,pr加载界面闪退的原因是什么?
  3. 记录小问题(想到啥放啥)
  4. bootmgr快速修复win7_win7 iso镜像下载(Win7安装版_非GHOST ISO镜像)
  5. play-framework的安装配置(OS X和windows版)
  6. Caused by: org.xml.sax.SAXParseException;必须为元素类型 mapping 声明属性 resourse。
  7. PRML(3)--Chapter2(上)-概率分布-二元变量、多项式变量、高斯分布、指数族分布
  8. SNN ANN 多模态融合 神经网络发展过程的两个分支
  9. linux 创建连接命令 ln -s 软链接
  10. 告别难记的长域名!我的博客全新短域名上线