2011-07-30 71 views
17

我有一个应用程序应该使用一些shell命令将文件从sdcard复制到/ system/media /。它将需要root,我正在根植设备上进行测试。我使用运行时来执行shell命令,但它不起作用。 这是我已经得到了我的运行时间通过Android上的Java代码运行Shell命令?

public void RunAsRoot{String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"};{ 
    Process p = Runtime.getRuntime().exec("su"); 
    DataOutputStream os = new DataOutputStream(p.getOutputStream());    
    for (String tmpCmd : commands) { 
    os.writeBytes(tmpCmd+"\n"); 
    }   
    os.writeBytes("exit\n"); 
    os.flush(); 
} 

但我的logcat只能说明他们两个人不被拒

07-30 03:14:11.112: WARN/su(3593): request rejected (10047->0 /system/bin/sh) 
07-30 03:14:11.132: DEBUG/su(3592): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh 
07-30 03:14:11.152: WARN/su(3594): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.182: WARN/su(3595): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.202: WARN/su(3596): request rejected (0->0 /system/bin/sh) 
07-30 03:14:11.242: DEBUG/su(3597): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh 

这两个看起来是sysrw和sysro命令,但应用仍当我触发此代码时请求root权限。 我是新来的使用root的东西,我似乎无法弄清楚如何让这个工作。

+0

我可以得到这个样本的工作项目吗? –

+0

这不适用于我,我没有收到任何FileNotFound异常或Java中的任何异常。此外,SuperSU拦截根请求,我可以授予它,所以我知道'getRuntime()'正在工作。出于某种原因,它不会让我操作'/ system/media'文件夹中的文件。 – anon58192932

+0

啊,它看起来像sysrw和sysro是未知的逗号。 – anon58192932

回答

27

要运行根命令,则必须使用flllowing格式:其中,您在一个字符串数组传递

public void RunAsRoot(String[] cmds){ 
      Process p = Runtime.getRuntime().exec("su"); 
      DataOutputStream os = new DataOutputStream(p.getOutputStream());    
      for (String tmpCmd : cmds) { 
        os.writeBytes(tmpCmd+"\n"); 
      }   
      os.writeBytes("exit\n"); 
      os.flush(); 
} 

,待执行的每个字符为一个需要的命令。例如:

String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"}; 
+0

当我把它放在我的onClick中时,它说()的周围(String [] cmds)应该是;当我这样做时,它会增加更多的错误。 – Ben

+0

我刚刚编辑我的原始答案,以显示需要在 – user496854

+0

中传递的字符串数组的示例除非我这样做是错误的,它突出显示RunAsRoot并说void是RunAsRoot的无效类型。我用我现在的代码更新了我的问题 – Ben