BMW Touch Command im G30

  • Hallo zusammen,

    ich habe mich in den letzten Wochen intensiv mit dem Thema BMW Touch Command im G30 beschäftigt.

    Mein Ziel war es, die originale BMW Touch Command Anwendung nicht mehr auf der mittlerweile alten, ursprünglich vorgesehenen Tablet-Hardware betreiben zu müssen, sondern auf einem aktuellen Android-Tablet.

    Nach mehreren Anpassungen und Tests direkt im Fahrzeug läuft Touch Command mittlerweile bei mir auf einem Samsung Galaxy Tab A11 LTE mit Android 16 und verbindet sich erfolgreich mit meinem BMW 540i G30 Pre-LCI mit NBT EVO.

    Den aktuellen Stand habe ich G30 A15 genannt.

    Wichtig vorweg: Das Ganze ist ein privates und inoffizielles Projekt. Es handelt sich weder um eine offizielle BMW-Version noch um eine von BMW freigegebene Nachrüstlösung.

    Was ist BMW Touch Command?

    BMW Touch Command ist die von BMW entwickelte Tablet-Lösung zur Bedienung verschiedener Fahrzeugfunktionen vom Fond aus.

    Die originale Anwendung unterstützt intern unter anderem:

    • TV_G11
    • TV_G30
    • TV_G38

    Die Kommunikation mit dem Fahrzeug erfolgt unter anderem über Wi-Fi Direct. Das originale BMW Connected SDK g11.0317.1183 ist weiterhin Bestandteil der Anwendung.

    Mein Ziel war ausdrücklich kein kompletter Rewrite. Die originale BMW Anwendung sollte mit möglichst wenigen Änderungen auf aktueller Android-Hardware wieder funktionieren.

    Getestete Hardware

    Tablet: Samsung Galaxy Tab A11 LTE

    Modell: SM-X135

    Android: Android 16

    Display: 8,7 Zoll / 1340 × 800 Pixel

    Die Auflösung passt sehr gut zur originalen Touch-Command-Oberfläche. BMW-Grafiken, Bedienoberfläche und die rechte Funktionsleiste werden korrekt dargestellt. Änderungen am Layout waren nicht notwendig.

    Fahrzeug: BMW 540i G30 Pre-LCI mit NBT EVO.

    Touch Command muss natürlich auch fahrzeugseitig entsprechend vorhanden bzw. codiert sein. Die Android-Anpassung ersetzt die notwendige Fahrzeugcodierung nicht.

    Warum funktioniert die originale APK nicht einfach?

    Die Anwendung wurde für eine deutlich ältere Android-Version und die damalige BMW/Samsung-Hardware entwickelt.

    Android hat seitdem unter anderem das Verhalten von Berechtigungen, Speicherzugriff, Wi-Fi Direct, Wi-Fi-P2P und Systemeinstellungen verändert. Zusätzlich enthält die BMW Software verschiedene Prüfungen speziell für die damalige Tablet-Konfiguration.

    Mein Grundsatz bei den Änderungen war deshalb:

    So viele Änderungen wie nötig – so wenige wie möglich.

    BMW Connected SDK, Fahrzeugprotokoll, Fahrzeugsteuerungslogik und Benutzeroberfläche wurden nicht neu programmiert.

    Auch das Target SDK 23 wurde bewusst beibehalten, um nicht durch eine SDK-Umstellung zusätzliche Änderungen am ursprünglichen Verhalten zu verursachen.

    Android-16-Kompatibilität

    Für aktuelle Android-Versionen wurde die Berechtigungsabfrage angepasst. Berücksichtigt werden unter anderem:

    • ACCESS_FINE_LOCATION
    • ACCESS_COARSE_LOCATION
    • WRITE_SETTINGS
    • READ_EXTERNAL_STORAGE
    • WRITE_EXTERNAL_STORAGE

    Die notwendigen Standortberechtigungen können beim ersten Start über den normalen Android-Berechtigungsdialog freigegeben werden.

    BMW Setup-Wizard

    Die originale BMW Anwendung besitzt eine spezielle Setup-Wizard-Logik für das ursprünglich vorgesehene Tablet.

    Diese konnte nach einer Neuinstallation den ersten Start absichtlich blockieren:

    #setupwizard Stop TouchCommand, since setup wizard was finished. Need to block the first start

    Diese alte Startblockierung wurde in G30 A15 deaktiviert. Touch Command kann dadurch auf dem aktuellen Tablet normal gestartet werden.

    Wi-Fi Direct – die größte Baustelle

    Die Verbindung zum BMW war der aufwendigste Teil.

    Unter aktuellen Android-Versionen kann eine Wi-Fi-Direct-Verbindung bereits CONNECTED sein, obwohl Android gleichzeitig available = false meldet.

    Die alte BMW Anwendung wertete NetworkInfo.isAvailable() aus und konnte dadurch eine tatsächlich bestehende Verbindung fälschlicherweise als nicht verfügbar behandeln.

    Diese Logik wurde angepasst.

    Zusätzlich enthält die originale Anwendung mehrere Stellen, an denen während des Pairings disableWifi() aufgerufen wird. Unter aktuellen Android-Versionen kann das den eigenen Verbindungsaufbau stören. Die problematischen Aufrufe wurden deshalb deaktiviert.

    Beim Pairing wird stattdessen sichergestellt, dass WLAN verfügbar ist und die Wi-Fi-Direct-Gerätesuche durchgeführt werden kann.

    Wi-Fi-P2P GroupInfo

    Die BMW Anwendung erwartete die Informationen über die aktuelle Wi-Fi-P2P-Gruppe direkt im CONNECTION_STATE_CHANGE Intent.

    Unter aktuellen Android-Versionen sind diese Informationen dort nicht mehr zuverlässig verfügbar.

    Die aktuelle Gruppe wird deshalb über einen WifiP2pManager.GroupInfoListener abgefragt. Über WifiP2pGroup.getOwner() wird anschließend der Group Owner ermittelt und an die bestehende BMW-Verbindungslogik übergeben.

    Die eigentliche BMW Kommunikation wurde dabei nicht ersetzt – lediglich die Beschaffung der von Android benötigten Wi-Fi-Direct-Informationen wurde angepasst.

    Ein auf dem Samsung-Tablet aufgetretener ART/Dalvik VerifyError im angepassten Listener wurde ebenfalls behoben.

    BMW Remote Integration

    Neben Touch Command wird die BMW Remote Integration benötigt.

    Auch diese enthält Prüfungen für die ursprüngliche BMW/Samsung-Hardware. Für die aktuelle Android-Umgebung wurde sie entsprechend angepasst.

    Die BMW Tablet-Variante wird als:

    degas2wifibmw

    erkannt.

    Auch die alte Samsung-KNOX-Prüfung wurde berücksichtigt und der BootReceiver funktioniert. Nach einem Neustart konnte der IntegrationService automatisch gestartet werden.

    Einige privilegierte Rechte der ursprünglichen BMW/Samsung-Systemanwendung, z. B. STATUS_BAR, SET_TIME oder SHUTDOWN, können einer normalen heutigen Android-App nicht ohne Weiteres erteilt werden.

    Für die bisher getestete grundlegende Touch-Command-Funktion waren diese Rechte jedoch nicht erforderlich. Eine Root-Pflicht wollte ich bewusst vermeiden.

    Speicherzugriff

    Auch der Android-Speicher wurde seit der ursprünglichen Touch-Command-Version stark verändert.

    BMW verwendet unter anderem die Datei bmw_info.txt. Der hierfür verwendete Speicherzugriff wurde auf einen mit aktuellen Android-Versionen kompatiblen App-Pfad angepasst:

    /storage/emulated/0/Android/data/com.bmwgroup.touchcommand/files/bmw_info.txt

    Die komplette BMW StorageUtils-Klasse wurde bewusst nicht verändert, da sie auch für Pairing-, Logging- und Konfigurationsdaten verwendet wird.

    Fahrzeugtest

    Nach den Anpassungen konnte das Tablet den BMW über Wi-Fi Direct erkennen, sich verbinden und die Verbindung speichern.

    Mit dem aktuellen G30 A15 Stand funktioniert bei meinem Fahrzeug:

    • Start von Touch Command unter Android 16
    • originale BMW Benutzeroberfläche
    • korrekte Darstellung auf dem Samsung Tablet
    • Touch-Bedienung und rechte Funktionsleiste
    • Wi-Fi-Direct-Erkennung
    • Pairing mit dem BMW
    • Verbindung und erneute Verbindung
    • Kommunikation zwischen Tablet und Fahrzeug
    • verschiedene Fahrzeugfunktionen lassen sich bedienen

    Damit ist für mich der wichtigste Punkt erreicht:

    Touch Command läuft auf einem aktuellen Android-16-Tablet und kommuniziert tatsächlich mit meinem G30.

    G30 A15 Paket

    Der aktuelle Stand besteht aus:

    BMW_TouchCommand_G30_A15.apk

    BMW_Remote_Integration_G30_A15.apk

    Zusätzlich gibt es eine ausführliche technische Dokumentation der vorgenommenen Änderungen.

    Installation

    Da die originale Anwendung ein niedriges Target SDK verwendet, kann Android 16 die normale Installation je nach Gerät bzw. Android-Konfiguration einschränken.

    Während der Entwicklung wurde deshalb teilweise ADB verwendet. Nach der Installation müssen die von Android angeforderten Berechtigungen freigegeben werden. Die BMW Remote Integration muss ebenfalls installiert sein.

    Aktueller Teststand

    Der bisher bestätigte Stand ist:

    Samsung Galaxy Tab A11 LTE / Android 16 + BMW G30 Pre-LCI / NBT EVO

    Andere Tablets sowie G11/G12/G38-Konfigurationen habe ich bisher nicht ausreichend getestet.

    Genau deshalb wären Erfahrungen von anderen interessant.

    Hinweis

    Das Projekt ist inoffiziell und nicht von BMW freigegeben oder unterstützt. Änderungen an Fahrzeugcodierung, Android-Systemen und Software erfolgen auf eigene Verantwortung.

    BMW, Touch Command sowie die originalen Softwarebestandteile, Grafiken und Marken gehören den jeweiligen Rechteinhabern. Die vorhandenen Lizenz-/Disclosure-Dateien der originalen Anwendung wurden nicht entfernt.

    Mein Ziel mit G30 A15 ist ausschließlich, die ursprünglich vorhandene Touch-Command-Funktion technisch auf aktueller Android-Hardware weiter nutzen zu können.

    Ich werde hier gerne weiter berichten, welche Funktionen im G30 zuverlässig laufen und welche Punkte eventuell noch angepasst werden müssen.


    Besonders interessant wären Erfahrungen von anderen, die NBT EVO im G30 verbaut haben und testen möchten.

    Wer Interesse hat, kann sich gerne bei mir melden.