Android Java执行Shell命令

简介:

主要介绍Android或Java应用中如何以默认用户或root用户执行Shell命令,ShellUtils的API介绍、使用及使用场景(如静默安装和卸载、修改hosts文件、拷贝文件)。使用纯Java实现,所以对Java程序同样适用。

很多朋友在使用TrineaAndroidCommon@Github中的ShellUtils工具类了,那就大致介绍下他的功能吧。

1、API介绍

以下是ShellUtils中最终执行命令的方法execCommand

Java

1

public CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg)


其中commands表示依次执行的shell命令数组

isRoot表示是否以su用户执行(需要手机已经root)

isNeedResultMsg表示是否存储命令执行成功及失败后的信息。

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

* result of command

*

* @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-5-16

*/

public static class CommandResult {

/** result of command **/

public int result;

/** success message of command result **/

public String successMsg;

/** error message of command result **/

public String errorMsg;

public CommandResult(int result){

this.result = result;

}

public CommandResult(int result, String successMsg, String errorMsg){

this.result = result;

this.successMsg = successMsg;

this.errorMsg = errorMsg;

}

}

CommandResult 为返回的数据结构,如下其中result表示执行的结果,根据linux命令执行规则,0表示成功,其他为相应错误码。

successMsg存储执行成功后的输出信息,errorMsg存储执行失败后的输出信息。

如果isNeedResultMsg为false,successMsg和errorMsg会始终为空,而result依然为正常结果。

其他接口,Shell命令支持执行String(单个命令), List(多个命令),String[](多个命令)

见:ShellUtils.java#Api Guide

2、使用

(1)引入公共库
引入TrineaAndroidCommon@Github(欢迎star和fork^_^)作为你项目的library(如何拉取代码及添加公共库)。

(2) 调用上面介绍的execCommand函数,

注意有些命令可能运行时间较长,所以最好在线程中执行execCommand

3、使用场景

以目前自己的几个场景举下例子

(1) 静默安装和卸载

这个很多朋友已经用过了Android root权限静默安装或卸载应用,原理是执行命令:pm install apkFilePath及pm uninstall packageName

具体代码可见:PackageUtils installSilent(Context context, String filePath, String pmParams)

(2) 获取系统设置->存储->首选安装位置

原理是执行命令:pm get-install-location

具体代码可见:PackageUtils getInstallLocation()

(3) Android修改hosts文件

原理是执行命令:

mount -o rw,remount /system
echo “127.0.0.1 localhost” > /etc/hosts
echo “185.31.17.184 github.global.ssl.fastly.net” >> /etc/hosts
chmod 644 /etc/hosts

代码如下:

Java

1

2

3

4

5

6

List<String> commnandList = new ArrayList<String>();

commnandList.add("mount -o rw,remount /system");

commnandList.add("echo \"127.0.0.1 localhost\" > /etc/hosts");

commnandList.add("echo \"185.31.17.184 github.global.ssl.fastly.net\" >> /etc/hosts");

commnandList.add("chmod 644 /etc/hosts");

CommandResult result = ShellUtils.execCommand(commnandList, true);

用echo命令改hosts文件很牛逼哦,不用重启可以直接生效的哦。

(4) 拷贝文件

原理是执行命令:

mount -o rw,remount /system

cp /mnt/sdcard/xx.apk /system/app/

代码如下:

Java

1

2

String[] commands = new String[] { "mount -o rw,remount /system", "cp /mnt/sdcard/xx.apk /system/app/" };

CommandResult result = ShellUtils.execCommand(commands, true);

注意一般拷贝文件是不需要root的,上面用root是因为需要拷贝到/system/app/下面

目录
相关文章
|
13天前
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
78 30
|
26天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
54 20
|
1月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
63 12
|
3月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
348 7
|
3月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
85 1
|
4月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
106 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
4月前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
59 3
|
4月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
38 1
|
4月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
96 11
|
4月前
|
运维 监控 Java
使用jps命令查看Java进程
`jps`是Java开发者和系统管理员的得力助手,它简化了Java进程监控的过程,使得快速检查应用运行状态变得轻而易举。通过合理利用其提供的参数,可以高效地进行故障排查、性能监控及日常管理任务,确保Java应用稳定运行。
220 2

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    21
  • 3
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    52
  • 4
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    35
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    70
  • 6
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    111
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29
  • 8
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
    262
  • 9
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
    75
  • 10
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    36