【问题标题】:Rooted Android does not execute all commands programaticallyRooted Android 不会以编程方式执行所有命令
【发布时间】:2014-04-28 21:03:28
【问题描述】:

下面这段代码成功重启了安卓设备:

    Process p = Runtime.getRuntime().exec("su");

    OutputStream outputStream = p.getOutputStream();
    InputStream inputStream = p.getInputStream();
    DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

    dataOutputStream.writeBytes("reboot");
    dataOutputStream.flush();
    dataOutputStream.close();
    outputStream.close();
            p.waitFor();

此代码应该停止当前正在运行的应用程序。但它什么也没做。

        Process p = Runtime.getRuntime().exec("su");

        OutputStream outputStream = p.getOutputStream();
        InputStream inputStream = p.getInputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        dataOutputStream.writeBytes("am force-stop com.XXX.XXX.XXX");
        dataOutputStream.flush();
        dataOutputStream.close();
        outputStream.close();
        p.waitFor();

所有命令都通过 ADB Shell 运行,并且设备具有“su”脚本。 有我可以排除故障的过程吗?我该怎么办?

当 dataOutputStream.flush() 运行时,它给了我这个错误:

04-29 01:56:05.057:W/System.err(6969):java.io.SyncFailedException:fsync 失败:EINVAL(无效参数)

【问题讨论】:

  • 您的问题是什么?你遇到了什么问题?
  • 第二组代码不起作用,但第一组代码可以吗?有什么原因吗?
  • “不起作用”可能意味着任何事情,请具体说明。
  • 添加了系统错误,并且不起作用意味着它没有做任何事情。但是来自 ADB 的相同命令将起作用。

标签: android exec android-4.2-jelly-bean su


【解决方案1】:

使用 try-catch 环绕 write-flush

try{
 dataOutputStream.writeBytes("am force-stop com.XXX.XXX.XXX");
 dataOutputStream.flush();
}catch(IOException e){
}

不影响执行结果!

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 2013-01-26
    • 1970-01-01
    • 2013-08-14
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多