Comienza a compilar apps para ChromeOS

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

Actualiza el archivo de manifiesto de tu app

Para comenzar, actualiza tu archivo de manifiesto para dar cuenta de algunas diferencias clave de hardware y software entre 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 distintos 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 otro modo. Por ejemplo, es posible que las Chromebooks no tengan sensores GPS, pero proporcionan datos de ubicación basados en conexiones Wi-Fi. Consulta la descripción general de los sensores para obtener más información sobre los sensores compatibles con la plataforma de Android.

Si deseas que tu app se ejecute en Chromebooks, independientemente de la disponibilidad de sensores, actualiza el archivo de manifiesto para que no se requiera ninguno de estos sensores.

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

Actualiza el SDK de destino

Actualiza el atributo targetSdkVersion de tu app al último nivel de API disponible para aprovechar todas las mejoras de la plataforma de Android. Revisa las mejoras en la plataforma de Android a lo largo de las diferentes versiones.

Comprueba los requisitos de red

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

Las conexiones de unidifusión salientes de una app para Android a Internet funcionan tal 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 estándar de detección de servicios de red son la forma recomendada de detectar otros dispositivos en el segmento de LAN. Después de encontrar un dispositivo en la LAN, una app para Android puede usar los sockets de unidifusión TCP o UDP estándar para comunicarse con él.

Las conexiones IPv4 que se originan en Android utilizan la dirección IPv4 del host del Sistema operativo Chrome. Internamente, la app de 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 a la del host de ChromeOS, ya que el contenedor de Android tiene una dirección IPv6 pública exclusiva.

Usa el almacenamiento local y en la nube de manera eficaz

Las Chromebooks permiten que los usuarios migren fácilmente de un dispositivo a otro. Si un usuario deja de usar una Chromebook y comienza a usar otra, solo debe acceder a su cuenta para ver todas sus apps.

Debido a esta función, crea una copia de seguridad de los datos de la app en la nube para permitir la sincronización entre dispositivos. Sin embargo, no dependas de una conexión a Internet para que tu app funcione de forma normal. En su lugar, guarda el trabajo del usuario de forma local cuando el dispositivo está sin conexión y sincroniza con la nube una vez que el dispositivo vuelva a estar en línea.

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

Desarrolla nuevos casos de prueba para la app

Para desarrollar casos de prueba para tu app, primero asegúrate de especificar las marcas de manifiesto adecuadas. En particular, considera establecer screenOrientation en 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 especiales de tamaño o orientación para entornos de computadoras de escritorio, considera agregar metaetiquetas como sugerencias de tamaño o orientación. Para incluir el tamaño y la orientación en teléfonos, especifica los atributos de diseño defaultHeight, defaultWidth o minHeight.

Si te interesa el manejo específico de dispositivos de entrada para categorías de dispositivos puntuales, especifica android.hardware.type.pc para inhabilitar el modo de compatibilidad de entrada.

Si estás utilizando 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 cuando el dispositivo salga del modo de suspensión.

Te recomendamos que consultes la lista de casos de prueba de apps para Android en ChromeOS que puedes usar en tu plan de prueba. Estos casos abarcan situaciones comunes para las que las apps para Android deben estar preparadas si se espera que se ejecuten en dispositivos ChromeOS.

Cambios: Multiventana y orientación

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

Para probar la persistencia del estado, minimiza la app durante un tiempo, inicia otro proceso que haga un uso intensivo de recursos y, luego, restablece la app para confirmar que vuelva al estado en que se la había dejado.

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

Si el dispositivo ChromeOS lo admite, cambia del modo laptop al modo tablet para verificar que todo funcione como se espera. Gira el dispositivo en modo tablet para probar los cambios de orientación y, luego, vuelve al modo laptop. Repite este paso varias veces.

Asegúrate de que la barra superior no rompa la app cuando se compensan 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 muestre información importante en el área de la barra de estado.

Si usas la cámara u otra función de hardware, como el lápiz, asegúrate de que estas se comporten correctamente cuando se hagan los cambios de ventana y dispositivo antes indicados.