Running Shell commands though java code on Android?

时光怂恿深爱的人放手 提交于 2019-11-26 03:38:32

问题


I\'ve got an app that\'s supposed to use some shell commands to copy a file from the sdcard to /system/media/. It will require root, and I am testing on a rooted device. I\'m using runtimes to execute the shell commands, but it\'s not working. Here\'s what I\'ve got for my runtimes

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();
}

But my logcat only shows two of them not getting rejected

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

Those two look to be the sysrw and sysro commands, yet the app still asks for root permission when I trigger this code. I\'m new to working with root stuff and I can\'t seem to figure out how to get this to work.


回答1:


To run root commands, you have to use the flllowing format:

    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();
}

where you pass in an array of strings, each string being a command that needs to be executed. For example:

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


来源:https://stackoverflow.com/questions/6882248/running-shell-commands-though-java-code-on-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!