BimmerGestalt / AAIdrive

Implementations of some Android Auto features as unofficial IDrive apps
MIT License
526 stars 89 forks source link
android android-auto bmw-connecteddrive bmw-idrive idrive reverse-engineering

AAIdrive

Build Status Code Coverage Crowdin Release Download Download Counter Weekly Users Gitter Buy Me A Coffee MIT Licensed

Get it on Google Play

The BMW/Mini IDrive NBT does not offer native Android Auto integration, but does provide a very powerful Connected Apps convergence option with tight integration points into the car. This project is an effort to implement most of the features of Android Auto as unofficial BMW/Mini Connected Apps.

By relying on the Connected Apps technology, this app greatly extends the functionality of the car without any modifications or hacks. Any MY2014 or newer BMW or Mini equipped with NBT or NBT Evo and the "BMW Apps (6NR)" feature, an active BMW ConnectedDrive subscription, or the "Mini Connected (SA6NM)" option should be compatible.

App List
Gallery

Overview

As part of the Connected Apps feature, when the phone connects to the car over USB (or Bluetooth in 2017+ models), enabled phone apps can show a special dashboard-optimized interface in the car.

AAIdrive, combined with the safety benefits of the tactile IDrive controller, builds on this protocol to allow the user to interact with their incoming notifications and control their phone's music while the phone is safely tucked away.

Getting Started

This app requires that the MyBMW or MINI app for your car is installed and that it can successfully enable your ID5+ car's Apps checkbox, or if your ID4 car has the Connection Assistant option.

Download the APK of the latest stable release from the Releases page. Choose the one that says "sentry" to automatically upload crash reports, or choose "nonalytics" otherwise. It is also available on the Google Play Store. After starting, the app should detect the MyBMW app and start waiting for the car connection.

Also consider trying out the nightly build! It has the latest features and is a preview of the next release, so please consider installing the Sentry build to automatically report crashes. The nonalytics build is available too.

Check out the FAQ if you run into problems.

User Guide

Phone Connection

After connecting the phone to the car, the official MyBMW app should show this car icon in the status bar. When this icon appears, this app should connect and add its functionality to the car.

See this guide for tips on improving the connection reliability of the MyBMW app.

Phone App List

After all the apps are connected, a bunch of new entries will show up in the car's Connected menu. There should be a new Audioplayer or Spotify icon and a book icon with no label. This book icon is the Notifications app, if enabled.

Music App List

Several new entries will be added to the Media section of the control screen. The Audioplayer icon is the one with the main functionality, while the other displayed apps above the Audioplayer are quick shortcuts to switch playback to the respective apps. This screenshot also shows the legacy Spotify app at the bottom of the list.

Development Status

AAIdrive is feature-complete, implementing as many Android Auto features as are possible within the BMW app system, and several more. Beyond the occasional maintenance patch, this project is complete and won't see any more development.

Implemented Features

Integration Points

Besides showing a self-contained remote UI, the IDrive system offers many exciting integration points. Here are a few that this project supports:

Limitations

This project replicates some of the features of Android Auto using the IDrive interface, using the same APIs that Android Auto uses to talk to the music apps. It cannot currently provide more advanced Android Auto features, such as:

Due to the unofficial reverse-engineered nature of this project, it has some limitations:

Requirements

To communicate to the car, this project relies on the proxy connection that is created by the main MyBMW or Mini app on the phone. Additionally, the legacy Connected and the Connected Classic apps have been tested as compatible for this purpose, but the Connected app is more resilient against Android's memory management.

Developer Guide

To build your own test versions of the app and help contribute to the project, follow this Developer Guide to set up your development environment.

Privacy

This project contains no advertising or user tracking, and is developed entirely for fun and to enhance the usefulness of the BMW/Mini infotainment system.

The app uses the Internet Permission to make a TCP connection to the car, which is reachable through a localhost socket on the main Connected app. Additionally, some cover art and incoming picture notifications (such as from Hangouts) may be fetched from Internet URLs. No other Internet access is required for the app's functionality.

As part of its functionality, the app collects and remembers some information locally on your phone:

The app also needs some other information to function, but does not remember any of it and will never share it:

The analytics-disabled version will never share any information, and no analytics code is compiled into this version of the app. The analytics-enabled version provides an option to share some anonymized information to Sentry to assist with debugging and development: If enabled, besides any rare and unfortunate crashes, the app will share any installed music apps and the capabilities each app provides, as well as the model and capabilities of any connected car for usage statistics and feature prioritization.

Each release provides both an analytics-enabled and analytics-disabled option.

Example Analytics Data ### Music App ``` { "appId": "github.daneren2005.dsub", "appName": "DSub", "controllable": "false", "connectable": "true", "browseable": "true", "searchable": "false", "playsearchable": "false" } ``` ### Car Connection ``` { "a4axl": "true", "alignment_right": "true", "hmi_display_height": "480", "hmi_display_width": "1280", "hmi_role": "HU", "hmi_type": "MINI ID5", "hmi_version": "EntryEvo_ID5_1903_Release ID5_1903-490-1837K Build 47 - Rev:203015 2018-11-14 08:39:42", "inbox": "true", "map": "true", "navi": "true", "pia": "true", "speech2text": "true", "speedlock": "true", "touch_command": "false", "tts": "true", "vehicle_country": "US", "vehicle_productiondate": "03.00", "vehicle_type": "F56", "voice": "false" } ```