Cómo determinar los permisos obsoletos?

Estoy trabajando en una aplicación Android con una enorme base de código fuente. No me gusta que mi aplicación requiere no pocos permisos, y empecé a sospechar que hay algunos que están desaprobados y ya no es necesario.

La pregunta es – ¿Cómo determinar si es así, y que son realmente obsoletos?

Intenté eliminar un permiso sospechoso y recompilarlo (usando Eclipse Juno), y esperaba que el compilado lo marcara como un error o una advertencia, pero no lo hizo.

También intentó ejecutar explícitamente Lint en el código, y tampoco lo detectó.

La aplicación compilada y se ejecuta en el dispositivo, y supongo que lanzará excepción de tiempo de ejecución con AccessDenied cuando la API pertinente se llamará en algún flujo de código.

¿Hay alguna forma efectiva de detectar esa API, sin explorar todo el código fuente o ejecutar la aplicación en varios escenarios?

¡Gracias!

Ejecute el código con -Djava.security.debug = access, failure. Eso le mostrará todos los permisos que se utilizan realmente.

Desafortunadamente, la respuesta corta es no. No hay forma automatizada de detectarlo. Los únicos métodos probados y verdaderos son la eliminación de permisos uno por uno y la comprobación, o el paso a través de su código para inspeccionar.

Debería haber, sin embargo. Sospecho que no sería difícil escribir un script que lea el código del proyecto y determine los permisos necesarios. La parte más difícil sería mantenerlo al día con los cambios API.

Yo diría que usted va sobre esto en la dirección equivocada.

En lugar de preguntar qué permiso puede eliminar, revise la lista y genere una justificación investigada de por qué es necesario cada permiso y qué características tendrían que inhabilitarse si se eliminó el permiso.

Si entiende lo que hace un permiso, no será difícil generar consultas de búsqueda para encontrar los lugares más probables donde se está utilizando en al menos el código Java. Pero un montón de manifiestos (e incluso la respuesta SO ocasional) tienen permisos que no son necesarios; No es raro ver peticiones de permisos que la plataforma ni siquiera concederá a aplicaciones que no sean del sistema.

No sé qué tan bien funciona, pero parece que algunos investigadores de la UC Berkeley están trabajando en un proyecto para explorar aplicaciones de Android y mostrar qué permisos utilizan. Más información en http://www.android-permissions.org/

  • Permiso denegado al escribir en sdCard
  • Implicaciones de los permisos del paquete (Todos los desarrolladores de android invitados a contribuir)
  • No se detecta el dispositivo USB de modo host - ¿Qué archivos son exactamente necesarios?
  • ADB obtener un permiso denegado a pesar de correr como root
  • Android getServerAuthCode () sin permisos adicionales
  • ¿Cómo se puede comprobar el permiso en tiempo de ejecución sin lanzar SecurityException?
  • Definir un permiso para que aplicaciones de terceros se usen en Android
  • Android - Flash - Permiso para permitir la red asistida por Peer
  • Android: java.lang.SecurityException: Permiso Denial: inicio Intención
  • Determinar mediante programación si la aplicación de Android tiene permiso al nivel del sistema
  • StartBluetoothSco () lanza la excepción de seguridad (BROADCAST_STICKY) en ICS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.