Android 中执行 shell 命令

在 Android 开发中,我们经常需要执行一些 shell 命令来完成一些特定的任务,比如获取设备信息、安装应用等。本文将介绍在 Android 中执行 shell 命令的几种方法,并给出相应的代码示例。

1. 使用 Runtime 类执行命令

Android 提供了 Runtime 类来执行命令。通过调用 Runtime 类的 exec() 方法,可以执行指定的命令,并返回一个 Process 对象,通过这个对象可以获取命令的输出结果。

下面是一个使用 Runtime 类执行 shell 命令的示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShellCommandExecutor {

    public static void main(String[] args) {
        try {
            // 执行命令
            Process process = Runtime.getRuntime().exec("ls");

            // 获取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("Exit code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上述代码执行了一个简单的命令 ls,并打印出命令的输出结果。你可以根据需要修改命令的内容。

2. 使用 ProcessBuilder 类执行命令

除了使用 Runtime 类,还可以使用 ProcessBuilder 类来执行命令。ProcessBuilder 类提供了更多的控制选项,比如可以设置命令的工作目录、环境变量等。

下面是一个使用 ProcessBuilder 类执行 shell 命令的示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShellCommandExecutor {

    public static void main(String[] args) {
        try {
            // 创建命令构建器
            ProcessBuilder processBuilder = new ProcessBuilder("ls");

            // 设置工作目录
            processBuilder.directory(new File("/sdcard"));

            // 执行命令
            Process process = processBuilder.start();

            // 获取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("Exit code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上述代码执行了一个简单的命令 ls,并设置了命令的工作目录为 /sdcard,你可以根据需要修改命令和工作目录的内容。

3. 使用 su 命令获取 root 权限执行命令

有些命令需要 root 权限才能执行,可以使用 su 命令来获取 root 权限。

下面是一个使用 su 命令获取 root 权限执行命令的示例代码:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class RootCommandExecutor {

    public static void main(String[] args) {
        try {
            // 获取 su 权限
            Process process = Runtime.getRuntime().exec("su");
            DataOutputStream outputStream = new DataOutputStream(process.getOutputStream());

            // 执行命令
            outputStream.writeBytes("ls\n");
            outputStream.flush();
            outputStream.writeBytes("exit\n");
            outputStream.flush();

            // 获取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("Exit code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用 su 命令获取 root 权限,并执行了一个简单的命令 ls。你可以根据需要修改命令的内容。

总结

本文介绍了在 Android 中执行 shell 命令的几种方法,包括使用 Runtime 类、ProcessBuilder 类以及 su 命令。通过这些方法,我们可以方便地执行各种 shell 命令来完成特定的任务。在使用这些方法时,需要注意命令的格式和权限的获取,以及