很多朋友在使用TrineaAndroidCommon@Github中的ShellUtils工具类了,那就大致介绍下他的功能吧。
1、API介绍
1
|
public
CommandResult
execCommand
(
String
[
]
commands
,
boolean
isRoot
,
boolean
isNeedResultMsg
)
|
isRoot表示是否以su用户执行(需要手机已经root)
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 Trinea 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
代码如下:
1
2
3
4
5
6
|
List
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/
代码如下:
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/下面
转载地址:http://www.trinea.cn/android/android-java-execute-shell-commands/