2014-06-18 14 views
8

Viene visualizzato un errore durante l'esecuzione di questo codice e l'errore è "Accesso root rifiutato [java.io.IOException]: Errore nell'esecuzione exec(). Comando: [su] Funzionamento directory: Ambiente nulla: null"Errore "Accesso root rifiutato" nell'applicazione Android

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

risposta

2

Questo perché le applicazioni non hanno un permesso di super utente nel sistema Android.

+0

Sto tentando di implementare un codice in cui ho bisogno di comprimere un video utilizzando Android ma non riesco a trovare alcuna API pertinente per farlo. Potresti guidarmi per favore? –

2

Beh, prima di tutto ... è necessario che il tuo dispositivo sia radicato. Un po 'di Google Search ti aiuterà.

Se l'applicazione sarà in esecuzione su dispositivi client anonimi, è consigliabile controllare prima se il dispositivo è root o no. La mia biblioteca ha un metodo di controllo della disponibilità della radice che appare come sotto, ma non funziona in alcuni casi.

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

Quindi è possibile procedere con la procedura per eseguire un superutente guscio & assegno di UID.

Oppure, se vuoi semplificare le cose, puoi dare un'occhiata alla mia libreria CLI Android open-source con la quale, questa attività sarebbe più semplice. È possibile trovare il progetto github here.

+0

Quando si utilizza questo codice, viene visualizzato "java.io.IOException: errore in esecuzione exec(). Comando: [/ system/xbin/which, su] Directory di lavoro: null Ambiente: null" –

+1

Molto probabilmente non si è rootati quindi . Vai prima a fare il tifo e poi continua. –

Problemi correlati