4 votos

¿Cómo conseguir el acceso "no root" en los emuladores?

Estoy ejecutando adb en emuladores y por defecto, los emuladores dan acceso Root. Cuando ejecuto 'adb shell', obtengo acceso Root al emulador(dispositivo virtual).

Por alguna razón, quiero tener acceso no root a los emuladores. ¿Qué debo hacer?

Se agradecería cualquier ayuda.

*Configuraciones

Ubuntu 13.10, 32 bits.

Eclipse 4.2 con el paquete ADT.

Emulador Genymotion (Para ser específicos, yo estaba usando Android 4.3 aquí).

1 votos

Puedes probar su shell para convertirse en el "usuario shell". Ese es el que adb shell normalmente utiliza en los dispositivos. Pero no estoy seguro de que esté disponible en el emulador, así que por favor, haznos saber si funciona. Si el shell usuario no está disponible, podría comprobar ls -l /data/data para elegir el usuario de alguna aplicación con la que probar.

0 votos

@Izzy - 'su shell' no funciona con los emuladores. Estoy trabajando en este tema y espero estar muy cerca de la solución. Definitivamente le hará saber como se hace.

4voto

Paul Ratazzi Puntos 346

En los emuladores del SDK y las máquinas virtuales como Genymotion, adbd se inicia como Root y proporciona un shell Root. A falta de modificar el código fuente para hacer lo contrario y reconstruir las imágenes de su VM, creo que tendrá que utilizar el su enfoque sugerido anteriormente. su shell funciona efectivamente tanto en los emuladores del SDK como en las VM de Genymotion. En concreto:

ubuntu$ adb shell
android# id
uid=0(root) gid=0(root) context=u:r:shell:s0
android# su shell
android$ uid=2000(shell) gid=2000(shell) context=u:r:su:s0

Observe que el shell inicial se ejecuta como uid 0 y después su shell se ejecuta como uid 2000. De hecho, puedes su a cualquier uid de Linux (appId de Android) configurado en tu emulador/VM. Por ejemplo, después de hacer adb shell de Ubuntu:

android# su u0_a16
android$ id
uid=10016(u0_a16) gid=10016(u0_a16) context=u:r:su:s0
android$ 

En mi emulador, el uid 10016 es la aplicación de calendario. Recuerde que después de su, sólo tiene los privilegios del nuevo uid, y esto puede no incluir los permisos para ejecutar comandos de Linux o ver ciertos directorios.

Por último, si sólo necesitas hacer una o dos operaciones como usuario no root, puedes encadenar todo como un solo comando en Ubuntu. Algo así como:

ubuntu$ adb shell su u0_a16 id
uid=10016(u0_a16) gid=10016(u0_a16) context=u:r:su:s0

o

ubuntu$ $ adb shell su radio cat /data/data/com.android.phone/shared_prefs/*.xml\; su radio id
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <boolean name="_has_set_default_values" value="true" />
</map>
uid=1001(radio) gid=1001(radio) context=u:r:su:s0

Probado en el emulador SDK x86 con la versión 4.4.2 y en la máquina virtual Genymotion con la versión 4.4.2.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X