2011-03-14 13 views
22

Estoy aprendiendo programación de Android, y quiero hacer una aplicación que debe ejecutarse como root. Lo lógico sería agregar un permiso de raíz en el Manifiesto de Android.¿Cómo puedo obtener permisos de root a través del SDK de Android?

vi this link en la documentación, y en especial señaló the FACTORY_TEST permission:

public static final String FACTORY_TEST

desde: Nivel API 1

Ejecutar como aplicación de prueba de fábrica, funcionando como usuario root. Solo disponible cuando el dispositivo es ejecutándose en el modo de prueba del fabricante. Constante Valor: "android.permission.FACTORY_TEST"

es que la mejor manera?

Si no es posible usar el SDK, ¿cómo puedo hacer que una aplicación "raíz" funcione?

+0

Tenga en cuenta que si bien esta pregunta tiene una respuesta con muchos votos ascendentes, ** esa respuesta es incorrecta e inútil **, y el los mecanismos a los que se refiere imprecisamente se han eliminado por mucho tiempo. No logra nada, y surge de un malentendido fundamental del kernel de Linux y el modelo de seguridad y proceso de Unix en el que se basa Android. –

Respuesta

30

Lo que hay que hacer es algo como:

Process root = Runtime.getRuntime().exec("su"); 

que causa superusuario para mostrar, que le permite permitir o bloquear el acceso desde la raíz. Este enfoque podría no funcionar si el usuario no está rooteado. Here es una forma de probarlo.

+2

¡Genial! Gracias Mohit. – Rob

+22

Esto no hace que la aplicación se ejecute como root. Lo que hace esto, en los sistemas que lo soportan, es permitir a la aplicación lanzar un programa auxiliar en un nuevo proceso que se ejecuta como raíz. Además, el código que se muestra arriba no logra casi nada, ya que no se inicia ningún proceso de trabajo. Todo lo que esto puede hacer es mostrar el cuadro de diálogo de confirmación del usuario de uno de los hacks, y una posible caché del usuario para que no se vuelva a preguntar si se realiza otra invocación de su. Pero aún no se ejecuta nada como root. –

+0

Acepte el comentario anterior de Chris: necesitará un proceso de trabajo para ejecutar y obtener el resultado de este proceso para determinar si tiene permiso de root o no. – ChuongPham

6

El SDK no ofrece una forma de ejecutar una aplicación como raíz.

+15

OK, Sr. Google :) Debería reformular mi pregunta "¿Cómo puedo hacer que una aplicación se ejecute como root?" – Rob

+0

@Rob - no puedes. En la mayoría de los procesos de ayuda se pueden ejecutar como raíz, no las aplicaciones en sí. –

12

Lo primero nos permite tener los conceptos básicos correctos. Android ejecuta kernel de Linux debajo. Ahora, si tiene que ejecutar su proceso en él con privilegios de superusuario (ejecutarlo como root), la única forma de ejecutar su proceso es a través de command line porque es la única forma en que puede interactuar directamente con el núcleo. También necesita usar su antes de ejecutar cualquier comando. También como Chris ha mencionado en su comentario sobre la primera respuesta

Process process = Runtime.getRuntime().exec("su"); 

no logrará casi nada. Solo pedirá privilegios de súper uso usando el diálogo. Lo que puede hacer es en vez de sólo la ejecución de su puede ejecutar el proceso con su como siguiente

Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand}); 

la opción -C

Entre los más utilizados de pocas opciones de SU es -c, que dice su to execute the command that directly follows it on the same line. Dicho comando se ejecuta como el nuevo usuario, y luego la ventana del terminal o consola desde la cual su se ejecutó regresa inmediatamente a la cuenta del usuario anterior después de que el comando haya completado la ejecución o después de que se haya cerrado cualquier programa que haya lanzado. (More details)

opción alternativa

alternativa al método anterior una u otra forma que podría funcionar es utilizar la línea de comandos para copiar aplicación para que /system/app/ directorio.Entonces su aplicación se ejecutará automáticamente con privilegios de administrador (igual que las aplicaciones del sistema) (More on Android partitions)

+6

No, las aplicaciones en/system/app ** tampoco se ejecutan como root **. Es posible que puedan obtener más permisos de nivel de Android, pero aún no son root. –

+0

Para root, debe firmar con el certificado del sistema. Como dijo Chris, las soluciones como poner la aplicación en/system/app o ejecutar "su" NO harán que tu aplicación se ejecute como root. – flicflac

+1

@flicflac Creo que firmar con el certificado del sistema todavía no hace que su aplicación se ejecute como root. Solo te da más permisos (nivel de Android). ¿O estoy equivocado? ¡Gracias! – sjkm

Cuestiones relacionadas