2014-06-18 8 views
8

Ich erhalte einen Fehler beim Ausführen dieses Codes und der Fehler ist "Root-Zugriff abgelehnt [java.io.IOException]: Fehler beim Ausführen von exec(). Befehl: [su] Arbeiten Verzeichnis: null Umgebung: null "Fehler erhalten "Root-Zugriff abgelehnt" in Android-Anwendung

try 
{ 
    suProcess = Runtime.getRuntime().exec("su"); 
    DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); 
    DataInputStream osRes = new DataInputStream(suProcess.getInputStream()); 

    if (null != os && null != osRes) 
    { 
     // Getting the id of the current user to check if this is root 
     os.writeBytes("id\n"); 
     os.flush(); 
     String currUid = osRes.readLine(); 
     boolean exitSu = false; 
     if (null == currUid) 
     { 
      retval = false; 
      exitSu = false; 
      Log.d("ROOT", "Can't get root access or denied by user"); 
     } 
     else if (true == currUid.contains("uid=0")) 
     { 
     retval = true; 
     exitSu = true; 
     Log.d("ROOT", "Root access granted"); 
     } 
     else 
     { 
     retval = false; 
     exitSu = true; 
     Log.d("ROOT", "Root access rejected: " + currUid); 
     } 

     if (exitSu) 
     { 
      os.writeBytes("exit\n"); 
      os.flush(); 
     } 
    } 
} 
catch (Exception e) 
{ 
    Log.d("ROOT", "Root access rejected [" + e.getClass().getName() 
       + "] : " + e.getMessage()); 
} 

Antwort

2

Dies liegt daran, dass Apps keine Super-User-Berechtigung im Android-System haben.

+0

Ich versuche, einen Code zu implementieren, in dem ich ein Video mit Android komprimieren muss, aber keine relevante API finden kann, um das zu tun. Könnten Sie mich bitte führen? –

2

Nun, zuerst von allen ... müssen Sie Ihr Gerät verwurzeln. Ein wenig Google Search wird dabei helfen.

Wenn Ihre Anwendung auf anonymen Clientgeräten ausgeführt wird, sollten Sie zuerst überprüfen, ob das Gerät gerootet ist oder nicht. Meine Bibliothek verfügt über eine Methode zur Überprüfung der Stammverfügbarkeit, die wie folgt aussieht, in einigen Fällen jedoch nicht.

public static boolean hasRoot() { 
     String tags = Build.TAGS; 
     if ((tags != null) && tags.contains("test-keys")) 
      return true; 
     try { 
      if (new File("/system/app/Superuser.apk").exists()) 
       return true; 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
     String[] commands = { 
      "/system/xbin/which su", 
      "/system/bin/which su", 
      "which su" 
     }; 
     for (String command : commands) { 
      try { 
       Runtime.getRuntime().exec(command); 
       return true; 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 
     return false; 
    } 

Dann können Sie mit der Prozedur fortzufahren ein Super-User Shell & Prüfung für uid auszuführen.

Oder wenn Sie Dinge vereinfachen möchten, können Sie sich meine Open-Source-Android-CLI-Bibliothek ansehen, mit der diese Aufgabe einfacher wäre. Sie können das Github-Projekt here finden.

+0

Bei Verwendung dieses Codes wird "java.io.IOException: Fehler beim Ausführen von exec() angezeigt. Befehl: [/ system/xbin/which, su] Arbeitsverzeichnis: null Umgebung: null" –

+1

Wahrscheinlich sind Sie dann nicht verwurzelt . Gehen Sie zuerst zum Rooten und dann weiter. –

Verwandte Themen