Android, permisos y target sdk

codek0rZ

Buenas, estoy trasteando con Android y los temas de seguridad en él. Resulta que me he quedado algo extrañado con lo siguiente...

Supongo que muchos de los que programáis para Android estáis al tanto de que desde la version 6.0, conocida como M, que pertenece al API level 23, se incorporaron los permisos en tiempo de ejecución. Bien, por lo tanto, si yo desarrollo una aplicación con Android Studio que me da todo el entorno listo me pone como target sdk siempre la última versión disponible de la API de Android, en este caso 25. Por lo tanto, si tengo una aplicación que utiliza los conocidos permisos peligrosos, como READ_PHONE_STATE, y no solicito el permiso en tiempo de ejecución, la aplicación tira una excepción... Bien todo correcto, lo que se espera para una mejora de seguridad de cara a los usuarios...

La cosa viene, es que leyendo he visto que dicen que si quieres que no tengas que pedir los permisos en tiempo en ejecución utilices como target SDK uno inferior al 23 (la incorporación de los permisos en ejecución), pues bien.. eso he hecho y es cierto. Es decir, si yo pongo un target SDK inferior puedo saltarme los permisos en ejecución hasta en la última versión de Android 7.1.1 (lo he probado con mis propios dedos).

¿Qué sentido tiene esto? ¿Alguien podría explicármelo? No lo se, pero no le veo sentido, veo sentido el porque sucede (por el código generado al compilar, claro) pero no entiendo porque Android permite instalar la aplicación en dispositivos con el target sdk inferior y más cuando se han añadido estas barreras de seguridad para ¿nada?.

Bien, espero que me deis opiniones y alguna idea o algún sitio que pueda sacar información del porque de esto.

Saludos!!

EDIT: Vale, acabo de ver que el READ_PHONE_STATE no debe estar considerado como peligroso, ya que si uso el permiso READ_SMS y compilo con target sdk 22 e intento acceder a los SMS, aunque yo no lo he implementado en mi aplicación, se solicita el permiso en tiempo de ejecución, al menos en Android 7.1.1. Por lo cual, me deja aun un poco más confuso jaja.

varuk

#1 Creo que ahora Android Studio (la última versión de Android Studio) te obliga a poner la última versión en el compileSdkVersion (en el build.gradle de tu aplicación), que ahora es la 25. Así que por ahí irá forzando a que haya que meter la comprobación de permisos en tiempo de ejecución.

Pero vamos, yo los metería... los metes en el primer Activity que tengas y punto. Si tienes un sistema de Login pues al darle al botón de loguearse y si no pues puedes hacer una activity "Splash" (de esas que se ve toda la pantalla de un color y que ahí haces las comprobaciones iniciales de si el usuario ya está logueado, permisos... como hacen Twitter y todas estas, por ejemplo).

Soltrac

Lo que te puedo decir es que yo tengo una aplicación compilada para android 2.3 (jejeje) y en Android 6 no pide permisos en ejecución, por lo que yo entiendo que para software compilado anteriormente considera los permisos al instalar o algo así.

Supongo que para permisos más peligrosos como el READ_SMS si los pedirá, pero para permisos normalitos los típicos de aviso en la instalación y poco más.

CrIpI

#1 Si tu compilas con una versión inferior a la 23 no se pide permisos porque estás compilando con una versión anterior a la API que incluyó los permisos. Esto tiene la ventaja de no solicitar los permisos, pero pierdes las funcionalidades agregadas en las apis posteriores.

Otra cosa, no hace falta pedir permisos para todos. Me explico, algunos permisos como el de internet que es más corriente, al instalar la aplicación ya estás concediendo dicho permiso. Luego otros permisos como el de geolocalización, necesitas mostrar el diálogo piediéndole permiso para poder utilizar las funcionalidades de geolocalización.