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.
1 votos
Puedes probar
su shell
para convertirse en el "usuario shell". Ese es el queadb 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 elshell
usuario no está disponible, podría comprobarls -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.