当前位置: 首页 > news >正文

android su执行命令

通过Runtime.getRuntime().exec("su")启动su进程,然后使用DataOutputStream向其写入要执行的命令。命令执行完成后需要调用process.waitFor()等待进程结束,并妥善关闭所有流资源


import java.io.DataOutputStream;public class SuCommandExecutor {private static final String TAG = "SuCommandExecutor";/*** 执行需要root权限的单个命令* @param command 要执行的命令* @return 命令执行结果*/public static String execSuCmd(String command) {String output = "";Process process = null;DataOutputStream os = null;DataInputStream is = null;try {// 启动su进程获取root权限process = Runtime.getRuntime().exec("su");os = new DataOutputStream(process.getOutputStream());// 写入要执行的命令os.writeBytes(command + "\n");os.writeBytes("exit\n");os.flush();// 等待命令执行完成int exitCode = process.waitFor();// 读取命令输出is = new DataInputStream(process.getInputStream());byte[] buffer = new byte[is.available()];is.read(buffer);output = new String(buffer);} catch (Exception e) {e.printStackTrace();output = "Exception: " + e.getMessage();} finally {// 关闭所有流资源try {if (os != null) {os.close();}if (is != null) {is.close();}if (process != null) {process.destroy();}} catch (Exception e) {e.printStackTrace();}}return output;}/*** 静默执行root命令(不读取输出)* @param command 要执行的命令* @return 执行结果代码*/public static int execRootCmdSilent(String command) {int result = -1;DataOutputStream dos = null;try {Process process = Runtime.getRuntime().exec("su");dos = new DataOutputStream(process.getOutputStream());dos.writeBytes(command + "\n");dos.flush();dos.writeBytes("exit\n");dos.flush();process.waitFor();result = process.exitValue();} catch (Exception e) {e.printStackTrace();} finally {if (dos != null) {try {dos.close();} catch (IOException e) {e.printStackTrace();}}}return result;}/*** 测试设备是否具有su执行权限* @return 测试结果*/public static boolean testSuPermission() {try {Process process = Runtime.getRuntime().exec("su");DataOutputStream dos = new DataOutputStream(process.getOutputStream());dos.writeBytes("id\n");dos.writeBytes("exit\n");dos.flush();int exitCode = process.waitFor();return exitCode == 0;} catch (Exception e) {return false;}}public static void main(String[] args) {// 测试su权限boolean hasPermission = testSuPermission();System.out.println("设备是否具有su权限: " + hasPermission);if (hasPermission) {// 执行示例命令String result = execSuCmd("ls -l /system");System.out.println("命令执行结果: " + result);}}
}
import java.io.DataOutputStream;new Thread(new Runnable() {@Overridepublic void run() {try {Process process = Runtime.getRuntime().exec("su");DataOutputStream dos = new DataOutputStream(process.getOutputStream());dos.writeBytes("echo 72 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo in > /sys/class/gpio/gpio72/direction"+"\n");dos.flush();dos.writeBytes("echo 78 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo in > /sys/class/gpio/gpio78/direction"+"\n");dos.flush();dos.writeBytes("echo 98 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo in > /sys/class/gpio/gpio98/direction"+"\n");dos.flush();dos.writeBytes("echo 97 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo out > /sys/class/gpio/gpio97/direction"+"\n");dos.flush();dos.writeBytes("echo 62 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo out > /sys/class/gpio/gpio62/direction"+"\n");dos.flush();dos.writeBytes("echo 63 > /sys/class/gpio/export"+"\n");dos.flush();dos.writeBytes("echo out > /sys/class/gpio/gpio63/direction"+"\n");dos.flush();dos.close();} catch (Exception e) {e.printStackTrace();}}}).start();

关键注意事项

  • 设备要求‌:执行su命令前必须确认设备已root,且应用获得了su执行权限。
  • 权限申请‌:首次执行su命令时,系统会弹出授权对话框请求用户确认。
  • 异常处理‌:必须妥善处理IOException等异常情况,特别是在某些Android主板上可能出现执行异常4。
  • 资源管理‌:使用完毕后必须关闭DataOutputStream和Process等资源,避免内存泄漏。
  • 系统限制‌:普通应用无法直接访问系统自带的su程序,需要通过SuperSU等工具或系统root来获取权限。

该实现提供了完整的su命令执行功能,包括权限测试、命令执行和异常处理,能够满足Android应用中执行root权限命令的需求。

http://www.dtcms.com/a/577436.html

相关文章:

  • 面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(2)
  • 从数据孤岛到智能决策:企业能碳管理破局五维策略
  • 构建面向信创生态的数据中台(一):骨架与血液——DML/DDL职责划分与执行机制
  • C语言-数据结构-1-动态数组
  • iOS 审核 上架 被拒 4.3a 【改革】【灾难来袭】
  • 从0开始学算法——第二天(时间、空间复杂度)
  • Jenkins使用指南1
  • 在 macOS 上使用 Homebrew 安装 MySQL 8.0 完整指南
  • redis 在网站开发中怎么用江西网站建设销售电话
  • AIoT | 软件:Astra MCP边缘算力构建详解
  • Apache Paimon 查询全流程深度分析
  • 网站中英文切换代码企业服务器配置方案
  • 专业的内蒙古网站建设160外发加工网
  • 团队学习与企业破局
  • 编程语言|前端开发——WebAssembly 和 JavaScript 该怎么选?
  • 佛山美容网站建设广州旅游网站建设设计公司
  • 深入理解HTTPS协议:从密码学基础到TLS 1.3实战
  • rhcse----DNS
  • 苍穹外卖资源点整理+个人错误解析-Day05-Redis、店铺营业状态设置
  • Vue 3.5 新API解析:响应式革命、SSR黑科技与开发体验飞跃
  • 【tips】项目中 package.json的 “type“对于文件的导入导出的区别
  • 【科研绘图系列】R语言绘制曲线图(curve plot)
  • 骏域网站百度信息流是什么
  • 【科研绘图系列】R语言绘制地图(map plot)
  • 【C 语言面试】高频考点深度解析
  • 【AI】拆解神经网络“技术高墙”:一条基于“根本原理-补丁理论-AI部署”哲学的学习路径
  • 让 Elasticsearch Delete By Query 请求立即生效
  • HarmonyOS开发-系统AI能力-语音转文字
  • 巨鹿企业做网站儋州网站建设培训学校
  • 建站优化收费下载网页图片