Comece a criar apps para o ChromeOS

Os dispositivos ChromeOS, como os Chromebooks, são compatíveis com a Google Play Store e os apps Android. Este artigo pressupõe que você já tenha um app Android projetado para smartphones ou tablets que queira otimizar para Chromebooks. Para aprender os conceitos básicos da criação de apps Android, consulte Criar seu primeiro app Android.

Atualizar o arquivo de manifesto do app

Para começar, atualize o arquivo de manifesto para considerar algumas diferenças importantes de hardware e software entre Chromebooks e outros dispositivos que executam o Android.

A partir da versão M53 do ChromeOS, todos os apps Android que não exigem explicitamente o recurso android.hardware.touchscreen também funcionam em dispositivos ChromeOS com suporte ao recurso android.hardware.faketouch. No entanto, para garantir que seu app funcione em todos os Chromebooks, atualize o arquivo de manifesto para que o recurso android.hardware.touchscreen não seja necessário, conforme mostrado no exemplo abaixo.

<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>

Diferentes dispositivos de hardware vêm equipados com diferentes conjuntos de sensores, e os Chromebooks podem não ter todos os sensores encontrados em dispositivos portáteis Android, como GPS e acelerômetros. No entanto, em alguns casos, a funcionalidade de um sensor é fornecida de outra forma. Por exemplo, os Chromebooks podem não ter sensores de GPS, mas fornecem dados de local com base em conexões Wi-Fi. Consulte a visão geral dos sensores para saber mais sobre os sensores com suporte na Plataforma Android.

Se você quiser que o app seja executado em Chromebooks, independente da disponibilidade do sensor, atualize o arquivo de manifesto para que nenhum sensor seja necessário.

Alguns recursos de software não são compatíveis com Chromebooks. Por exemplo, apps que fornecem IMEs personalizados, widgets de apps, planos de fundo interativos e inicializadores de apps não têm suporte e não podem ser instalados em Chromebooks. Para conferir uma lista completa dos recursos de software que não têm suporte nos Chromebooks, consulte Recursos de software incompatíveis.

Atualizar seu SDK de destino

Atualize o atributo targetSdkVersion do seu app para o nível da API mais recente disponível e aproveite todas as melhorias na Plataforma Android. Analise as melhorias na plataforma Android em diferentes versões.

Verificar os requisitos de rede

Os Chromebooks executam todo o sistema operacional Android em um contêiner, semelhante ao Docker ou ao LXC. Isso significa que o Android não tem acesso direto à interface da LAN do sistema. Em vez disso, o tráfego IPv4 passa por uma camada interna de conversão de endereços de rede (NAT), e o tráfego unicast IPv6 é encaminhado por um salto extra.

As conexões unicast de saída de um app Android para a Internet funcionam principalmente no estado em que se encontram. Em geral, as conexões de entrada são bloqueadas. Pacotes multicast ou de transmissão do Android não são encaminhados para a LAN pelo firewall.

Como exceção à restrição de multicast, o ChromeOS executa um serviço que encaminha o tráfego mDNS entre o Android e a interface da LAN. Portanto, as APIs de descoberta de serviço de rede padrão são a maneira recomendada de descobrir outros dispositivos no segmento de LAN. Depois de encontrar um dispositivo na LAN, um app Android pode usar soquetes unicast TCP ou UDP padrão para se comunicar com ele.

As conexões IPv4 originadas do Android usam o endereço IPv4 do host do ChromeOS. Internamente, o app Android identifica um endereço IPv4 particular atribuído à interface de rede. As conexões IPv6 originadas do Android usam um endereço diferente do host do ChromeOS, porque o contêiner do Android tem um endereço IPv6 público dedicado.

Usar nuvem e armazenamento local de forma eficaz

Os Chromebooks permitem que os usuários migrem facilmente de um dispositivo para outro. Se um usuário parar de usar um Chromebook e começar a usar outro, ele só precisará fazer login, e todos os apps dele serão exibidos.

Devido a esse recurso, faça backup dos dados do app na nuvem para ativar a sincronização entre dispositivos. No entanto, não dependa de uma conexão de Internet para que seu app opere normalmente. Em vez disso, salve o trabalho do usuário localmente quando o dispositivo estiver off-line e faça a sincronização com a nuvem quando ele voltar a ficar on-line.

Os Chromebooks também podem ser compartilhados entre um grande número de pessoas, como em escolas. Como o armazenamento local não é infinito, contas inteiras e o armazenamento delas podem ser removidos do dispositivo a qualquer momento. Para configurações educacionais, é uma boa ideia manter esse cenário em mente.

Atualizar as bibliotecas do NDK

Se o app usa as bibliotecas do Android NDK e a versão do SDK de destino é 23 ou mais recente, remova as realocações de texto das versões ARM e x86 das bibliotecas do NDK, já que elas não são compatíveis com o Android 6.0 (API de nível 23) ou versões mais recentes. Ao deixar realocações de texto nas bibliotecas do NDK, você também pode causar erros de compatibilidade com Chromebooks, especialmente ao executar em um dispositivo que usa uma arquitetura x86.

Desenvolver novos casos de teste para seu app

Para desenvolver casos de teste para o app, primeiro especifique as flags de manifesto adequadas. Especificamente, considere definir screenOrientation como unspecified. Se você quiser especificar uma orientação de paisagem, use sensorLandscape para garantir que a experiência em um tablet seja ideal.

Se você tiver necessidades especiais de tamanho ou orientação para ambientes de computador, adicione metatags como dicas de tamanho ou orientação. Para incluir o tamanho e a orientação em smartphones, especifique os atributos defaultHeight, defaultWidth ou minHeight de layout.

Se você tiver interesse no processamento específico de dispositivos de entrada para categorias específicas de dispositivos, especifique android.hardware.type.pc para desativar o modo de compatibilidade de entrada.

Se você estiver usando qualquer tipo de rede, verifique se o app pode se reconectar à rede depois que um problema de conexão for resolvido ou se o dispositivo for ativado no modo de espera.

Recomendamos verificar a lista de casos de teste para apps Android no Chrome OS, que podem ser usados no seu plano de teste. Os casos de teste abrangem cenários comuns para os quais os apps Android precisam estar preparados caso sejam executados em dispositivos ChromeOS.

Alterações de orientação e várias janelas

O ambiente de várias janelas do ChromeOS pode tornar a persistência de estado e os problemas de recall mais óbvios. Use ViewModel para salvar e restaurar seu estado quando apropriado.

Para testar a persistência de estado, minimize o app por algum tempo, inicie outro processo que consome muitos recursos e restaure o app para confirmar se ele retorna ao estado em que você o deixou.

Redimensionamento da janela de teste pressionando a tecla de tela cheia (F4), maximizando e restauração. Para testar o redimensionamento livre, primeiro ative-o nas opções do desenvolvedor e verifique se o app é redimensionado sem falhas.

Se o dispositivo ChromeOS for compatível, mude do modo laptop para o tablet para verificar se tudo está funcionando conforme o esperado. Gire o dispositivo uma vez no modo tablet para testar as mudanças de orientação e volte para o modo laptop. Repita essa etapa algumas vezes.

Confira se a barra superior não corrompe o app ao deslocar elementos da interface ou a entrada por toque baseada na localização. Para dispositivos ChromeOS, verifique se o app não coloca informações importantes na área da barra de status.

Se você estiver usando a câmera ou outro recurso de hardware, como a caneta, verifique se ele se comporta corretamente ao realizar as mudanças de janela e dispositivo descritas anteriormente.