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

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/下面

相关文章:

  • 简介SQL数据库
  • KeyMob移动广告聚合平台服务_广告聚合平台_工具
  • IDEA的快捷键
  • 仿新浪微盾客户端项目简介三
  • IIS提示“异常详细信息: System.Runtime.InteropServices.ExternalException: 无法执行程序”...
  • linux 公网主机被***了
  • 【Mysql 学习】 MERGE表方面的问题(二)
  • win8 开发之旅(7) --五子棋游戏开发
  • java中的String类型(不知道理解的好不,请教大神)
  • leetcode 237 Delete Node in a Linked List python
  • 【转】Java 项目UML反向工程转化工具
  • 新一代编程:scala泛函编程技术-唠叨
  • 音乐还在陪伴我
  • RTB业务知识之2-Impression概念和关键属性
  • 触摸事件之响应者链验证
  • Angular6错误 Service: No provider for Renderer2
  • Babel配置的不完全指南
  • docker容器内的网络抓包
  • ES6 ...操作符
  • Fastjson的基本使用方法大全
  • Java|序列化异常StreamCorruptedException的解决方法
  • java第三方包学习之lombok
  • js ES6 求数组的交集,并集,还有差集
  • js 实现textarea输入字数提示
  • leetcode-27. Remove Element
  • MobX
  • Mysql数据库的条件查询语句
  • Python 基础起步 (十) 什么叫函数?
  • SwizzleMethod 黑魔法
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • VuePress 静态网站生成
  • vue-router的history模式发布配置
  • 服务器之间,相同帐号,实现免密钥登录
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端技术周刊 2019-02-11 Serverless
  • 日剧·日综资源集合(建议收藏)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​批处理文件中的errorlevel用法
  • #{} 和 ${}区别
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $NOIp2018$劝退记
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (6)添加vue-cookie
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (搬运以学习)flask 上下文的实现
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (十一)手动添加用户和文件的特殊权限
  • (转载)利用webkit抓取动态网页和链接
  • ****Linux下Mysql的安装和配置