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/

  • ¿Por qué mi aplicación echa un `android.permission.REBOOT SecurityException`?
  • Init.rc no iniciar mi servicio en el primer arranque después del flash
  • Permisos de Android M con notificaciones de parsemisión
  • Cómo compilar la aplicación de Android con permisos del sistema
  • Android permission.INTERACT_ACROSS_USERS_FULL
  • Android: adb: copia el archivo a / system (Permiso denegado)
  • ¿Es posible eliminar permisos de una aplicación de Android?
  • ActivityCompat.requestPermissions que no muestran el cuadro de diálogo
  • Protege y desprotege el archivo para evitar la eliminación accidental en Android mediante aplicaciones de limpieza con errores
  • ¿Puede un Servicio de Android tener permisos múltiples?
  • Períodos de ejecución de Android en las mejores prácticas de Android 6.0 (nivel de API 23)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.