>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Kotlin

Hoe u een stoffige tablet omtovert tot een volwaardig Android Auto-display

Heb je een oude Android 5- of 7-tablet liggen die geen moderne Google Play-apps meer aankan? Je kunt het niet over je hart gooien om hem weg te gooien, maar er is nergens meer gebruik voor. Het ligt voor de hand om hem op het autodashboard te monteren als navigator. Maar standalone apps op het tabletscherm draaien is niet altijd handig: telefoonberichten komen niet door, gesprekken worden niet gestreamd, en je moet onder het rijden opnieuw routewaypoints invoeren.

Je kunt een Chinese headunit kopen voor $300–500. Maar de hardware is vaak twijfelachtig en de firmware loopt om de drie dagen vast. De Open Headunit-repository biedt een andere oplossing. Het is een open-source Android Auto-receiveremulator die vrijwel elk Android-apparaat omtovert tot een autodisplay.

Headunit Logo

Waarom een oud project nieuw leven inblazen

Het originele Headunit-project werd oorspronkelijk geschreven door ontwikkelaar Michael Reed. Na verloop van tijd stopte de auteur met het updaten van de codebase, terwijl Google de communicatieprotocollen in Android Auto voortdurend veranderde. Andre Knirim pakte het project op, herschreef een aanzienlijk deel van de logica in Kotlin en creëerde Open Headunit.

De hoofdtaak van de app is om te luisteren naar de datastream van de smartphone, video te decoderen en touchscreen- en stuurwielknopsignalen terug te sturen. Belangrijk is dat je de emulator zelfs kunt draaien op apparaten met Android 4.1.

Open Headunit screenshot

Verbindingsmethoden en protocolvalkuilen

Je kunt je telefoon via een kabel of draadloos verbinden met de emulator. Maar daar beginnen de nuances, en daarom ontvangt het project regelmatig nieuwe commits.

Bedrade USB-verbinding

De meest betrouwbare optie. De kabel streamt video zonder vertraging en laadt tegelijkertijd de smartphone op.

Om dit te laten werken heb je USB Host (OTG)-ondersteuning op de tablet nodig. In de Open Headunit-instellingen kun je kiezen tussen de standaard Android USB-stack of de libusb-bibliotheek. De tweede optie komt goed van pas op specifieke Chinese Allwinner- en MediaTek-chipsets, waar het standaard Android USB-subsysteem USB-apparaten uitschakelt bij de geringste storing.

Draadloze modus en de listen van Google

Google update Android Auto elke zes maanden consistent en verstoort onofficiële methoden voor video-overdracht via Wi-Fi. In Android Auto 17.4 hebben ontwikkelaars bijvoorbeeld opnieuw het verbindingsschema overhoop gegooid, waardoor draadloze hulpmiddelen van derden werden gebroken.

Momenteel implementeert het project verschillende draadloze verbindingsopties:

  • Wireless Helper: een aparte companion-app voor de smartphone. Het regelt automatisch hotspot-activatie, zoekt naar de headunit-server op het lokale netwerk en start streaming zonder extra klikken.
  • Wi-Fi Direct (P2P): directe verbinding tussen twee apparaten zonder extern Wi-Fi-netwerk of mobiele hotspot.
  • Native modus: emulatie van de standaardverbinding via Bluetooth-handshake. Werkt niet overal, aangezien weinig tablets de vereiste Bluetooth-profielen correct tegelijkertijd aankunnen.

Je kunt een draadloze verbinding rechtstreeks vanuit automatiseringsscripts starten. Als je Tasker of MacroDroid gebruikt, kun je met één intent een opdracht sturen om verbinding te maken met een specifiek IP-adres:

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

Open Headunit screenshot

Onder de motorkap

Het project is geschreven in Kotlin, maar er zit veel low-level hardwarewerk verborgen.

Ten eerste videodecodering. Standaard probeert het systeem hardware MediaCodec te gebruiken voor H.264 of H.265. Als de chipset van de tablet H.265 NAL-pakketten incorrect verwerkt (wat vaak voorkomt op oudere Amazon Fire-tablets en Rockchip-apparaten), bevriest het beeld op het "Android wordt gestart"-bericht. Om dit probleem te omzeilen hebben ontwikkelaars de FFmpeg-softwaredecoder ingebouwd. De oplossing vermindert FPS op zwakke single-core processors, maar biedt stabiel beeld zonder zwart scherm.

Ten tweede audio focus-afhandeling. Tot versie 3.2.0 onderbrak muziek die op de tablet werd afgespeeld de navigatiertonen van de smartphone. De auteurs herschreven AudioTrackWrapper en voegden dynamische audio focus-capture toe. Nu worden systeemroutebegeleidingsprompts gemixt met achtergrondgeluid zonder het afspelen te onderbreken.

Ten derde bediening. Open Headunit kan signalen onderscheppen van fabrieks-stuurwielknoppen (MTC, FYT) en draaiknopbediening. De instellingen bevatten een visuele key sniffer waar je een fysieke knop aan acties in de Android Auto-interface kunt toewijzen.

Open Headunit screenshot

Vervelende bugs en hoe ze te verhelpen

Door verschillen in hardware en Android-versies moet je waarschijnlijk de instellingensectie controleren.

  • Google Maps reageert niet op tikken in portretmodus. Dit is een bekende bug in de interactie tussen Google-services en emulators van derden. Dit wordt verholpen door de DPI (pixeldichtheid)-parameter in de app-instellingen te verlagen naar waarden onder 200 (bijvoorbeeld 190).
  • Beeld schokt of loopt achter. Je moet de ingebouwde Auto-Optimization Wizard uitvoeren. Het doorloopt automatisch resolutiecombinaties (tot 14.40p) en codecs, en selecteert de juiste combinatie voor je videodecoder.
  • Constant Wi-Fi-uitval. In de Android-instellingen op je telefoon moet je de functie "Wi-Fi Assistant" (automatisch overschakelen naar mobiel netwerk wanneer het signaal zwak is zonder internet) uitschakelen.

Samenvatting

Open Headunit is een geweldig voorbeeld van hoe de open gemeenschap het probleem van geplande hardware-obsolescntie oplost. Als je een stoffige tablet, een telefoonhouder en een uur vrije tijd voor installatie hebt, krijg je een handig navigatie- en mediasysteem in de auto zonder geld uit te geven aan een nieuwe headunit.

Het project is actief, PR's van externe bijdragers worden regelmatig geaccepteerd en de repository Wiki bevat gedetailleerde debuggingstappen voor specifieke Chinese platforms.

Gerelateerde projecten