DevCorner: utilizziamo su tramite RootTools

Roberto Orgiu
Roberto Orgiu
DevCorner: utilizziamo su tramite RootTools

Ottenere i permessi di root è stata la primissima lezione di quello che sarebbe poi diventato la nostra rubrica di programmazione, DevCorner: visto che sembra proprio che il tema della settimana siano i privilegi di amministrazione, perché non cogliere al volo l'occasione e presentarvi RootTools?

Queste API, create dallo sviluppatore di BusyBox Installer, ci permetteranno, con pochi e semplici metodi, di ottenere i permessi di root, controllare la presenza di BusyBox, offrire la possibilità di installare quest'ultimo oppure SuperSU e, ovviamente, avviare comandi con i privilegi di amministrazione.

Cominciamo subito a vedere come controllare la presenza della versione modificata di su e come richiedere l'accesso a tali privilegi, tramite le chiamate ai metodi RootTools.isRootAvailable()RootTools.isAccessGiven(), offrendo quindi l'installazione di SuperSU nel caso l'ultimo metodo ritornasse falso (quest'implementazione un po' forzata ci serve solamente ad illustrare il funzionamento delle API, difficilmente dovremo ricreare questa situazione nella realtà)

if(RootTools.isRootAvailable()){
if(RootTools.isAccessGiven())
sendMessage("L'app ha ottenuto i permessi di root!");
else RootTools.offerSuperUser(this);
}else
sendMessage("Attenzione, il dispositivo non sembra rootato!");

In maniera del tutto analoga, potremo controllare la presenza di BusyBox

if(RootTools.isBusyboxAvailable())
sendMessage("BusyBox disponibile!");
else RootTools.offerBusyBox(this);

Ora non ci resta che vedere come avviare un comando con i permessi di amministratore: prendiamo come esempio la stringa per il riavvio del dispositivo, cioè "reboot".

Le istruzioni da usare sono sostanzialmente due: la prima ci permette di specificare un insieme di comandi come normali stringhe separati da virgola, mentre il secondo ci permette di eseguirli.

CommandCapture command = new CommandCapture(0, "reboot");
RootTools.getShell(true).add(command).waitForFinish();

Come di consueto, tutto il materiale utilizzato per questo tutorial è disponibile sul thread ufficiale del nostro forum.