O Android Automotive OS permite que os usuários executem apps de vídeo no sistema de infoentretenimento de um carro estacionado.
Testar o app em um emulador do Android Automotive OS
Para começar a criar apps para Android Automotive OS, primeiro teste seu app para dispositivos móveis em um emulador do Android Automotive OS. Siga as etapas em Testar apps Android para carros 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. Eles passam por um processo de análise manual para garantir que sejam seguros para uso em carros. Veja mais detalhes em Distribuir apps Android para carros.
Recursos necessários do Android Automotive OS
Para ser listado na Play Store em um carro, os apps de vídeo criados para o Android Automotive OS
precisam incluir estes elementos <uses-feature>
e <uses-library>
no arquivo AndroidManifest.xml
:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
<application ...>
...
<uses-library
android:name="android-automotive-video"
android:required="true"/>
...
</application>
</manifest>
Os apps enviados para faixas não automotivas não podem declarar os elementos <uses-feature>
mostrados 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.
Marcar como um app de vídeo
Para indicar que o app automotivo oferece suporte a vídeo, adicione um arquivo XML
chamado automotive_app_desc.xml
ao diretório res/xml/
no projeto.
Nesse arquivo, inclua o seguinte conteúdo:
<automotiveApp>
<uses name="video"/>
</automotiveApp>
No elemento <application>
do manifesto, adicione o seguinte elemento
<meta-data>
, que referencia o arquivo XML:
<meta-data
android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
Não incluir atividades otimizadas para distração
Apps de vídeo só podem ser usados quando o carro está estacionado. Assim, não
inclua o seguinte elemento <meta-data>
em nenhum elemento <activity>
:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Sem esses metadados, as atividades do app serão bloqueadas automaticamente
pelo SO quando o veículo estiver 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.
Otimizar o app para o Android Automotive OS
Para oferecer aos usuários a melhor experiência possível, pode ser necessário ativar ou desativar algumas funcionalidades, dependendo se o app está sendo executado em um carro ou não.
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. Confira 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 Android for Cars App 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, os apps podem ser executados sem uma conexão de Internet, como nos casos abaixo:
- Os usuários podem desativar os dados da rede celular oferecidos como parte de um pacote de assinatura do fabricante de automóveis.
- O acesso a dados da rede celular pode ser limitado em algumas áreas.
- Carros com rádio Wi-Fi podem estar fora do alcance do Wi-Fi ou um OEM pode desativar o Wi-Fi em favor de uma rede celular.
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.
Testar apps de vídeo no Android Automotive OS
Em geral, siga as instruções disponíveis em
Testar apps Android para carros. Somente os emuladores do SDK 30
e 32 disponíveis no Android Studio incluem a
biblioteca android-automotive-video
. Portanto, use-os para testar o
build do Automotive OS do seu app. Emuladores do SDK mais antigos não têm a biblioteca,
o que faz com que as instalações de adb
dos apps que exigem a biblioteca falhem. A biblioteca pode ser incluída em
veículos de produção em níveis mais baixos do SO.
Perguntas frequentes
Há suporte para o DRM da Widevine?
Sim, o Android Automotive OS oferece suporte ao Widevine DRM L3.