从Android应用程序运行C ++二进制文件

时间:2018-09-12 14:34:46

标签: android adb

我用C ++创建了一个Hello程序,并针对Android对其进行了交叉编译。 程序打印HelloWorld1,然后打印当前目录,然后创建一个包含当前日期和时间的date.txt文件,最后打印HelloWorld2

我创建了一个执行shell命令的Android应用程序。 我使用adb将HelloWorld程序推送到了应用程序的文件夹中:

adb push Hello /data/local/tmp
adb shell
>run-as mytestapp.test
>cp /data/local/tmp/Hello .

我从adb运行了程序,并获得了预期的输出:

HelloWorld1
/data/data/mytestapp.test
HelloWorld2

,并创建一个包含日期/时间的date.txt文件。

问题是,当我使用Android应用程序运行该程序时,会得到以下结果:

HelloWorld1
HelloWorld2

所以我没有得到当前目录的路径。我也没有得到date.txt文件

我从应用程序运行的命令是/data/data/mytestapp.test/Hello

这是应用程序的代码:

public class MainActivity extends Activity {

    EditText input;
    Button btn;
    TextView out;
    String command;
    Process p;
StringBuffer output;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    input = (EditText)findViewById(R.id.txt);
    btn = (Button)findViewById(R.id.btn);
    out = (TextView)findViewById(R.id.out);
    output = new StringBuffer();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            command = input.getText().toString();
            try{
                p = Runtime.getRuntime().exec(command);
                p.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

                String line = "";
                while ((line = reader.readLine())!= null) {
                    output.append(line + "n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            out.setText(output.toString());
            Log.d("Output", output.toString());
        }
    });

}
}

您是否知道为什么它通过adb(作为应用程序运行)而不通过应用程序本身工作?

PS:我的设备没有植根

0 个答案:

没有答案