Estoy desarrollando mi primera aplicación Android
, y tengo curiosidad si hay formas "estándar" para ejecutar los comandos privilegiados shell
. Solo he podido encontrar una forma de hacerlo, ejecutando su
, y luego agregando mis comandos al stdin
del proceso su
.ANDROID: ¿Cómo obtener acceso a la raíz en una aplicación de Android?
DataOutputStream pOut = new DataOutputStream(p.getOutputStream());
DataInputStream pIn = new DataInputStream(p.getInputStream());
String rv = "";
// su must exit before its output can be read
pOut.writeBytes(cmd + "\nexit\n");
pOut.flush();
p.waitFor();
while (pIn.available() > 0)
rv += pIn.readLine() + "\n";
He leído acerca de envolver privilegiada (superuser
) llama en JNI
: ¿es esto posible? Si es así, ¿cómo lograrlo? Aparte de eso, ¿hay alguna otra forma de llamar instrucciones privilegiadas desde Java
?
No hay ningún medio para elevar el privilegio de un proceso existente, solo significa iniciar un nuevo proceso ejecutándose como root. Para ver un ejemplo donde su se pasa un comando para ejecutar, consulte http://stackoverflow.com/questions/4846241/more-than-one-superuser-command-android/4846312 –
@Chris ¿qué pasa con el lanzamiento de una nueva actividad/tarea/¿Android app/etc de Java? –
Eso requeriría grandes cambios en Android. Normalmente no se crean procesos para la ejecución de Android java, sino que se pide a Android que pida a 'zygote' que separe uno, lo que hace con la identificación de usuario de esa aplicación. Es más simple mantener las tareas de raíz como ejecutables nativos o scripts de shell haciendo cosas clave en nombre de la aplicación. O agréguelos al sistema propiamente dicho como servicios de sistema privilegiados. A menudo, la mejor manera es crear un grupo Unix y darle acceso a una capacidad particular (por ejemplo, acceder a un archivo de dispositivo) y ejecutar un servicio en ese grupo o vincularlo con un permiso de Android –