page.title=Cambios en los comportamientos page.keywords=preview,sdk,compatibility meta.tags=“preview”, “compatibilidad” page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body
Además de nuevas funciones y capacidades, en Android N se incluyen varios cambios en el comportamiento del sistema y de las API. En este documento se destacan algunos de los cambios principales que debes comprender y tener en cuenta 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.
Android N contiene cambios en el comportamiento del sistema destinados a lograr mejoras en la duración de las baterías de los dispositivos, el uso de la memoria RAM y el rendimiento de las aplicaciones. Estos cambios pueden tener efecto en la disponibilidad de recursos y notificaciones de sistema para tu aplicación. Debes revisar estos cambios y evaluar las posibles formas en que tu aplicación deba adecuarse a ellas.
Doze, 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 Doze 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 Doze 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 Doze 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 Doze, el sistema aplica el resto de las restricciones del modo a alarmas de {@link android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} y análisis de GPS o Wi-Fi. Independientemente de que se apliquen algunas o todas las restricciones del modo Doze, 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 Doze 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 activar la pantalla o se enchufa el dispositivo se desactiva el modo Doze 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 Doze, presentada en Android 6.0 (nivel de API 23), según lo descrito en Optimización para Doze 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 considerar el comportamiento adicional de Doze.
En Android N se eliminan tres difusiones implícitas para optimizar el uso de la memoria y el consumo de energía. Este cambio es necesario porque las difusiones implícitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en segundo plano. La eliminación de estas difusiones 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 difusión implícita {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su manifiesto. Debido a que muchas aplicaciones se registran para recibir esta difusión, un cambio de red puede hacer que todas se activen y procesen la difusión a la vez.
Asimismo, las aplicaciones pueden registrarse para recibir las difusiones 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 difusión.
Para corregir estos problemas, en Android N se aplican las siguientes optimizaciones:
En versiones futuras de Android, es posible que dejen de usarse más difusiones implícitas y servicios en segundo plano no asociados. Por esta razón, debes evitar dependencias en receptores declarados en manifiestos para difusiones implícitas o eliminarlas de ellos, y aplicar lo mismo a los servicios en segundo plano.
El framework de Android proporciona varias soluciones para reducir la necesidad de difusiones implícitas o servicios en segundo plano. Por ejemplo, la API de {@link android.app.job.JobScheduler} proporciona un mecanismo sólido para programar operaciones de red cuando se cumplen condiciones especificadas, como la conexión a una red de uso no medido. Puedes incluso usar {@link android.app.job.JobScheduler} para responder a cambios de los proveedores de contenido.
Para obtener más información sobre este cambio en el comportamiento y la manera de adaptar tu aplicación, consulta Optimizaciones en segundo plano.
En Android N se incorporan cambios en permisos que pueden tener efecto en tu aplicación. Se incluyen cambios en permisos de cuentas de usuarios y un nuevo permiso para operaciones de escritura en dispositivos de almacenamiento externo. A continuación, se ofrece un resumen de los permisos que se modificaron en la muestra:
El permiso GET_ACCOUNTS ha quedado en desuso. El sistema ignora este permiso para las aplicaciones orientadas a Android N.
En Android N se incluyen cambios destinados a mejorar la utilidad de la plataforma para usuarios con defectos o discapacidades visuales. Estos cambios generalmente no exigirán 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.
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 zoom 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, ya que en ellas rigen prácticas recomendadas de Android. Verificaciones específicas que deben realizarse:
sw320dp
y asegúrate de que funcione bien.
Nota: Si almacenaste en caché datos que dependen de la configuración, te convendrá incluir metadatos relacionados, como el tamaño de pantalla correspondiente o la densidad de píxeles para dichos datos. Guardar estos metadatos de permite decidir si necesitas actualizar los datos almacenados en caché después de un cambio en la configuración.
dp) independientes de la densidad.
Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden 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.
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 con forma de mensaje para generar conciencia respecto de la situación. Debes revisar el código de tu aplicación para eliminar el uso de API de plataforma 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 NDK para hallar
soluciones típicas para el reemplazo de API privadas comunes por API 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.
Precaución: 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 en dispositivos anteriores, haz que la carga dependa del nivel de la Android API.
Para ayudarte a diagnosticar estos tipos de problemas, a continuación se ofrecen ejemplos de errores de Java y NDK que podrías hallar al intentar crear 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:
AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from <jni.h>.
#include <sys/system_properties.h>
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 planeas crear aplicaciones para entornos de Android for Work, debes repasar estos cambios y modificar tu aplicación de manera correspondiente.
DevicePolicyManager.setCertInstallerPackage(). Si el instalador
no está instalado de antemano, el sistema emite una
IllegalArgumentException.
DevicePolicyManager.resetPassword() para borrar contraseñas ni modificar
las que ya están establecidas. No obstante, pueden establecer una contraseña, aunque solo
cuando el dispositivo no tiene contraseña, PIN ni patrón.
DISALLOW_MODIFY_ACCOUNTS para el usuario.
DISALLOW_ADD_USER
en forma automática. Esto evita que los usuarios creen usuarios secundarios no
administrados. A su vez, los métodos CreateUser() y
createAndInitial() han quedado en desuso; los reemplaza el nuevo método
DevicePolicyManager.createAndManageUser().
DevicePolicyManagewr.getWifiMacAddress(). Si nunca se habilitó la función Wi-Fi
en el dispositivo, este método devuelve un valor {@code null}.
Para obtener más información sobre los cambios de Android for Work en Android N, consulta Actualizaciones de Android for Work.
Debes probar tu aplicación para controlar que no tenga lugar este comportamiento. Puedes hacerlo produciendo un error idéntico al finalizarla manualmente a través del panel DDMS.
Las aplicaciones orientadas a Android N y versiones posteriores no finalizarán automáticamente por cambios en la densidad; sin embargo, es posible que respondan en forma deficiente a los cambios en la configuración.