O Android Automotive OS permite que os usuários instalem apps no carro. Para alcançar os usuários nessa plataforma, você precisa distribuir um app otimizado para motoristas que seja compatível com o Android Automotive OS. É possível reutilizar quase todo o código e os recursos do seu app original no app Android Auto, mas é necessário criar uma versão separada que atenda aos requisitos descritos nesta página.
Para executar o app para carros no Android Automotive OS, você precisa do Host de modelos mais recente, que vem como um app do sistema.
Visão geral do desenvolvimento
A adição de suporte para o Android Automotive OS exige apenas algumas etapas, conforme descrito nas seções desta página:
- Criar um módulo automotivo
- Declarar suporte ao Android Automotive OS
- Declarar
CarAppService
eCarAppActivity
- Atualizar as dependência do Gradle
Use o Android Studio Bumblebee ou mais recente para garantir que todos os recursos do Automotive OS estejam ativados.
Criar um módulo automotivo
Alguns componentes do Android Automotive OS, como o manifesto, têm requisitos específicos da plataforma. Crie um módulo que possa manter o código desses componentes separado do restante do código do seu projeto, como o código usado no app para smartphones.
Para um projeto já existente, siga as etapas abaixo para adicionar um módulo automotivo ao seu projeto.
- No Android Studio, clique em File > New > New Module.
- Selecione Automotive Module e clique em Next.
- Preencha o campo Application/Library name. Esse é o nome do seu app que os usuários veem no Android Automotive OS.
- Preencha o campo Module name.
- Edite o Package name para corresponder ao app já existente.
Selecione API 29: Android 10 (Q) para o Minimum SDK e clique em Next. Todos os carros que oferecem suporte à biblioteca Car App no Android Automotive OS são executados no Android 10 (nível 29 da API) ou mais recente. Portanto, a seleção desse valor se destina a todos os carros compatíveis.
Clique em Add No Activity e, em seguida, clique em Finish.
Se você estiver iniciando um novo projeto, siga estas etapas:
- No Android Studio, clique em File > New > New Project.
- Selecione Automotive em Project Type.
- Selecione No Activity e clique em Next.
- Forneça um Name para o projeto. Esse é o nome do seu app que os usuários veem no Android Automotive OS.
- Insira um Package name. Para ver mais detalhes sobre como selecionar um nome de pacote, consulte a seção Nomes de pacotes.
Selecione API 29: Android 10 (Q) para o Minimum SDK e clique em Next.
Todos os carros que oferecem suporte à biblioteca Car App no Android Automotive OS são executados no Android 10 (nível 29 da API) ou mais recente. Portanto, a seleção desse valor se destina a todos os carros compatíveis.
Depois de criar seu módulo no Android Studio, abra o arquivo AndroidManifest.xml
no novo módulo automotivo:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.car.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
O elemento application
tem algumas
informações padrão do app, bem como um elemento uses-feature
que declara suporte para o Android Automotive OS. Observe que não
há atividades declaradas no manifesto.
Em seguida, adicione os seguintes elementos uses-feature
ao seu manifesto:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.car.app"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> <uses-feature android:name="android.hardware.type.automotive" android:required="true" /> <uses-feature android:name="android.software.car.templates_host" android:required="true" /> <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" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> </manifest>
O primeiro elemento uses-feature
declara que seu app usa o Templates Host
para ser executado. Definir explicitamente os quatro elementos uses-feature
restantes para
required="false"
garante que o app não entre em conflito com os recursos de hardware disponíveis
nos dispositivos Android Automotive OS.
Declarar suporte ao Android Automotive OS
Use esta entrada de manifesto para declarar que o app oferece suporte ao Android Automotive OS:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Essa entrada de manifesto se refere a um arquivo XML que declara a quais recursos automotivos seu app oferece suporte.
Para indicar que você tem um app da biblioteca Car App,
adicione um arquivo XML chamado automotive_app_desc.xml
ao diretório res/xml/
no
módulo do Android Automotive OS. Esse arquivo precisa incluir este conteúdo:
<automotiveApp>
<uses name="template"/>
</automotiveApp>
.
Declarar o CarAppService e a CarAppActivity
O Android Automotive OS usa a implementação do CarAppService
e
a declaração da CarAppActivity
para iniciar o app. Consulte
Criar CarAppService e Session e
Declarar o CarAppService para ver instruções sobre
como implementar e declarar o CarAppService
.
No Android Automotive OS, uma Screen
é renderizada em uma Activity
incluída na
biblioteca Car App. No entanto, é necessário declará-la no manifesto com
o seguinte elemento activity
:
<activity android:exported="true" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:name="androidx.car.app.activity.CarAppActivity" android:launchMode="singleTask" android:label="Your app name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <!-- Include the category below ONLY for navigation apps --> <category android:name="android.intent.category.APP_MAPS" /> </intent-filter> <!-- Include the intent-filter below ONLY for navigation apps --> <intent-filter> <action android:name="androidx.car.app.action.NAVIGATE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="geo" /> </intent-filter> <meta-data android:name="distractionOptimized" android:value="true" /> </activity>
Atualizar as dependência do Gradle
Recomendamos manter o CarAppService
em um módulo separado que você compartilhe entre o app para smartphones e o módulo
automotivo. Se você está usando essa abordagem, é necessário atualizar o módulo
automotivo para incluir o módulo compartilhado, conforme mostrado no seguinte snippet:
my-automotive-os-module/build.gradle
Groovy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Outras considerações
Lembre-se destas considerações quando estiver desenvolvendo seu app Android Automotive OS:
Nomes de pacote
Como você distribui um pacote de aplicativo Android (APK) separado para o Android Automotive OS, é possível reutilizar o nome do pacote do seu app para dispositivos móveis ou criar um novo nome de pacote. Se você usar um nome de pacote diferente, o app terá duas páginas "Detalhes do app" separadas para a Play Store. Se você reutilizar o nome do pacote atual, o app vai ter uma única página de detalhes nas duas plataformas.
Isso é predominantemente uma decisão comercial. Por exemplo, se você tem uma equipe trabalhando no app para dispositivos móveis e uma equipe separada trabalhando no app Android Automotive OS, pode fazer sentido ter nomes de pacotes diferentes e permitir que cada equipe gerencie as próprias páginas "Detalhes do app". Não há uma grande diferença no esforço técnico necessário para usar qualquer uma das abordagens.
A tabela a seguir resume algumas das principais diferenças importantes entre manter o nome do pacote atual ou usar um novo nome:
Recurso | Mesmo nome de pacote | Novo nome do pacote |
---|---|---|
Página "Detalhes do app" | Uma | Várias |
Instalação espelhada | Sim: reinstalação rápida de app durante o assistente de configuração | Não |
Processo de análise da Play Store | Bloqueio de análises: se a análise falhar para um APK, os outros APKs enviados na mesma versão serão bloqueados | Análises individuais |
Estatísticas, métricas e vitals | Combinado: você pode filtrar por nome de dispositivo para dados específicos de automóveis. | Separados |
Indexação e classificação na pesquisa | Com base na posição atual | Sem transferência |
Integração a outros apps | Provavelmente nenhuma alteração será necessária, supondo que o código de mídia seja compartilhado entre os dois APKs | Talvez seja necessário atualizar o app correspondente, como para a reprodução de URIs com o Google Assistente. |
Conteúdo off-line
Se aplicável, implemente o suporte off-line no seu app. Os carros com Android Automotive OS precisam ter conectividade de dados própria, o que significa que um plano de dados está incluído no custo do veículo ou pago pelo usuário. No entanto, espera-se que os carros tenham mais conectividade variável do que os dispositivos móveis.
Veja alguns pontos importantes ao considerar sua estratégia de suporte off-line:
- O melhor momento para fazer o download de conteúdo é enquanto o app está em uso.
- Não suponha que o Wi-Fi esteja disponível. Um carro pode nunca entrar no alcance do Wi-Fi ou o fabricante de equipamento original (OEM) pode ter desativado o Wi-Fi em favor de uma rede celular.
- Não há problema em armazenar em cache o conteúdo que você espera que os usuários usem, mas recomendamos permitir que eles mudem esse comportamento.
- O espaço em disco nos carros varia. Por isso, ofereça aos usuários uma maneira de excluir conteúdo off-line.
Perguntas frequentes
Consulte as seções a seguir para ver respostas de algumas perguntas frequentes sobre o Android Automotive OS.
Há restrições ou recomendações quanto ao uso de SDKs e bibliotecas de terceiros?
Não há diretrizes específicas sobre o uso de SDKs e bibliotecas de terceiros. Se você optar por usar SDKs e bibliotecas de terceiros, ainda será responsável por obedecer a todos os requisitos de qualidade de apps para carros.
Como faço para publicar meu app Android Automotive OS usando o Google Play Console?
O processo é semelhante à publicação de um app para smartphones, mas você usa um formato diferente. Para que seu app use o tipo de versão do Android Automotive OS, siga estas etapas:
- Abra o Play Console.
- Selecione seu app.
- No menu à esquerda, selecione Versão > Configuração > Configurações avançadas > Tipos de versão.
- Selecione Adicionar tipo de versão > Android Automotive OS e siga as instruções no Play Console.
Solução de problemas
Consulte esta seção para conseguir ajuda com alguns cenários comuns de solução de problemas no Android Automotive OS.
Mesmo depois de desinstalar um app da biblioteca Car App das configurações do sistema, recebo um erro quando tento instalar uma nova versão.
Para garantir que o app seja desinstalado, use o comando
adb uninstall app.package.name
.