page.title=Cambios en los comportamientos page.keywords=versión preliminar,sdk,compatibilidad meta.tags="preview", "compatibility" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body

En este documento

  1. Mejoras de rendimiento
    1. Descanso
    2. Optimizaciones en segundo plano
  2. Cambios en los permisos
  3. Intercambio de archivos entre aplicaciones
  4. Mejoras de accesibilidad
    1. Zoom de la pantalla
    2. Vision Settings en el asistente de configuración
  5. Aplicaciones del NDK con vínculos a bibliotecas de plataformas
  6. Android for Work
  7. Retención de anotaciones
  8. Otros aspectos importantes

Consulta también

  1. Información general sobre la API de Android N

Además de nuevas características y capacidades, Android N incluye diversos cambios en el sistema y en los comportamientos de la API. En este documento, se destacan algunos de los cambios principales que debes comprender y justificar en tus aplicaciones.

Si publicaste anteriormente una aplicación para Android, ten en cuenta que tu aplicación podría verse afectada por estos cambios en la plataforma.

Batería y memoria

Android N incluye cambios en los comportamientos del sistema para mejorar la duración de la batería de los dispositivos y reducir el uso de la memoria RAM. Estos cambios pueden afectar el acceso de tu aplicación a recursos del sistema, además de la manera en que tu aplicación interactúa con otras aplicaciones mediante determinadas intents implícitas.

Descanso

Descanso, presentado en Android 6.0 (nivel de API 23), prolonga la duración de la batería aplazando actividades de CPU y red cuando un usuario deja un dispositivo desenchufado, quieto y con la pantalla apagada. En Android N se ofrecen más mejoras para Descanso a través de la aplicación de un subconjunto de restricciones de CPU y red mientras el dispositivo se encuentra desenchufado y con la pantalla apagada, aunque no necesariamente quieto; por ejemplo, al ir dentro del bolsillo de un usuario en movimiento.

Figura 1: Ilustración del modo en que Descanso aplica un primer nivel de restricciones de actividad del sistema para prolongar la duración de la batería.

Cuando un dispositivo funciona con la batería y la pantalla permanece apagada durante un tiempo determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock}, alarmas de {@link android.app.AlarmManager}, GPS y análisis de Wi-Fi. Independientemente de que se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen acceso a la red y pueden ejecutar sincronizaciones o procesos aplazados.

Figura 2: Ilustración del modo en que Descanso aplica un segundo nivel de restricciones de actividad del sistema después de que el dispositivo permanece quieto durante un tiempo determinado.

Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se desactiva el modo Descanso y se retiran estas restricciones de procesamiento. El comportamiento adicional no tiene efecto sobre las recomendaciones ni las prácticas recomendadas para adaptar tu aplicación a la versión anterior de Descanso, presentada en Android 6.0 (nivel de API 23), según lo descrito en Optimización para Descanso y App Standby. De todos modos, debes seguir las recomendaciones; por ejemplo, la de usar Google Cloud Messaging (GCM) para enviar y recibir mensajes, y la de planificar actualizaciones para adaptar el comportamiento adicional de Descanso.

Project Svelte: Optimizaciones en segundo plano

En Android N, se eliminan tres transmisiones implícitas para ayudar a optimizar el uso de la memoria y el consumo de energía. Este cambio es necesario porque las transmisiones implícitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en segundo plano. La eliminación de estas transmisiones puede mejorar sustancialmente el rendimiento del dispositivo y la experiencia del usuario.

Los dispositivos móviles están sujetos a cambios de conectividad frecuentes entre los modos de datos Wi-Fi y móviles. Actualmente, las aplicaciones pueden realizar controles en busca de cambios en la conectividad registrando un receptor para la transmisión implícita {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su manifiesto. Debido a que muchas aplicaciones se registran para recibir esta transmisión, un cambio de red puede hacer que todas se activen y procesen la transmisión a la vez.

Asimismo, en versiones anteriores de Android, las aplicaciones podían registrarse para recibir las transmisiones implícitas {@link android.hardware.Camera#ACTION_NEW_PICTURE} y {@link android.hardware.Camera#ACTION_NEW_VIDEO} de otras aplicaciones, como la cámara. Cuando un usuario toma una foto con la aplicación de la cámara, estas aplicaciones se activan para procesar la transmisión.

Para corregir estos problemas, en Android N se aplican las siguientes optimizaciones:

Si la aplicación utiliza cualquiera de estas intents, debes quitar las dependencias en ellas lo antes posible a fin de poder orientar los dispositivos con Android N correctamente. El framework de Android ofrece varias soluciones para mitigar la necesidad de estas transmisiones implícitas. Por ejemplo, la API {@link android.app.job.JobScheduler} proporciona un mecanismo sólido para programar operaciones de red cuando se cumplen las condiciones especificadas, como una conexión a una red de uso no medido. Puedes usar {@link android.app.job.JobScheduler} para responder a cambios en proveedores de contenido.

Para obtener más información sobre optimizaciones en segundo plano en Android N y la manera de adaptar tu aplicación, consulta Optimizaciones en segundo plano.

Cambios en los permisos

En Android N, se incorporan cambios en permisos que pueden afectar tu aplicación.

Cambios en los permisos del sistema de archivos

Para mejorar la seguridad de los archivos privados, el directorio privado de las aplicaciones orientadas a Android N o versiones posteriores tiene acceso restringido. (0700). Esta configuración evita la fuga de metadatos de archivos privados, como su tamaño o existencia. Este cambio en los permisos tiene varios efectos secundarios:

Intercambio de archivos entre aplicaciones

En las aplicaciones orientadas a Android N, el framework de Android aplica la política de la API {@link android.os.StrictMode} que prohíbe exponer URI {@code file://} fuera de la aplicación. Si una intent con un URI de archivo sale de tu aplicación, la aplicación falla con una excepción {@code FileUriExposedException}.

Para compartir archivos entre aplicaciones, debes enviar un URI {@code content://} y otorgar un permiso de acceso temporal en el URI. La forma más sencilla de otorgar este permiso es utilizando la clase {@link android.support.v4.content.FileProvider}. Para obtener más información sobre permisos e intercambio de archivos, consulta Intercambio de archivos.

Mejoras de accesibilidad

En Android N, se incluyen cambios destinados a mejorar la usabilidad de la plataforma para usuarios con defectos o discapacidades visuales. Estos cambios generalmente no deben exigir modificaciones en el código de tu aplicación. Sin embargo, debes revisar estas funciones y probarlas con tu aplicación para avaluar el posible impacto en la experiencia del usuario.

Zoom de la pantalla

Android N permite a los usuarios configurar Display size, el ajuste que expande o contrae todos los elementos de la pantalla, lo cual mejora la accesibilidad al dispositivo para usuarios con poca visión. Estos no podrán superar el valor de zoom mínimo de sw320dp para el ancho de pantalla, que es el ancho de un Nexus 4, un teléfono común de tamaño intermedio.

Figura 3: En la pantalla de la derecha se muestra el efecto que tiene aumentar Display size para un dispositivo con una imagen de sistema de Android N.

Al cambiar la densidad del dispositivo, el sistema notifica a las aplicaciones de las siguientes maneras:

En la mayoría de las aplicaciones, no se necesitan cambios para admitir esta función, si en ellas se siguen las prácticas recomendadas de Android. Verificaciones específicas que deben realizarse:

Vision Settings en el asistente de configuración

Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden configurar los siguientes ajustes de accesibilidad para un nuevo dispositivo: Magnification gesture, Font size, Display size y TalkBack. Este cambio aumenta la visibilidad de errores relacionados con diferentes ajustes de pantalla. Para evaluar el impacto de esta función, debes probar tus aplicaciones con estos ajustes habilitados. Puedes encontrarlos en Settings > Accessibility.

Aplicaciones del NDK con vínculos a bibliotecas de plataformas

En Android N, se incluyen cambios en el espacio de nombres a fin de evitar la carga de API no públicas. Si usas el NDK, solo debes emplear API públicas de la plataforma de Android. El uso de API no públicas en la próxima versión oficial de Android puede hacer que tu aplicación se bloquee.

Con el propósito de alertarte sobre el uso de API no públicas, las aplicaciones que funcionen en un dispositivo con Android N producirán un error de salida de logcat cuando una de ellas llame a una API no pública. Este error también aparecerá en la pantalla del dispositivo como un mensaje para ayudar a generar conciencia respecto de la situación. Debes revisar el código de tu aplicación para quitar el uso de API de plataformas no públicas y probar por completo tus aplicaciones con un dispositivo de prueba o emulador.

Si tu aplicación depende de bibliotecas de plataformas, consulta la documentación sobre el NDK a fin de hallar soluciones típicas para el reemplazo de API privadas comunes por API públicas equivalentes. También es posible que establezcas vínculos con bibliotecas de plataformas sin notarlo, en especial si tu aplicación usa una biblioteca que forma parte de la plataforma (como libpng), pero no del NDK. En ese caso, asegúrate de que tu APK contenga todos los archivos .so con los cuales intentaste establecer vínculos.

Advertencia: Algunas bibliotecas de terceros pueden establecer vínculos con API no públicas. Si tu aplicación usa estas bibliotecas, es probable que se bloquee al ejecutarse en la próxima versión oficial de Android.

Las aplicaciones no deben depender de bibliotecas nativas no incluidas en el NDK ni usarlas, ya que pueden modificarse o eliminarse en la transición de una versión de Android a otra. El cambio de OpenSSL a BoringSSL es un ejemplo de modificaciones como esta. A su vez, los diferentes dispositivos pueden ofrecer distintos niveles de compatibilidad, debido a que no existen requisitos de compatibilidad para bibliotecas de plataformas no incluidas en el NDK. Si debes acceder a bibliotecas no relacionadas con el NDK en dispositivos anteriores, haz que la carga dependa del nivel de la API de Android.

Para ayudarte a diagnosticar estos tipos de problemas, a continuación, se ofrecen ejemplos de errores de Java y del NDK que podrías hallar al intentar compilar tu aplicación con Android N:

Ejemplo de error de Java:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

Ejemplo de error de NDK:

dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

Aquí se ofrecen soluciones típicas para aplicaciones en las que se produzcan estos tipos de errores:

Android for Work

Android N contiene cambios para aplicaciones orientadas a Android for Work, entre los que se incluyen modificaciones en la instalación de certificados, el restablecimiento de contraseñas, la gestión de usuarios secundarios y el acceso a identificadores de dispositivos. Si creas aplicaciones para entornos de Android for Work, debes estudiar estos cambios y modificar tu aplicación según corresponda.

Para obtener más información sobre los cambios de Android for Work en Android N, consulta Actualizaciones de Android for Work.

Retención de anotaciones

Android N soluciona un error por el cual la visibilidad de las anotaciones se había ignorado. Este problema permitió que el tiempo de ejecución accediera a anotaciones a las que no debía tener acceso. Entre estas anotaciones se incluyen las siguientes:

Si tu aplicación se basa en este comportamiento, agrega una política de retención para las anotaciones que deben estar disponibles en el tiempo de ejecución. Para ello, usa {@code @Retention(RetentionPolicy.RUNTIME)}.

Otros aspectos importantes