从java发出android系统命令无法正常工作

时间:2018-05-25 15:50:36

标签: java android

我目前需要从我的java代码发出系统命令,但是我坚持了很长时间。我一直在尝试许多论坛和许多代码片段,但都要么崩溃应用程序或似乎什么都不做 我试过的最后一个代码与#34; echo" 但当我制作" echo anystuff> y.txt"而不是创建一个名为y.txt的文件并写下#34; anystuff"在文件中,它只显示" anystuff> y.txt"在我创建的文本框中查看输出 这是我的方法

public void ShellTest() throws IOException {
    // test 10
    String cmd="echo anystuff > y.txt";
    StringBuffer cmdOut = new StringBuffer();
    Process process;
    try{
        // issue the command here
        process = Runtime.getRuntime().exec(cmd);

        // prepare to get back the result and put it in the textbox "resText"
        DataOutputStream stdin = new DataOutputStream(process.getOutputStream());
        stdin.writeBytes(cmd);

        InputStreamReader r = new InputStreamReader(process.getInputStream());
        BufferedReader bufReader = new BufferedReader(r);
        char[] buf = new char[4096];
        int nRead = 0;
        while ((nRead = bufReader.read(buf)) > 0){
            cmdOut.append(buf,0,nRead);
        }
        bufReader.close();
        try {
            process.waitFor();
        } catch (InterruptedException e){
            e.printStackTrace();
        }
    } catch (IOException e){
        e.printStackTrace();
    }
    // check by the showing the output of the command in the textbox
    resText.setText(cmdOut); 
} 

BTW我的手机是Google Pixel 2 XL
任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

因为重定向不是系统命令的一部分。它是(通常是bash)shell的一个特征。要使其工作,您需要运行shell然后将命令作为shell的输入提供。单独将它作为命令运行将把它全部解释为命令echo的参数。

答案 1 :(得分:0)

引入SuperUser和SuperSU的公司Chainfire制作了一个很棒的库来处理所有这些东西。安装库它就可以了!

布局文件

Iterate Methods

Java文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_gravity="center"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textAlignment="center"
        android:text="Shell Executer" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/input_text"
        android:hint="Example - ls" />
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/execute_button"
        android:text="Execute" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/clear_button"
        android:text="Clear" />

    <TextView
        android:id="@+id/output_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        android:textAlignment="textStart" />

</LinearLayout >

结果: Image result

图书馆链接&amp;使用方法:https://github.com/jrummyapps/android-shell

工作测试项目:https://github.com/waleedhammam/Android-Shell