簡體   English   中英

通過Android上的Java代碼運行Shell命令?

[英]Running Shell commands though java code on Android?

我有一個應用程序應該使用一些shell命令將文件從SD卡復制到/ system / media /。 它將需要root,我正在root設備上進行測試。 我正在使用運行時來執行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的東西,我似乎無法弄清楚如何讓它工作。

要運行root命令,必須使用以下格式:

    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"};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM