如何以编程方式在android中执行linux命令?

时间:2012-09-06 12:40:19

标签: android shell android-ndk linux-kernel

在android(通过android sdk / tools文件夹)命令行中,我们可以执行linux shell命令同样访问mnt文件夹/数据文件夹。 (例如cd data ls)现在该命令我想在android中以编程方式执行,那怎么可能呢?

<小时/> 我使用以下代码来执行shell命令

Process p = Runtime.getRuntime().exec("cd data");

但它给了我异常

java.io.IOException: Error running exec(). Command: [cd, data] Working 
Directory:  null Environment: null

<小时/> 那我该怎么办呢。谢谢。

5 个答案:

答案 0 :(得分:6)

cd不是Linux命令,它是内置于shell中的命令;它在该shell进程的上下文中更改当前工作目录 。在您的情况下,如果命令要成功,那么仅对子进程成功(这将很快终止)并且对您自己的进程没有影响。

答案 1 :(得分:0)

试试这个:

Process p = Runtime.getRuntime().exec("cd /data");

答案 2 :(得分:0)

要检索应用程序私有数据文件夹的路径,请使用Java中的以下内容:

File MyData = Ctxt.getDir("Foo");

其中Ctxt是Context对象,如Activity。它会返回一条像/data/data/com.activity.networkRequestDetector/app_Foo这样的路径。请注意,Android中不鼓励读/写/data/data/com.activity.networkRequestDetector/ - 它是您应用程序的沙箱根目录,不能播放。

要从数据文件夹中打开文件,请使用以下内容:

FileInputStream Stm = new FileInputStream(new File(MyData, "Filename.txt"));

通常,您的应用程序也可以执行任何shell命令。 Shell命令只是像其他人一样使用API​​的程序。

答案 3 :(得分:0)

在Android上,您的进程无权读取其他应用的/data/data/_other-package-name_中的文件,或列出目录/data/data/_other-package-name_/files中的私有文件。但它确实有权列出和读取lib目录/data/data/_other-package-name_/lib中的文件,如果 other-package 打开此文件,您可以在/data/data/_other-package-name_/files中查看特定文件公开。

即。如果 other-package 符合以下内容:

FileOutputStream fos = openFileOutput("public_file", Context.MODE_WORLD_READABLE);
fos.write("hello world".getBytes());
fos.close();

然后你的包可以这样读取这个文件:

byte[] bytes = new byte[100];
FileInputStream fis = new FileInputStream(new File("/data/data/*other-package*/files/public_file"));
int cnt = fis.read(bytes);
fis.close();
Log.d("Two_Libs", new String(bytes, 0, cnt));

但是你不能列出该目录中的公共文件来发现它们。

答案 4 :(得分:0)

用途如下:-

 Process process = Runtime.getRuntime().exec("command to be executed");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));