该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import android.annotation.SuppressLint;

import android.os.*;

import java.io.*;

import java.lang.Process;

public class RootShellTask extends Thread

{

@SuppressLint("HandlerLeak")

Handler h = new Handler(){

@Override

public void handleMessage(Message msg)

{

// TODO: Implement this method

super.handleMessage(msg);

Bundle b = msg.getData();

int flag = b.getInt("flag");

if (flag == FLAG_START)

{

boolean root = b.getBoolean("root");

String command = b.getString("data");

RootShellTask.this.call.onStart(command, root);

}

else if (flag == FLAG_RUN)

{

String output = b.getString("data");

RootShellTask.this.call.onRun(output);

}

else if (flag == FLAG_FINISH)

{

int code = b.getInt("data");

RootShellTask.this.call.onFinish(code);

}

}

};

public void run()

{

Message m;

Bundle b;

try

{

String shell = root ? "su" : "sh";

process = Runtime.getRuntime().exec(shell, envp);

os = new DataOutputStream(process.getOutputStream());

if (call != null)

{

m = new Message();

b = new Bundle();

b.putInt("flag", FLAG_START);

b.putString("data", command);

b.putBoolean("root", root);

m.setData(b);

h.sendMessage(m);

}

os.write((command).getBytes());

os.write(("\n").getBytes());

os.write(("exit $?\n").getBytes());

os.flush();

if (call != null)

{

stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));

stderr = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String out = "";

String err = "";

while ((out = stdout.readLine()) != null | (err = stderr.readLine()) != null)

{

StringBuffer s = new StringBuffer();

if (out != null)

{

s.append(out + "\n");

}

if (err != null)

{

s.append(err + "\n");

}

m = new Message();

b = new Bundle();

b.putInt("flag", FLAG_RUN);

b.putString("data", s.toString());

m.setData(b);

h.sendMessage(m);

}

}

int code = process.waitFor();

if (call != null)

{

m = new Message();

b = new Bundle();

b.putInt("flag", FLAG_FINISH);

b.putInt("data", code);

m.setData(b);

h.sendMessage(m);

}

}

catch (Exception e)

{

e.printStackTrace();

}

finally

{

try

{

if (os != null)

{

os.close();

}

if (stderr != null)

{

stderr.close();

}

if (stdout != null)

{

stdout.close();

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

int FLAG_FINISH = 0;

int FLAG_RUN = 1;

int FLAG_START = 2;

private Process process;

private DataOutputStream os;

private BufferedReader stderr;

private BufferedReader stdout;

private RootShellCallback call;

private String command;

private String[] envp;

private boolean root;

public RootShellTask(String command)

{

this(command, true);

}

public RootShellTask(String command, RootShellCallback call)

{

this(command, true, call);

}

public RootShellTask(String command, boolean root)

{

this(command, root, null);

}

public RootShellTask(String command, boolean root, RootShellCallback call)

{

this(command, root, call, null);

}

public RootShellTask(String command, boolean root, RootShellCallback call, String[] envp)

{

this.call = call;

this.envp = envp;

this.command = command;

this.root = root;

}

public void setProcess(Process process)

{

this.process = process;

}

public Process getProcess()

{

return process;

}

}

interface RootShellCallback

{

void onStart(String command, boolean root);

void onRun(String output);

void onFinish(int exitCode);

}

java process 重启_JAVA Process启动sh 后的问题相关推荐

  1. java catch后面_java 异常被catch后 将会继续执行的操作

    我就废话不多说了,大家还是直接看代码吧~ import java.util.UUID; public class Test { public static void main(String[] arg ...

  2. java闪屏_Java Tomcat 启动闪屏-原因之一---配置问题

    如Tomcat启动异常,首先确保Java安装和Tomcat安装版本是否对应,环境变量是否配置正确,如检查通过后,依然启动闪屏.可以依次解决: 1.在Tomcat启动文件Startup.bat之中最后添 ...

  3. java服务 重启_Java服务重新启动4或5次

    我正在运行 Java服务来从数据库中轮询数据. 在我的课上,我有一个线程,每隔5秒在db中查找数据-- 在特定的时间(比如在营业时间之后的下午6点),我让我的线程睡到一些配置的时间延迟. 问题:当我让 ...

  4. 深入研究java.lang.Runtime类,Process类

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...

  5. 问题:org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0

    在用as开发项目的过程中,我碰到了这个错误,在网上找到了如下的解决方法,做下总结: 被编译的代码或资源有问题( finished with non-zero exit value 1): 出现这种编译 ...

  6. java linux 服务_java项目部署Linux服务器几种启动方式总结经验

    一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...

  7. 网页启动JAVA是崩溃_启动画面后本机应用程序崩溃

    我是React Native的新手 . 我在Expo XDE中创建了一个新的空白项目,当我试图在我的Android设备上运行它时,每次它在启动画面后崩溃 . 这只是一个简单的空白应用程序 . 没有日志 ...

  8. java定时器停止_java 定时器中任务的启动、停止、再启动

    package com.cvicse.ump.timer.service; import java.util.Date; import java.util.Timer; import com.cvic ...

  9. phpstudy_pro启动mysql后循环停止又重启

    phpstudy_pro启动mysql后循环停止又重启. 最初判断是与之前安装的mysql冲突,于是把mysql卸载后删除所有相关文件和相关系统变量,重启还是没有解决问题.报错2003. 然后卸载ph ...

最新文章

  1. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
  2. 干货 | 拒当调参师工程师:超参数搜索算法一览
  3. 使用Cloudformation集成Spring Boot和EC2
  4. windows 批处理
  5. bezier曲线_套娃成神:贝塞尔曲线
  6. 中国教育与软件企业的共同误区
  7. configure报错C compiler cannot create executables
  8. CAD数据与ArcGIS数据的互转换
  9. 代码学习-Linux内核网卡收包过程(NAPI)
  10. 系统学习NLP(十二)--文本表示综述
  11. 为什要学习烹饪?学习烹饪迫在眉睫
  12. 一种解决各种 macos unlocker 无法下载 Darwin.iso 的方法
  13. 树莓派能学linux吗,用树莓派能高效学习Linux和Python吗?
  14. DirectX 基础总结笔记
  15. 电偶极子的MATLAB场模拟
  16. 像追女神一样学好java~
  17. 双十一来临,仓储物流快递安全保障解决方案
  18. 左连接,右连接与自然连接语法以及注意点
  19. linux 安装apache apu,Apache编译安装
  20. nginx修改文件上传大小配置

热门文章

  1. java 简易的闹钟设计_JavaFX实现简易时钟效果
  2. rest framework 节流
  3. SecureRandom-随机数的生成
  4. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
  5. 在Js或者cess后加版本号 防止浏览器缓存
  6. Ubuntu 10.04 分辨率调整
  7. uva10256 凸包
  8. [zz]linux修改密码出现Authentication token manipulation error的解决办法
  9. 警示2018:那些值得在年底彻查和回顾的数据库事件
  10. 撬动百亿VRAR产业,让VR们“造”起来