Criar apps de vídeo para o Android Automotive OS

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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.