android在java代码里面运行shell脚本,使用shell脚本杀死目标进程

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的示例,仅供参考!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值