9 votos

Lista de permisos configurables de ADB

Estoy buscando una lista de permisos que se pueden establecer con adb.

Puedo simplemente iterar a través de todos los permisos e ignorar los que fallan, pero preferiría filtrar aquellos que sé que no se pueden establecer de antemano.

12voto

Jack Wade Puntos 231

Puedes otorgar o revocar solo permisos en tiempo de ejecución (introducidos en Android 6 con nivel de protección: peligroso) - ya sea desde CLI (adb shell) o GUI (Ajustes). Desde la ayuda del gestor de paquetes:

~$ pm
...
  grant [--user USER_ID] PAQUETE PERMISO
  revoke [--user USER_ID] PAQUETE PERMISO
    Estos comandos otorgan o revocan permisos a aplicaciones. Los permisos
    deben estar declarados como utilizados en el manifiesto de la aplicación, ser permisos en tiempo de ejecución
    (nivel de protección peligroso), y la aplicación apuntando a una SDK mayor que Lollipop MR1.
...

Para obtener una lista de todos los permisos peligrosos en el dispositivo:

~$ pm list permissions -g -d | awk -F: '/permission:/ {print $2}'

O obtener directamente desde la fuente de Android. Esta lista excluye cualquier permiso peligroso definido por paquetes que no son de AOSP, por ejemplo, aquellos proporcionados por Google Play Services. wget es una aplicación busybox, o puedes obtener un binario estático:

~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | grep -E 'protectionLevel=|


O para evitar resultados incorrectos, preformatea el `.xml` (necesitas obtener `xmllint` u una herramienta similar):

    ~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | xmllint --format - | grep 'protectionLevel=.*dangerous' | grep -o 'permission android:name=[^ ]*' | cut -d'"' -f2

------

Además de los permisos `peligrosos`, también es posible `otorgar` o `denegar` o `ignorar` algunos de los permisos especiales que se muestran en:  
**Ajustes → Aplicaciones y Notificaciones → Avanzado → Acceso especial a aplicaciones**.  
Estos no son gestionados directamente por el gestor de paquetes, sino por `appops` - un marco de control de permisos secundario. Estos son permisos de nivel `firma` que solo pueden ser otorgados a aplicaciones del sistema. En Android 9:

    ~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | grep -E 'protectionLevel=|

``

Las operaciones `appops` correspondientes tienen [nombres similares](https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-9.0.0_r52/core/java/android/app/AppOpsManager.java#910) con diferencias menores. Además, algunas OPs [dependen de](https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-9.0.0_r52/core/java/android/app/AppOpsManager.java#652) otras OPs. Para obtener una lista completa de operaciones que se pueden leer o establecer a través de la línea de comandos:

    ~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/java/android/app/AppOpsManager.java | awk '/int OP_/ {print $5}'

Para más detalles sobre cómo usar `appops` ver ejemplos de [`VIBRATE`](https://android.stackexchange.com/a/215658/218526), [`REQUEST_INSTALL_PACKAGES`](https://android.stackexchange.com/a/216092/218526), [`COARSE_LOCATION`/`FINE_LOCATION`](https://android.stackexchange.com/a/218820/218526) y [`BOOT_COMPLETED`/`RUN_IN_BACKGROUND`](https://android.stackexchange.com/a/209345/218526).

`` ```

6voto

Para obtener una lista de todos los permisos disponibles en todo el sistema, use

adb shell pm list permissions

Eso te dará una lista completa de los permisos disponibles para ser otorgados/rechazados en ese dispositivo, incluidos los permisos definidos por el fabricante o por aplicaciones instaladas en el dispositivo.

Para obtener una lista de los permisos aplicables a una aplicación específica, use

adb shell appops get

Eso te dará una lista de los permisos que esa aplicación en particular puede solicitar, incluido si el permiso ha sido otorgado o no.

Luego puedes usar

adb shell appops set ignore

o adb shell appops set allow

para denegar o permitir ese permiso para esa aplicación.

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