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.
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.
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).
`` ```
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 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.