android中执行shell命令有两种方式: 1.直接在代码中用java提供的Runtime 这个类来执行命令,以下为完整示例代码。 public void execCommand(String command) throws IOException { // start the ls command running //String[] args = new String[]{"sh", "-c", command}; Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(command); //这句话就是shell与高级语言间的调用 //如果有参数的话可以用另外一个被重载的exec方法 //实际上这样执行时启动了一个子进程,它没有父进程的控制台 //也就看不到输出,所以需要用输出流来得到shell执行后的输出 InputStream inputstream = proc.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); // read the ls output String line = ""; StringBuilder sb = new StringBuilder(line); while ((line = bufferedreader.readLine()) != null) { //System.out.println(line); sb.append(line); sb.append('\n'); } //tv.setText(sb.toString()); //使用exec执行不会等执行成功以后才返回,它会立即返回 //所以在某些情况下是很要命的(比如复制文件的时候) //使用wairFor()可以等待命令执行完成以后才返回 try { if (proc.waitFor() != 0) { System.err.println("exit value = " + proc.exitValue()); } } catch (InterruptedException e) { System.err.println(e); } } } 2.直接安装shell模拟器,即已经开发好的android应用,启动后类似windows的dos命令行,可以直接安装使用,可执行常用的linux命令,应用在附件。 shell.apk大小:455.51K所需财富值:5 已经过网络安全检测,放心下载 点击下载下载量:1
② Android Studio Terminal(命令)安装apk
点击AS下方Terminal
1.输入命令:cd /你的Android SDK/platform-tools 进入该目录下
2.将apk放到 platform-tools文件目录下
3.输入命令:adb install -r xxx.apk(xxx为第2步放在platform-tools下的apk文件)
PS:如果没有安装成功可能是设备里已经安装该应用需腔庆要进启脊行卸载:
手动卸载或者在Terminal中输入adb uninstall 你的应用包名(伍旁握卸载该应用)
具体如下:
D:* * * >cd D:* * * platform-tools
D:* * ****platform-tools>adb install -r newclock.apk
Performing Streamed Install
Success
③ android apk 怎么执行adb shell命令
Android中执行adb shell命令的方式如下:
/**
* 执行一个shell命令,并返回字符串值
*
* @param cmd
* 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"})
* @param workdirectory
* 命令执行路径(例如:"system/bin/")
* @return 执行结果组成的字符串
* @throws IOException
*/
public static synchronized String run(String[] cmd, String workdirectory)
throws IOException {
StringBuffer result = new StringBuffer();
try {
// 创建操作系统进程(也可以由Runtime.exec()启动)
// Runtime runtime = Runtime.getRuntime();
// Process proc = runtime.exec(cmd);
// InputStream inputstream = proc.getInputStream();
ProcessBuilder builder = new ProcessBuilder(cmd);
InputStream in = null;
// 设置一个路径(绝对路径了就不一定需要)
if (workdirectory != null) {
// 设置工作目录(同上)
builder.directory(new File(workdirectory));
// 合并标准错误和标准输出
builder.redirectErrorStream(true);
// 启动一个新进程
Process process = builder.start();
// 读取进程标准输出流
in = process.getInputStream();
byte[] re = new byte[1024];
while (in.read(re) != -1) {
result = result.append(new String(re));
}
}
// 关闭输入流
if (in != null) {
in.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return result.toString();
}
android系统底层采用的是linux,所以adb这样的linux指令是可以在java代码中调用的,可以使用ProcessBuilder 这个方法来执行对应的指令。还可以通过如下方式执行:
Process p = Runtime.getRuntime().exec("ls");
String data = null;
BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String error = null;
while ((error = ie.readLine()) != null
&& !error.equals("null")) {
data += error + "\n";
}
String line = null;
while ((line = in.readLine()) != null
&& !line.equals("null")) {
data += line + "\n";
}
Log.v("ls", data);