Comienza a compilar apps para ChromeOS

Los dispositivos ChromeOS, como las Chromebooks, admiten las apps de Google Play Store y Android. En este artículo, se supone que tienes una app para Android existente diseñada para teléfonos o tablets que quieres optimizar para Chromebooks. Si quieres conocer los conceptos básicos de la compilación de apps para Android, consulta Cómo compilar tu primera app para Android.

Actualiza el archivo de manifiesto de tu app

Para comenzar, actualiza el archivo de manifiesto para tener en cuenta algunas diferencias clave de hardware y software entre las Chromebooks y otros dispositivos que ejecutan Android.

A partir de la versión M53 de ChromeOS, todas las apps para Android que no requieran explícitamente la función android.hardware.touchscreen también funcionarán en dispositivos ChromeOS que admitan la función android.hardware.faketouch. Sin embargo, para asegurarte de que tu app funcione en todas las Chromebooks, actualiza el archivo de manifiesto para que no se requiera la función android.hardware.touchscreen, como se muestra en el siguiente ejemplo.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          ... >
    <!-- Some Chromebooks don't support touch. Although not essential,
         it's a good idea to explicitly include this declaration. -->
    <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
</manifest>

Los diferentes dispositivos de hardware vienen equipados con diferentes conjuntos de sensores, y es posible que las Chromebooks no tengan todos los sensores que se encuentran en los dispositivos portátiles Android, como el GPS y los acelerómetros. Sin embargo, en algunos casos, la funcionalidad de un sensor se proporciona de otra manera. Por ejemplo, es posible que las Chromebooks no tengan sensores GPS, pero proporcionan datos de ubicación según las conexiones Wi-Fi. Consulta la descripción general de los sensores para obtener más información sobre los sensores que admite la plataforma de Android.

Si quieres que tu app se ejecute en Chromebooks, independientemente de la disponibilidad de sensores, actualiza tu archivo de manifiesto para que no se necesiten sensores.

Algunas funciones de software no son compatibles con Chromebooks. Por ejemplo, las apps que proporcionan IME personalizados, widgets de apps, fondos animados y selectores de aplicaciones no son compatibles y no se pueden instalar en Chromebooks. Para obtener una lista completa de las funciones de software que no son compatibles con las Chromebooks, consulta el artículo sobre funciones de software incompatibles.

Actualiza el SDK de destino

Actualiza el atributo targetSdkVersion de tu app al nivel de API más reciente disponible para aprovechar todas las mejoras de la plataforma de Android. Revisa las mejoras de la plataforma de Android en las diferentes versiones.

Comprueba los requisitos de red

Las Chromebooks ejecutan todo el sistema operativo Android en un contenedor, similar a Docker o LXC. Eso significa que Android no tiene acceso directo a la interfaz LAN del sistema. En cambio, el tráfico IPv4 pasa a través de una capa interna de traducción de direcciones de red (NAT), y el tráfico de unidifusión IPv6 se enruta a través de un salto adicional.

Las conexiones de unidifusión salientes de una app para Android a Internet funcionan casi como están. En general, las conexiones entrantes están bloqueadas. Los paquetes de multidifusión o transmisión de Android no se reenvían a la LAN a través del firewall.

Como excepción a la restricción de multidifusión, ChromeOS ejecuta un servicio que reenvía el tráfico mDNS entre Android y la interfaz LAN, por lo que las APIs de descubrimiento de servicios de red estándar son la forma recomendada de descubrir otros dispositivos en el segmento LAN. Después de encontrar un dispositivo en la LAN, una app para Android puede usar sockets de unidifusión TCP o UDP estándar para comunicarse con él.

Las conexiones IPv4 que se originan en Android usan la dirección IPv4 del host de ChromeOS. De forma interna, la app para Android ve una dirección IPv4 privada asignada a la interfaz de red. Las conexiones IPv6 que se originan en Android usan una dirección diferente del host de ChromeOS, ya que el contenedor de Android tiene una dirección IPv6 pública dedicada.

Usa el almacenamiento local y en la nube de manera eficaz

Las Chromebooks permiten a los usuarios migrar fácilmente de un dispositivo a otro. Si un usuario deja de usar una Chromebook y comienza a usar otra, solo deberá acceder para que aparezcan todas sus apps.

Gracias a esta función, crea una copia de seguridad de los datos de tu app en la nube para habilitar la sincronización entre dispositivos. Sin embargo, no dependas de una conexión a Internet para que tu app funcione con normalidad. En cambio, guarda el trabajo del usuario de forma local cuando el dispositivo no tenga conexión y se sincronice con la nube cuando vuelva a estar en línea.

Las Chromebooks también se pueden compartir entre una gran cantidad de personas, como en las escuelas. Como el almacenamiento local no es infinito, se pueden quitar cuentas completas, junto con su almacenamiento, del dispositivo en cualquier momento. Para entornos educativos, se recomienda tener en cuenta esta situación.

Actualiza las bibliotecas de NDK

Si tu app usa las bibliotecas del NDK de Android y su versión de SDK de destino es la 23 o una posterior, asegúrate de que se quiten las reubicaciones de texto de las versiones ARM y x86 de las bibliotecas del NDK, ya que no son compatibles con Android 6.0 (nivel de API 23) ni versiones posteriores. Si dejas las reubicaciones de texto en tus bibliotecas del NDK, también es posible que se produzcan errores de compatibilidad con las Chromebooks, en especial cuando se ejecutan en un dispositivo que usa una arquitectura x86.

Desarrolla nuevos casos de prueba para la app

A fin de desarrollar casos de prueba para tu app, primero asegúrate de especificar las marcas de manifiesto adecuadas. En particular, considera configurar screenOrientation como unspecified. Si deseas especificar una orientación horizontal, considera usar sensorLandscape para asegurarte de que la experiencia en una tablet sea óptima.

Si tienes necesidades de orientación o tamaño especiales para entornos de computadoras de escritorio, considera agregar metaetiquetas como sugerencias de orientación o tamaño. Para incluir el tamaño y la orientación en los teléfonos, especifica los atributos de diseño defaultHeight, defaultWidth o minHeight.

Si te interesa el control específico de dispositivos de entrada para categorías de dispositivos específicas, especifica android.hardware.type.pc a fin de inhabilitar el modo de compatibilidad de entrada.

Si usas algún tipo de red, asegúrate de que la app pueda volver a conectarse a ella después de que se resuelva un problema de conexión o de que el dispositivo se active del modo de suspensión.

Te recomendamos que revises la lista de casos de prueba de apps para Android en el Sistema operativo Chrome que puedes usar en tu plan de prueba. Los casos de prueba abarcan situaciones comunes para las que deben prepararse las apps para Android si se espera que se ejecuten en dispositivos ChromeOS.

Cambios: Multiventana y orientación

El entorno multiventana de ChromeOS puede hacer que los problemas de persistencia y recuperación de estado sean más evidentes. Usa ViewModel para guardar y restablecer el estado cuando corresponda.

Para probar la persistencia del estado, minimiza la app durante un tiempo, inicia otro proceso que requiera muchos recursos y restablece la app para confirmar que vuelva al estado en el que la dejaste.

Prueba el cambio de tamaño de la ventana presionando la tecla de pantalla completa (F4), maximizando y restableciéndola. Para probar el cambio de tamaño libre, primero habilítalo en las opciones para desarrolladores y, luego, verifica que tu app cambie de tamaño sin problemas y sin fallar.

Si tu dispositivo ChromeOS es compatible, cambia de modo laptop a tablet para verificar si todo funciona como se espera. Rota el dispositivo una vez en el modo tablet para probar los cambios de orientación y, luego, vuelve al modo de laptop. Repite este paso varias veces.

Asegúrate de que la barra superior no rompa la app cuando compensa los elementos de la IU o la entrada táctil basada en la ubicación. En el caso de los dispositivos ChromeOS, asegúrate de que la app no coloque información importante en el área de la barra de estado.

Si usas la cámara u otra función de hardware, como la pluma, asegúrate de que se comporte correctamente cuando se realicen los cambios de ventana y dispositivo descritos anteriormente.