android开发中使用shell脚本的比较少,即使使用也是在adb里面直接运行,但是今天我就记录一下怎么在java里面执行shell脚本。
注意:这个需要配置selinux权限,或者你可以直接把selinux权限关闭才能运行
一、写一个shell脚本
这里我写了两个,都是查询目标进程号,然后杀死,你可以按照自己的要求随意写,我只记录一下我的脚本
1、killProcessOne.sh
#!/bin/bash
# 获取包含关键字"test_adapter"的进程号
pid=$(ps aux | grep "test_adapter" | grep -v grep | awk '{print $2}')
# 杀掉对应的进程
if [ -n "$pid" ]; then
kill -9 $pid
echo "进程 $pid 已被终止"
else
echo "未找到包含关键字为 test_adapter 的进程"
fi
2、killProcessTwo.sh
#!/bin/bash
# 搜索关键字为"test_adapter"的进程号
pid=$(pgrep "test_adapter")
# 检查是否找到了进程号
if [ -z "$pid" ]; then
echo "未找到包含'test_adapter'关键字的进程。"
else
# 杀掉进程
echo "正在杀死进程:$pid"
kill -9 $pid
echo "进程已成功杀死。"
fi
二、在android工程里面放入shell脚本
在你的工程里面src/main中新建assets目录,将shell脚本放入里面,如下:
三、在代码里面写一个执行脚本的工具类
直接上代码吧,这个是主要的
package com.utility;
import android.os.SystemProperties;
import android.widget.Toast;
import com.DeveloperModeApplication;
import com.util.LogUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* @Created on 2023/9/5 9:51
* author : liu.jingdong
* description :运行shell脚本工具类
*/
public class ExecuteShellUtil {
private static final String TAG = "ExecuteShellUtil";
public static void executeShellScript(String shellName) {
LogUtils.i(TAG, "executeShellScript shellName == " + shellName);
try {
// 打开 shell 脚本文件
InputStream inputStream = DeveloperModeApplication.getApplication().getAssets().open(shellName);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// 逐行读取并执行 shell 脚本
String line;
ProcessBuilder processBuilder = new ProcessBuilder("/system/bin/sh");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
OutputStream outputStream = process.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line + "\n");
bufferedWriter.flush();
}
bufferedWriter.write("exit\n");
bufferedWriter.flush();
process.waitFor();
Toast.makeText(DeveloperModeApplication.getApplication(), "shell脚本执行完成", Toast.LENGTH_LONG).show();
// 获取 shell 脚本的输出结果
// BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// StringBuilder output = new StringBuilder();
// String outputLine;
// while ((outputLine = reader.readLine()) != null) {
// output.append(outputLine).append("\n");
// }
// 处理输出结果,例如显示在界面上
// ...
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
四、调用executeShellScript方法执行对应的脚本
ExecuteShellUtil.executeShellScript("killProcessOne.sh");
以上就是在android里面使用java代码运行shell的示例,仅供参考!!!