Criar apps de vídeo para o Android Automotive OS

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 o Android Automotive OS, a primeira coisa a fazer é testar seu app para dispositivos móveis (smartphones e tablets) em um emulador do Android Automotive OS. Siga as etapas em Testar apps Android para carros e configure o emulador. Depois, execute o app seguindo estas instruções.

Ao executar o app, tenha cuidado com problemas de compatibilidade, como estes:

  • Telas de infoentretenimento têm orientações fixas. De acordo com as 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 Desativar recursos para ver mais detalhes sobre como lidar com esses problemas.

Configurar os arquivos de manifesto do app

Há várias entradas de manifesto que o app precisa ter para ser direcionado ao Android Automotive OS. Essas entradas permitem que os apps para Android Automotive OS sejam enviados para a Play Store usando um tipo separado de versão Automotive e submetidos a um processo de análise manual para garantir que sejam seguros no carro. Veja mais detalhes em Distribuir apps Android para carros.

Exigir recursos do Android Automotive OS

Para aparecer na Play Store em um carro, os apps de vídeo criados para o Android Automotive OS precisam incluir os seguintes 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 o elemento <uses-feature> acima, porque não dependem de hardware específico para carros. Por isso, para entregar o mesmo app em dispositivos automotivos e não automotivos, ele precisa ter pelo menos duas variações: uma para dispositivos automotivos e outra para dispositivos móveis (como smartphones e tablets). 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 vão ser enviadas separadamente para as faixas da Play Store.

Como alternativa, em vez de usar variações separadas, os apps podem usar nomes de pacotes separados 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 do que já foi mencionado, os apps criados para o Android Automotive OS precisam incluir os seguintes elementos <uses-feature> no <manifest> raiz.

<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 você tem um app automotivo com suporte para vídeos, adicione um arquivo XML chamado automotive_app_desc.xml ao diretório res/xml/ no projeto. Esse arquivo precisa incluir 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"/>

Verificar se não há atividades otimizadas para distração

Atualmente, os apps de vídeo só podem ser usados quando o carro está estacionado. Dessa forma, nenhum elemento <activity> precisa incluir o elemento <meta-data>:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Sem esses metadados, as atividades do app vão ser bloqueadas automaticamente pelo SO quando o veículo estiver em movimento a fim de reduzir as distrações para o motorista. No app, isso vai acontecer como um callback onPause do ciclo de vida, em que você precisa garantir que a reprodução de vídeo e áudio do app esteja pausada.

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 um app para dispositivos móveis estiver disponível no Android Automotive OS, alguns recursos e funcionalidades podem não ser relevantes ou não estar disponíveis. Por exemplo, carros geralmente não fornecem acesso a câmeras. Além disso, apenas um subconjunto do Google Play Services está disponível no Android Automotive OS. Veja mais detalhes em Google Play Services para carros.

Você pode usar a API PackageManager.hasSystemFeature para verificar o recurso FEATURE_AUTOMOTIVE a fim de detectar se o app está sendo executado no Android Automotive OS.

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, caso o app também tenha um componente do Android Auto, pode fazer sentido usar a API CarConnection da biblioteca Car App para detectar se o app está sendo executado no Android Automotive OS, no Android Auto ou se não está conectado a um carro.

No modo picture-in-picture, siga as práticas recomendadas definidas para conferir se o recurso está disponível ou não, e reagir de forma adequada.

Lidar com cenários off-line

Embora os carros estejam cada vez mais conectados à Internet, os apps precisam ser capazes de ser executados sem uma conexão de Internet, como nos casos abaixo:

  • Os fabricantes de automóveis podem oferecer dados móveis como parte de um pacote de assinatura, que os usuários podem ou não comprar.
  • Os usuários podem ativar os dados móveis, mas o acesso pode ser limitado em algumas áreas, assim como acontece com um smartphone.
  • Os carros podem ou não ter rádio Wi-Fi. Nesse caso, um carro pode nunca entrar no alcance do Wi-Fi, ou um OEM pode ter desativado o Wi-Fi para dar preferência a redes celulares.

Os apps precisam estar preparados para lidar com esses cenários e fazer uma degradação suave, por exemplo, oferecendo conteúdo off-line. Se quiser mais informações, consulte as práticas recomendadas para otimizar redes.

Testar apps de vídeo no Android Automotive OS

Os desenvolvedores podem seguir as instruções disponíveis em Testar apps Android para carros. Atualmente, apenas os emuladores do SDK 30 e 32 disponíveis pelo Android Studio incluem a biblioteca android-automotive-video. Portanto, eles precisam ser usados para testar o build do Automotive OS do seu app. Os emuladores de SDK mais antigos não têm a biblioteca, então, as instalações de adb dos apps que exigem a biblioteca vão falhar. 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.