Android M Developer Preview XNUMX lanzado

Google anunció el lanzamiento Android 12 y ya ha publicado dos documentaciones de vista previa para desarrolladores. Hay bastantes cambios, por lo que decidimos contarte los más importantes e interesantes que afectarán a la mayoría de las aplicaciones móviles. Pero primero, hablemos de las dificultades que puede encontrar durante la migración y compartamos recomendaciones. Googlecómo hacer una transición a Android 12 agradable e indoloro.

Original: https://developer.android.com/about/versions/12/images/android-12-desktop-timeline-en-landpg-mar.svg

A partir de mayo de 2021, se planean varios lanzamientos Versiones beta nuevo Android 12, que culminará en la versión final con nuevas funciones y mejoras API. Los hitos de lanzamiento sucesivos contienen un período Estabilidad de la plataforma. Se prevé que una vez que se alcance esta etapa, no habrá cambios que puedan afectar las aplicaciones. Los desarrolladores tendrán tiempo para adaptar las aplicaciones hasta que los usuarios obtengan una nueva plataforma en los dispositivos. Sin embargo, ya es posible sacar las primeras conclusiones sobre el nuevo API y cómo estas actualizaciones afectarán nuestras aplicaciones.

Migración a la nueva compileSdkVersion

1. Retraso en mostrar notificaciones de servicio de primer plano

componente servicio de primer plano aparece bastante a menudo en las nuevas actualizaciones. Entonces, mostrar una notificación de un componente servicio de primer plano se retrasará hasta 10 segundos. Esto permitirá que el componente de servicio en primer plano se complete con un tiempo de ejecución corto antes de mostrar notificaciones y reducirá la cantidad total de notificaciones para los usuarios. Sin embargo, este retraso puede ser un comportamiento no deseado para muchas aplicaciones (por ejemplo, si la notificación es importante y desea mostrarla explícitamente). En este último caso, deberá llamar al método setShowForegroundImmediately().
Las notificaciones se mostrarán inmediatamente si su servicio de primer plano cae bajo al menos una de las siguientes excepciones:

  • notificación asociada con el componente servicio de primer plano, contiene el botón de acción;
  • Servicios asociado con la reproducción de medios, llamadas telefónicas o navegación (establecido en la categoría de notificación);
  • El tipo de servicio de primer plano es un dispositivo conectado, reproducción de medios, proyección de medios o llamada telefónica.
READ
Qué esperar de Android O?

2. Prohibición del uso de bajo nivel API al trabajar con dirección MAC-direcciones

В Android 12 a pedido Direcciones MAC devolverá nulo o un trozo:

  • si el valor del parámetro targetSdkVersion es superior a 30, se devolverá un valor nulo;
  • si el valor de targetSdkVersion es menor o igual a 30, se devolverá el código auxiliar 02:00:00:00:00:00.

3. Toque a través superposición están bloqueados

В Android se mantuvo una vulnerabilidad al hacer clic en las ventanas del sistema usando una capa transparente. A Android 12 el sistema bloquea el procesamiento de toques que pasan a través de ciertas ventanas. Esta limitación incluye los siguientes casos:

  • aplicaciones que permiten que los toques se pasen más a través de sus ventanas usando la bandera FLAG_NOT_TOUCHABLE;
  • superposiciones que requieren el permiso SYSTEM_ALERT_WINDOW (ventanas que usan el indicador TYPE_APPLICATION_OVERLAY);
  • mensajes como tostada.
  • interacción dentro de la aplicación (las ventanas se muestran solo cuando el usuario interactúa con una aplicación);
  • interacción con ventanas de confianza Accesibilidad, IME, Asistente (las ventanas con tipo TYPE_APPLICATION_OVERLAY no son de confianza);
  • interacción con ventanas cuya raíz visual tiene un valor de visibilidad de INVISIBLE o GONE;
  • interactuar con ventanas totalmente transparentes (alfa se establece en 0.0);
  • Ventanas de advertencia del sistema lo suficientemente transparentes (si la opacidad general no supera un cierto umbral).

4. Prohibición de cerrar cuadros de diálogo del sistema

Esta limitación también está directamente relacionada con la seguridad. Android y es una continuación de la restricción anterior. A Android 12 no será posible cerrar los diálogos del sistema desde las aplicaciones. Con diferentes valores del parámetro targetSdkVersion, el comportamiento será diferente:

  • si una aplicación se centró en Android 12, intentará cerrar el cuadro de diálogo del sistema, se lanzará una excepción Excepcion de seguridad;
  • si una aplicación con un valor de parámetro targetSdkVersion de hasta 30 inclusive intenta cerrar el cuadro de diálogo del sistema, se produce una excepción Excepcion de seguridad no ocurrirá. Un intento fallido se reflejará en la entrada en gato de registro.

Cerrar los cuadros de diálogo del sistema en Android 12 sólo en tres casos excepcionales:

  • al ejecutar pruebas instrumentales;
  • cuando la aplicación muestra una ventana ubicada en la parte superior del panel de notificaciones (verdadero para aplicaciones con un valor de parámetro targetSdkVersion de hasta 30 inclusive);
  • cuando el usuario interactúa con las notificaciones (haciendo clic en los botones de acción en las notificaciones) y ejecutando componentes Servicios o Receptor de radiodifusión, que manejan estas interacciones con la aplicación (verdadero para aplicaciones con targetSdkVersion hasta 30 inclusive).
READ
Android P: notificaciones mejoradas

Migración a una nueva targetSdkVersion

1. Limitar el área disponible para notificaciones

Antes Android 12 las aplicaciones podrían usar toda el área de notificación para mostrar información al usuario. La falta de restricciones condujo a la aparición incoherente de notificaciones. A Android 12 habrá plantillas de notificación unificadas para estados colapsados ​​y expandidos.
Vista de la plantilla estándar con área personalizable:

imagen

Nueva plantilla de notificación:

imagen

imagen

Por lo tanto, las notificaciones no podrán utilizar áreas de tamaños arbitrarios. Consideramos que esta es una actualización positiva porque el sistema UI debe ser uniforme en todas las aplicaciones en todos los dispositivos, y no debe permitir que todas las aplicaciones muestren contenido de tamaños arbitrarios.

2. Prohibir el uso de trampolines de notificación

Cuando un usuario interactúa con una notificación, algunas aplicaciones, en respuesta a las acciones del usuario, inician componentes que inician Actividad. Dichos componentes se denominan “trampolines de notificación” (Trampolín de notificación).
En respuesta a la interacción del usuario con la notificación, la aplicación no podrá iniciarse Actividad de componentes Servicios и Receptor de radiodifusión. Se recomienda utilizar notificaciones con Pendiente Intención y ejecutar directamente Actividad.

3. Trabajo inseguro con anidados Intención

Esta actualización mejora la seguridad de las aplicaciones móviles. Considere el siguiente escenario con objeto anidado Intención. Hay dos aplicaciones: Aplicación de cliente и ProviderApp. Solicitud Aplicación de cliente inicia el componente desde ProviderApp. El resultado deseado es ejecutar desde ProviderApp ClientCallbackActivitypropiedad de Aplicación de cliente.

Original: https://miro.medium.com/max/700/0*IEWopqfWI0gFMsnk

Для этого Aplicación de cliente crea Intención (ClientCallbackIntent), que se transferirá primero a ProviderApp a través de extra otro objeto Intención, y luego se utilizará para ejecutar ClientCallbackActivity.
Este patrón de comportamiento en Android es una vulnerabilidad. El script anterior tiene dos problemas:

  • a la aplicación ProviderApp podría funcionar ActividadClientCallbackActivity, este último debe marcarse como exportado. Pero permitirá que otras aplicaciones funcionen con ClientCallbackActivity;
  • anidado Intención se puede utilizar para lanzar cualquier Actividad de la aplicación ProviderApp, incluidos los datos personales privados, no exportables y sensibles Actividad. Por ejemplo, en lugar de ClientCallbackActivityIntención puede referirse a ApiSensitiveActivityApiSensitiveActivity de la aplicación ProviderApp.
READ
La actualización de Android de junio ya está disponible y soluciona 101 problemas

Original: https://miro.medium.com/max/700/0*iof2-14vTyoDX-h5

La solución a estos problemas puede ser Pendiente Intención: Apéndice ProviderApp no solo aceptará IntenciónY Pendiente Intención.

Original: https://miro.medium.com/max/700/0*J1fPWozrWb-__b7u

Comprobación y prevención del lanzamiento no seguro de objetos anidados Intención estará disponible en Android 12. En Modo estricto añadió un cheque especial. Si la aplicación obtiene primero el anidado Intención, pasado en el parámetro extrasy luego lanza otro componente de la aplicación con este objeto anidado Intención, entonces habrá una violación Modo estricto. Para habilitar esta verificación, debe llamar al método detectUnsafeIntentLaunch() al configurar VmPolicy. Se recomienda utilizar Pendiente Intención en lugar de objetos anidados Intención.

4. Cambiable Pendiente Intención

En aplicaciones con targetSdkVersion = 31 en la creación Pendiente Intención sin especificar las banderas PendingIntent.FLAG_MUTABLE o PendingIntent.FLAG_IMMUTABLE, se lanzará una excepción Argumento de excepción ilegal. Estos indicadores determinan si se puede modificar un objeto existente. Pendiente Intención, por ejemplo, para añadirle algo.
Esta actualización está destinada a mejorar la seguridad Se recomienda utilizar la bandera PendingIntent.FLAG_IMMUTABLE donde sea posible.

5. Exportación de componentes más segura

Pasemos a quizás la actualización más esperada. Android 12. Si una aplicación con targetSdkVersion = 31 tiene componentes con bloques no vacíos filtro de intención, entonces para cada uno de esos componentes, el valor del atributo debe especificarse explícitamente android: exportado.
Retrocedamos dos pasos y recordemos que, por defecto, todos los componentes no tienen bloques. filtro de intención android:exported = false , mientras que los componentes de bloque tienen android:exported = true . Esto se hace para que se pueda acceder desde fuera de la aplicación. Sin embargo, debe limitar las aplicaciones que pueden acceder al componente. Si esto no se hace, entonces esto es una vulnerabilidad CWE-926: Exportación incorrecta de componentes de aplicaciones de Android.
Es importante que el propio entorno de desarrollo Estudio Android informará componentes sin un atributo android: exportado:

  • en el caso de Android Studio 2020.3.1 Canarias 11 en archivo Manifiesto la aplicación informará un problema del analizador Hilas, y al intentar compilar, aparecerá un error de compilación;
  • en caso de versiones anteriores Estudio Android se producirá un error al intentar instalar la aplicación en un dispositivo con Android 12.
READ
Marshmallow en casi uno de cada cinco teléfonos inteligentes Android

6. Moderno MismoSitio galleta en WebView

Atributo MismoSitio determina si una cookie se puede enviar con todas las solicitudes o solo al mismo sitio. En aplicaciones adaptadas a Android 12:

  • galleta ningún atributo MismoSitio tratado como SameSite = Lax ;
  • galleta with SameSite = Ninguno debe tener un atributo Seguro (sólo se enviará a través de HTTPS);
  • vínculos entre HTTP и HTTPS procesadas como solicitudes entre sitios, y galleta enviará solo si SameSite=None; seguro.

7. Restricción del lanzamiento de un componente servicio de primer plano

Google con cada lanzamiento ofrece más y más insistentemente dejar el componente Servicios к administrador de trabajo. Por ejemplo, las aplicaciones con un valor targetSdkVersion de 31 no podrán ejecutarse servicio de primer planosi la aplicación se está ejecutando en segundo plano en el momento del lanzamiento.
Todavía hay una serie de restricciones que le permitirán continuar ejecutándose en segundo plano servicio de primer plano. Por ejemplo, después de reiniciar el dispositivo y la aplicación en el componente recibe Receptor de difusión un objeto Intención con el valor del campo de acción ACTION_BOOT_COMPLETED . Además, es posible pedirle al usuario que desactive la optimización de la batería, lo que le permitirá ejecutar servicio de primer plano del fondo
Para las tareas que no se incluyen en las excepciones, se recomienda utilizar el nuevo tipo de tareas trabajos acelerados. Estas tareas pueden ejecutarse instantáneamente siempre que sea posible y no están sujetas a restricciones como Battery Saver и Pastillas.

Características adicionales de la nueva plataforma

Las características adicionales Android 12 no puede afectar negativamente a las aplicaciones existentes. En muchos aspectos, por lo tanto, su integración no será urgente y, a menudo, requerirá un análisis de la utilidad de un proyecto en particular.
Sin embargo, también hay algo a lo que la mayoría de los equipos móviles deben prestar atención:

  • API de esquina redondeada hace que sea más fácil trabajar UI con pantallas con bordes redondeados;
  • al crear una acción en una notificación, fue posible especificar el indicador de solicitud de autenticación mediante el método setAuthenticationRequired(). valor pasado verdadero obliga Android en el caso de un dispositivo bloqueado, solicite al usuario que se autentique. Por lo tanto, la acción establecida para la notificación solo se realizará si el usuario está correctamente autenticado;
  • Transcodificación de medios compatibles: si su aplicación no admite nuevos formatos de medios, entonces Android él los recodificará a formatos más antiguos. En el archivo res/xml/media_capabilities, debe especificar qué formatos de códec admite su aplicación y cuáles no. Esta actualización ayudará a que su aplicación sea estable cuando reciba medios en un nuevo formato para el que aún no está preparado;
  • las estimaciones de rendimiento devueltas por los métodos getLinkDownstreamBandwidthKbps() y getLinkUpstreamBandwidthKbps() se han mejorado para ambos Wi-Fiasí como para comunicaciones celulares. Los métodos devolverán rendimientos promedio ponderados durante todo el tiempo para cada operador, o SSID WiFi, tipo de red e intensidad de la señal entre todas las aplicaciones del dispositivo. Se espera un aumento en la precisión de la estimación durante un arranque en frío de la aplicación;
  • Tercera parte– Las aplicaciones pueden ocultar superposiciones superpuestas como TYPE_APPLICATION_OVERLAY utilizando el método setHideOverlayWindows();
  • El modo inmersivo se simplifica: el usuario podrá navegar con un gesto en modo de pantalla completa en lugar de dos (la primera acción para devolver los elementos de navegación y la segunda acción para salir).

Sería interesante escuchar en los comentarios qué cambios cree que son importantes y útiles, y qué esperaba recibir, pero aún no recibió.

Rating
( No ratings yet )
Like this post? Please share to your friends:
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: