Android Java执行Shell命令
2017-02-16 10:14
579 查看
主要介绍Android或Java应用中如何以默认用户或root用户执行Shell命令,ShellUtils的API介绍、使用及使用场景(如静默安装和卸载、修改hosts文件、拷贝文件)。使用纯Java实现,所以对Java程序同样适用。
很多朋友在使用TrineaAndroidCommon@Github中的ShellUtils工具类了,那就大致介绍下他的功能吧。
1、API介绍
以下是ShellUtils中最终执行命令的方法execCommand:
Java
其中commands表示依次执行的shell命令数组isRoot表示是否以su用户执行(需要手机已经root)isNeedResultMsg表示是否存储命令执行成功及失败后的信息。Java
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
用echo命令改hosts文件很牛逼哦,不用重启可以直接生效的哦。 (4) 拷贝文件原理是执行命令:mount -o rw,remount /systemcp /mnt/sdcard/xx.apk /system/app/代码如下:Java
注意一般拷贝文件是不需要root的,上面用root是因为需要拷贝到/system/app/下面
很多朋友在使用TrineaAndroidCommon@Github中的ShellUtils工具类了,那就大致介绍下他的功能吧。
1、API介绍
以下是ShellUtils中最终执行命令的方法execCommand:
Java
1 | public CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) |
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; } } |
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
123456 | 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); |
1 2 | String[] commands = new String[] { "mount -o rw,remount /system", "cp /mnt/sdcard/xx.apk /system/app/" }; CommandResult result = ShellUtils.execCommand(commands, true); |
相关文章推荐
- Android Java执行Shell命令
- Android Java执行Shell命令
- Android中执行java命令的方法及java代码执行并解析shell命令
- Android中级篇之用JAVA代码执行shell命令
- Android java代码中如何执行shell命令
- Android 用java语言执行Shell命令
- Android或Java应用中如何以默认用户或root用户执行Shell命令
- Android中级篇之用JAVA代码执行shell命令
- android java 执行shell命令(笔记)
- java执行shell命令 获取ip配置信息
- JAVA代码执行shell命令 并解析
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- Java调用linux系统shell执行命令
- 在android执行shell命令
- Android执行shell命令
- android执行shell命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- 通过Java语言,执行Linux命令并获得反馈数据。--适用于Android系统
- java连接SSH服务器并执行shell命令
- Android执行shell命令