>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Kotlin

Como Transformar um Tablet Antigo em uma Tela Completa do Android Auto

Tem um tablet antigo com Android 5 ou 7 parado que não consegue mais rodar os apps modernos do Google Play? Você não consegue se desfazer dele, mas também não tem onde usá-lo. Parece lógico montá-lo no painel do carro como navegador. Mas rodar apps independentes na tela do tablet nem sempre é conveniente: as mensagens do celular não chegam, as ligações não são transmitidas, e você precisa inserir os pontos de rota novamente enquanto dirige.

Você pode comprar uma central multimídia chinesa por US$ 300–500. No entanto, o hardware costuma ser questionável e o firmware trava a cada três dias. O repositório Open Headunit oferece uma solução diferente. É um emulador de receptor Android Auto de código aberto que transforma praticamente qualquer dispositivo Android em uma tela para carro.

Logo do Headunit

Por que reviver um projeto antigo

O projeto Headunit original foi criado pelo desenvolvedor Michael Reed. Com o tempo, o autor parou de atualizar a base de código, enquanto o Google mudava constantemente os protocolos de comunicação no Android Auto. Andre Knirim assumiu o projeto, reescreveu uma parte significativa da lógica em Kotlin e criou o Open Headunit.

A tarefa principal do app é escutar o fluxo de dados do smartphone, decodificar o vídeo e enviar de volta os sinais de toque e dos botões do volante. Importante: você pode rodar o emulador até em dispositivos com Android 4.1.

Captura de tela do Open Headunit

Métodos de conexão e armadilhas dos protocolos

Você pode conectar seu celular ao emulador via cabo ou pelo ar. Mas é aí que começam as sutilezas, e é por isso que o projeto recebe commits novos regularmente.

Conexão USB com fio

A opção mais confiável. O cabo transmite vídeo sem atrasos e carrega o smartphone simultaneamente.

Para funcionar, você vai precisar de suporte a USB Host (OTG) no tablet. Nas configurações do Open Headunit, você pode escolher a pilha USB padrão do Android ou a biblioteca libusb. A segunda opção é útil em chipsets chineses específicos da Allwinner e MediaTek, onde o subsistema USB padrão do Android desativa os dispositivos USB ao menor problema.

Modo sem fio e as artimanhas do Google

O Google atualiza consistentemente o Android Auto a cada seis meses e quebra os métodos não oficiais de transmissão de vídeo pelo Wi-Fi. Por exemplo, na versão 17.4 do Android Auto, os desenvolvedores mais uma vez reformularam o esquema de conexão, quebrando os auxiliares sem fio de terceiros.

Atualmente, o projeto implementa várias opções de conexão sem fio:

  • Wireless Helper: um app companheiro separado para o smartphone. Ele cuida do lançamento automático do hotspot, da busca pelo servidor headunit na rede local e inicia a transmissão sem cliques extras.
  • Wi-Fi Direct (P2P): conexão direta entre dois dispositivos sem uma rede Wi-Fi externa ou hotspot móvel.
  • Modo nativo: emulando a conexão padrão via handshake Bluetooth. Não funciona em todos os lugares, já que poucos tablets conseguem lidar corretamente com os perfis Bluetooth necessários simultaneamente.

Você pode iniciar uma conexão sem fio diretamente de scripts de automação. Se você usa o Tasker ou MacroDroid, pode enviar um comando para conectar a um endereço IP específico usando um único intent:

adb shell am start -a android.intent.action.VIEW -d "headunit://connect?ip=192.168.1.25"

Captura de tela do Open Headunit

Sob o capô

O projeto é escrito em Kotlin, mas há muito trabalho de hardware de baixo nível escondido por dentro.

Primeiro, a decodificação de vídeo. Por padrão, o sistema tenta usar a MediaCodec de hardware para H.264 ou H.265. Se o chipset do tablet manipular incorretamente os pacotes NAL do H.265 (o que é comum em tablets Amazon Fire antigos e dispositivos Rockchip), a imagem congela na mensagem "Android está iniciando". Para contornar esse problema, os desenvolvedores incluíram o decodificador de software FFmpeg. A solução reduz os FPS em processadores fracos de núcleo único, mas fornece imagem estável sem telas pretas.

Segundo, o tratamento de foco de áudio. Até a versão 3.2.0, a música tocando no tablet interrompia os sons do navegador do smartphone. Os autores reescreveram a AudioTrackWrapper e adicionaram captura dinâmica de foco de áudio. Agora os prompts de orientação de rota do sistema são mixados com o som de fundo sem interromper a reprodução.

Terceiro, os controles. O Open Headunit pode interceptar sinais dos botões originais do volante (MTC, FYT) e controles do joystick rotativo. As configurações incluem um sniffing visual de teclas onde você pode atribuir um botão físico a ações na interface do Android Auto.

Captura de tela do Open Headunit

Bugs irritantes e como corrigi-los

Devido a diferenças no hardware e nas versões do Android, você provavelmente precisará verificar a seção de configurações.

  • O Google Maps não responde a toques no modo retrato. Este é um bug conhecido na interação entre os serviços do Google e emuladores de terceiros. É corrigido diminuindo o parâmetro DPI (densidade de pixels) nas configurações do app para valores abaixo de 200 (por exemplo, 190).
  • A imagem trava ou atrasa. Você deve executar o Assistente de Auto-Otimização integrado. Ele percorre automaticamente combinações de resolução (até 14.400p) e codecs, selecionando a combinação certa para o seu decodificador de vídeo.
  • Quedas constantes de Wi-Fi. Nas configurações do Android do seu celular, você precisa desativar a função "Wi-Fi Assistant" (troca automática para rede móvel quando o sinal está fraco sem internet).

Resumo

O Open Headunit é um ótimo exemplo de como a comunidade open source resolve o problema da obsolescência planejada de hardware. Se você tem um tablet parado, um suporte para carro e uma hora de tempo livre para configuração, você terá um sistema de navegação e mídia conveniente no carro sem gastar dinheiro em uma nova central multimídia.

O projeto está ativo, PRs de contribuidores externos são regularmente aceitos, e o Wiki do repositório tem passos detalhados de debug para plataformas chinesas específicas.

Projetos relacionados