从Android应用程序运行脚本

时间:2015-09-15 10:31:42

标签: android bash shell permissions

我正在尝试从应用程序中执行脚本。我使用以下命令执行脚本:

try {
        Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "sh /data/script.sh" });
        proc.waitFor();
    } catch (Exception e) {
        Log.d("Exceptions", "Exception dropping caches: "+e);
    }

权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

每次启动应用程序时,脚本都应该执行。

脚本只包含行


#!/system/bin/sh touch testFile

但问题是脚本没有被执行 - 至少没有创建文件testFile。但是,当我将代码更改为{ "su", "-c", "touch /data/testFile" }时,它就是。

现在,脚本只是一个例子。最终我想要执行一个不同的脚本。
我的股票(5.1.1),Nexus 5,扎根。

我已经尝试过其他线程的不同方法,上面的代码是我至少可以使用{ "su", "-c", "touch /data/testFile" }创建文件的唯一方法。

任何想法,可能是什么问题?我可能需要其他许可吗?

1 个答案:

答案 0 :(得分:0)

这可能是脚本本身的问题。请尝试使用这段代码:

{ "su", "-c", "sh /data/script.sh", "2&>1>/sdcard/scripterror.log" }

然后检查/sdcard/scripterror.log是否有错误。

无论如何,我建议您使用this库来运行带有su的命令,它使用起来更加容易,即使我能理解它(我是一个真正的Java初学者)