Visualizzazione stampabile
-
Richiesta accesso root
Ciao a tutti,
sto effettuando alcune prove con Superuser ma non riesco a capire come posso fare a prendere accesso root dalla mia applicazione.
Guardando sul thread apposito di XDA leggo che è necessario lanciare l'intent come segue:
codice:
final int SUPERUSER_REQUEST = 123456;
Intent intent = new Intent("android.intent.action.superuser");
intent.putExtra("name", "nomeApp");
intent.putExtra("packagename", "nome.pacchetto");
startActivityForResult(intent, SUPERUSER_REQUEST);
il problema è che a questo punto va in errore:
codice:
08-26 14:27:25.164: ERROR/AndroidRuntime(4561): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.azasoft.andaza/org.azasoft.andaza.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { action=android.intent.action.superuser (has extras) }
Ovviamente ho eseguito il codice, debuggandolo, direttamente sul device con root e non sull'emulatore.
Tra l'altro scaricando i sorgenti di Superuser.apk non vedo che da nessuna parte c'è un activity che risponde a quell'intent segnalato (android.intent.action.superuser)...
Non capisco a questo punto come fare... qualcuno può aiutarmi?
Grazie
-
Ho trovato una sorta di workaround...
Sempre nei sorgenti si Superuser.apk c'è espressamente la chiamata a "superuser" che poi viene cancellato perchè viene 'rinominato' in "su":
codice:
File superuser = new File("/system/bin/superuser");
if (superuser.exists())
{
// return device to original state
Process process = Runtime.getRuntime().exec("superuser");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("busybox cp /system/bin/superuser system/bin/su\n");
os.writeBytes("busybox chown 0:0 system/bin/su\n");
os.writeBytes("chmod 4755 /system/bin/su\n");
os.writeBytes("rm /system/bin/superuser\n");
os.writeBytes("exit\n");
os.flush();
}
a questo punto ho fatto la stessa cosa e ho ottenuto il risultato richiesto: la schermata di richiesta dei permessi di root è apparsa e ho ottenuto una shell con i permessi di root.
Non so se questo è IL metodo, ma funzione e tanto basta :).
-
Ultima segnalazione per completezza.
Il test per sapere se tutto è ok io l'ho implementato così:
codice:
TextView tv = (TextView) findViewById(R.id.test);
Process p;
try {
p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"CIAO MAMMA!!!!!!!!\" >/system/sd/ciccio.txt\n");
os.writeBytes("exit\n");
os.flush();
try {
p.waitFor();
if (p.exitValue() != 255) {
tv.setText("OK!");
}
else {
tv.setText("Errore nella richiesta permessi di Root");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
-
Ciao, ascolta.
Io sto usando l'emulatore perchè attualmente non sono provvisto di un dispositivo rootato.
Ho provato ad eseguire il tuo codice e mi esce la schermata con i 3 famosi tasti : "Yes, No, Always" in cui seleziono YES e dal quel momento in poi la mia applicazione dovrebbe avere i permessi di root giusto?
Quello che ho provato a fare è eseguire il comando:
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"CIAO MAMMA!!!!!!!!\" >/system/sd/ciccio.txt\n");
os.writeBytes("exit\n");
Ma quando con adb shell vado a vedere dentro /system non mi è successo nulla.......mi chiedo allora.....perchè?
Grazie....
-
Quote:
Originariamente inviato da
Cecco
Ciao, ascolta.
Io sto usando l'emulatore perchè attualmente non sono provvisto di un dispositivo rootato.
Ho provato ad eseguire il tuo codice e mi esce la schermata con i 3 famosi tasti : "Yes, No, Always" in cui seleziono YES e dal quel momento in poi la mia applicazione dovrebbe avere i permessi di root giusto?
Quello che ho provato a fare è eseguire il comando:
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"CIAO MAMMA!!!!!!!!\" >/system/sd/ciccio.txt\n");
os.writeBytes("exit\n");
Ma quando con adb shell vado a vedere dentro /system non mi è successo nulla.......mi chiedo allora.....perchè?
Grazie....
L'esempio era legato al fatto che io ho la partizione ext2 sulla SD montata in /system/sd.
Dubito fortemente che sull'emulatore ci sia.
se tu avessi preso anche lo Stream Error invece che il solo Stream Output e lo avessi controllato, probabilmente ti avrebbe detto che non esiste la directory /system/sd.
hai sicuramente Root, ma il comando che cerchi di fare è errato se fatto su un emulatore ;).
Spero di esserti stato utile