Além de oferecer suporte a apps criados para você usar quando está dirigindo, o Android Automotive OS também oferece suporte a apps de navegadores, jogos e vídeos para quando o veículo está estacionado. É possível enviar o mesmo app, tanto para carros como para dispositivos de tela grande, fazendo apenas algumas pequenas mudanças.
Testar o app em um emulador do Android Automotive OS
Para começar a criar apps para Android Automotive OS, primeiro teste seu app em um emulador do Android Automotive OS. Siga as etapas em Testar usando o emulador do Android Automotive OS e configure o emulador. Em seguida, execute o app seguindo as instruções em Executar o app no emulador.
Ao executar o app, tenha cuidado com problemas de compatibilidade, como estes:
- As telas de infoentretenimento têm orientações fixas. Para atender às diretrizes de qualidade de apps para carros, os apps precisam oferecer suporte às orientações de retrato e paisagem.
- As APIs disponíveis em outros dispositivos podem não estar presentes no Android Automotive OS. Esse é o caso de algumas APIs do Google Play Services, por exemplo. Consulte a seção Desativar recursos para conferir mais detalhes sobre como lidar com esses problemas.
Configurar os arquivos de manifesto do app
Para ser direcionado ao Android Automotive OS, o app precisa ter determinadas entradas de manifesto. Com elas, os apps destinados ao Android Automotive OS são enviados à Play Store usando outro tipo de versão do Automotive OS. Eles passam por um processo de análise manual para garantir que sejam seguros para uso em carros. Confira mais detalhes em Distribuir apps Android para carros.
Recursos necessários do Android Automotive OS
Para serem listados na Play Store em um carro, os apps criados para o Android Automotive OS
precisam incluir o seguinte elemento <uses-feature>
no arquivo
AndroidManifest.xml
:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
Os apps enviados para faixas não automotivas não podem declarar o elemento <uses-feature>
mostrado no exemplo de código anterior, porque não dependem de
hardware específico para carros. Portanto, para enviar o mesmo app para dispositivos automotivos e
não automotivos, é necessário gerar pelo menos duas variações:
uma para dispositivos automotivos e outra para dispositivos móveis. Para mais informações
sobre como criar essas variações, consulte estas páginas:
As duas variações do app podem ter o mesmo nome de pacote, mas precisam ter códigos de versão diferentes, já que elas são enviadas separadamente para as faixas da Play Store.
Como alternativa, em vez de usar variações separadas, você pode usar nomes de pacotes diferentes para os APKs de dispositivos móveis e automotivos ou pacotes de app. Se quiser entender as desvantagens de cada abordagem, consulte a seção Nomes de pacote no guia para desenvolvedores de apps de mídia.
Além dos elementos mostrados no exemplo de código anterior, os apps criados para o
Android Automotive OS precisam incluir estes elementos <uses-feature>
no
elemento raiz <manifest>
:
<uses-feature
android:name="android.hardware.wifi"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false"/>
Definir explicitamente esses recursos como não obrigatórios garante que o app não entre em conflito com os recursos de hardware disponíveis nos dispositivos Android Automotive OS.
Verificar se não há atividades otimizadas contra distrações
Para garantir que seu app esteja disponível para uso apenas estacionado, não
inclua o seguinte elemento <meta-data>
em nenhum
elemento <activity>
do
manifesto:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Sem esses metadados, as atividades do app são bloqueadas automaticamente
pelo SO quando o veículo está em movimento a fim de reduzir as distrações para o
motorista. Isso acontece como um callback do ciclo de vida de
onPause
,
em que você precisa pausar a reprodução de vídeo e áudio
do app.
Entradas do manifesto específicas da categoria
Além dos requisitos anteriores, que se aplicam a todos os apps para carros estacionados, os as categorias de vídeo e jogos têm requisitos adicionais:
- Para apps de vídeo, consulte Marcar seu aplicativo como um app de vídeo.
- Para jogos, consulte Marcar seu app como um jogo.
Otimizar o app para o Android Automotive OS
Para oferecer aos usuários a melhor experiência possível, não se esqueça do seguinte ao criar seu app para o Android Automotive OS.
Otimizar para telas grandes
As telas presentes nos veículos com Android Automotive OS são mais semelhantes em tamanho, resolução e proporção a tablets e dispositivos dobráveis do que a smartphones. Dessa forma, otimizar o app para telas grandes também beneficia os usuários de carros.
Consulte especificamente os guias Suporte a tamanhos de tela diferentes e Migrar a interface para layouts responsivos. Neles, você vai encontrar detalhes sobre como aproveitar ao máximo telas grandes, além das galerias de mídia e jogos para inspiração de design e orientação.
Outras otimizações de tela grande, como compatibilidade de entrada, não são diretamente benéficas para o Android Automotive OS, mas ainda podem melhorar a experiência do usuário. Por exemplo, a navegação pelo teclado usa as mesmas APIs da navegação por seletor giratório, então qualquer otimização feita nela pode beneficiar os dois formatos.
Trabalhar com encartes de janela e cortes da tela
Assim como em outros formatos, o Android Automotive OS inclui elementos da interface do sistema, como barras de status e navegação, e suporte a telas não retangulares.
Por padrão, os apps renderizam em uma área que não se sobrepõe às barras de sistema ou aos cortes da tela. No entanto, o app pode ocultar as barras de sistema, renderizar o conteúdo atrás delas ou mostrar o conteúdo em um corte da tela, conforme descrito em Posicionar o app dentro de encartes de janelas. Se o app realizar qualquer uma dessas ações, consulte as subseções abaixo para detalhes sobre como permitir que o app funcione bem em todo o ecossistema de dispositivos Android Automotive OS.
Barras de sistema, modo imersivo e renderização de ponta a ponta
As barras de sistema em carros podem ser dimensionadas e posicionadas de maneira diferente de outros formatos. Por exemplo, as barras de navegação podem ser posicionadas à esquerda, à direita ou na parte de baixo da tela. Mesmo que haja uma barra de status na parte de cima e uma barra de navegação na parte de baixo, como é o caso da maioria dos smartphones e tablets, o tamanho desses elementos provavelmente será muito maior em carros.
Além disso, o Android Automotive OS permite que os OEMs controlem se os
apps podem ou não mostrar ou ocultar as barras de sistema para entrar e sair do modo
imersivo. Por exemplo, ao impedir que apps
ocultem as barras de sistema, os OEMs podem garantir que os controles do veículo, como os de clima,
fiquem sempre acessíveis na tela. Se um OEM impedir os apps de
controlar as barras de sistema, nada acontecerá quando um app chamar as APIs
WindowInsetsController
(ou WindowInsetsControllerCompat
)
para mostrar ou ocultar barras de sistema. Consulte a documentação de show
e
hide
para saber mais sobre como detectar se o app conseguiu modificar os
encartes.
Da mesma forma, os OEMs também podem controlar se os apps podem ou não definir a cor e a translucência das barras de sistema para garantir que elas e os elementos contidos nelas fiquem claramente visíveis o tempo todo. Se o app renderizar de ponta a ponta, confira se apenas conteúdo não essencial é mostrado por trás das barras de sistema. Esse conteúdo pode não ser visível se o OEM do dispositivo impedir a configuração da cor ou da translucência das barras.
<!-- Depending on OEM configuration, these style declarations
(and the corresponding runtime calls) may be ignored -->
<style name="...">
<item name="android:statusBarColor">...</item>
<item name="android:navigationBarColor">...</item>
<item name="android:windowTranslucentStatus">...</item>
<item name="android:windowTranslucentNavigation">...</status>
</style>
Se o app cobre a tela inteira de ponta a ponta, não presuma o tamanho, o número, o tipo ou a localização das barras de sistema. Em vez disso, use as APIs de encarte de janela para mostrar o conteúdo do app em relação às barras de sistema. Consulte Mostrar conteúdo de ponta a ponta no app para saber mais sobre como usar essas APIs. Valores de padding codificados que, embora nunca sejam recomendados, podem manter o conteúdo na área segura em outros dispositivos que provavelmente não serão usados em carros.
Adaptar para telas de formato irregular
Além das telas retangulares, alguns veículos podem ter telas de formato irregular, como mostrado na Figura 1:
Se o app não renderizar de ponta a ponta, não será necessário fazer algo para que ele seja renderizado dentro da área segura.
Se o app renderizar de ponta a ponta, você poderá escolher como gostaria que ele se
comportasse em relação aos cortes da tela. Para fazer isso, use recursos
configurando o atributo
android:windowLayoutInDisplayCutoutMode
para o tema do app ou durante a execução
modificando o atributo da janela
layoutInDisplayCutoutMode
.
Como os tipos de corte da tela presentes nos dispositivos Android Automotive OS
são diferentes daqueles usados em dispositivos móveis, não use
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
nem LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
,
que têm comportamento otimizado para os cortes encontrados em dispositivos móveis. Em vez disso,
use LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
ou LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
para sempre evitar ou sempre usar o corte. Ao escolher a segunda opção,
consulte Suporte a cortes de tela para saber mais
sobre as APIs relacionadas.
Se o app for renderizado na área de corte da tela, e você quiser um comportamento diferente entre o Android Automotive OS e o dispositivo móvel, consulte Desativar recursos para orientações se o app definir esse comportamento durante a execução. Consulte Usar recursos alternativos caso seu app defina esse comportamento usando arquivos de recursos.
Desativar recursos
Se você estiver disponibilizando um app para dispositivos móveis no Android Automotive OS, alguns recursos e funcionalidades podem não ser relevantes ou não estar disponíveis. Por exemplo, os carros geralmente não oferecem acesso a câmeras. Além disso, apenas um subconjunto do Google Play Services está disponível no Android Automotive OS. Consulte mais detalhes em Google Play Services para carros.
Você pode usar a API PackageManager.hasSystemFeature
para detectar se o app está sendo executado no Android Automotive OS. Para isso,
confira se o
recurso FEATURE_AUTOMOTIVE
está presente, conforme mostrado no exemplo a seguir:
Kotlin
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Java
PackageManager packageManager = ... // Get a PackageManager from a Context boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Como alternativa, se o app também tiver um componente do Android Auto, você poderá usar a API CarConnection da biblioteca de apps Android for Cars para detectar se o app está sendo executado no Android Automotive OS ou no Android Auto ou se não está conectado a um carro.
No modo picture-in-picture (PiP), siga as práticas recomendadas estabelecidas para conferir se o recurso está disponível e reagir de forma adequada.
Lidar com cenários off-line
Embora os carros estejam cada vez mais conectados à Internet, é recomendado que os apps possam ser executados sem uma conexão de Internet, como nos seguintes casos:
- Os usuários podem desativar os dados móveis oferecidos como parte de um pacote de assinatura do fabricante de automóveis.
- O acesso a dados móveis pode ser limitado em algumas áreas.
- Carros com rádios Wi-Fi podem estar fora do alcance do recurso ou um OEM pode desativar o Wi-Fi em favor de uma rede móvel.
Prepare-se para lidar com esses cenários no seu app fazendo uma degradação suave das funcionalidades que dependem do acesso à Internet, como a oferta de conteúdo off-line. Se quiser mais informações, consulte as práticas recomendadas para otimizar redes.
Usar recursos alternativos
Para adaptar seu app para carros, use o qualificador de recurso car
, que fornece
recursos alternativos
durante a execução de um app em um veículo com o Android Automotive OS. Por exemplo, se você utilizar
recursos de dimensão para armazenar
valores de padding, poderá usar um valor maior para o conjunto de recursos car
para aumentar
as áreas de toque.
Distribuir seu app
Depois de testar seu app em relação às diretrizes de qualidade de apps para carros da categoria e criar um build do Android Automotive OS com as mudanças necessárias, você pode publicar o item nas faixas de formato do Automotive OS na Play Store. Consulte Distribuir apps Android para carros para mais detalhes sobre o processo de publicação.
Enviar feedback sobre apps para carros estacionados
Use o Google Issue Tracker se tiver problemas ou quiser sugerir um recurso durante o desenvolvimento do seu app para carros estacionados para Android Automotive OS. Preencha todas as informações solicitadas no modelo de problema. Antes de informar um novo problema, verifique se ele já foi comunicado na lista. É possível se inscrever e votar em problemas clicando na estrela ao lado deles. Para ver mais informações, consulte Como se inscrever em um problema.