All Projects → hufman → Androidautoidrive

hufman / Androidautoidrive

Licence: mit
Implementations of some Android Auto features as unofficial IDrive apps

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Androidautoidrive

Luject
🍹A static injector of dynamic library for application (android, iphoneos, macOS, windows, linux)
Stars: ✭ 203 (-10.18%)
Mutual labels:  reverse-engineering
Ctf All In One
CTF竞赛权威指南
Stars: ✭ 2,807 (+1142.04%)
Mutual labels:  reverse-engineering
Kaitai struct
Kaitai Struct: declarative language to generate binary data parsers in C++ / C# / Go / Java / JavaScript / Lua / Perl / PHP / Python / Ruby
Stars: ✭ 2,736 (+1110.62%)
Mutual labels:  reverse-engineering
Gametracking
🛢 Dumping things, so you don't have to
Stars: ✭ 204 (-9.73%)
Mutual labels:  reverse-engineering
Theos Jailed
A Theos module to develop jailed tweaks for iOS 8 and up
Stars: ✭ 214 (-5.31%)
Mutual labels:  reverse-engineering
Pokegold
Disassembly of Pokémon Gold/Silver
Stars: ✭ 215 (-4.87%)
Mutual labels:  reverse-engineering
Lief
Authors
Stars: ✭ 2,730 (+1107.96%)
Mutual labels:  reverse-engineering
Awesome Reverse Engineering
Reverse Engineering Resources About All Platforms(Windows/Linux/macOS/Android/iOS/IoT) And Every Aspect! (More than 3500 open source tools and 2300 posts&videos)
Stars: ✭ 2,954 (+1207.08%)
Mutual labels:  reverse-engineering
Miasm
Reverse engineering framework in Python
Stars: ✭ 2,649 (+1072.12%)
Mutual labels:  reverse-engineering
Jpsxdec
jPSXdec: cross-platform PlayStation 1 audio and video converter
Stars: ✭ 219 (-3.1%)
Mutual labels:  reverse-engineering
Xapkdetector
APK/DEX detector for Windows, Linux and MacOS.
Stars: ✭ 208 (-7.96%)
Mutual labels:  reverse-engineering
Game Hacking
Tutorials, tools, and more as related to reverse engineering video games.
Stars: ✭ 2,824 (+1149.56%)
Mutual labels:  reverse-engineering
Sketchcrapp
SketchCrapp - Crack your Sketch.app in seconds :) Supports MacOS Big Sur.
Stars: ✭ 218 (-3.54%)
Mutual labels:  reverse-engineering
Vac Bypass Loader
Loader for VAC Bypass written in C.
Stars: ✭ 204 (-9.73%)
Mutual labels:  reverse-engineering
Vscode Frida
Unofficial frida extension for VSCode
Stars: ✭ 221 (-2.21%)
Mutual labels:  reverse-engineering
Hexraystoolbox
Hexrays Toolbox - Find code patterns within the Hexrays AST
Stars: ✭ 202 (-10.62%)
Mutual labels:  reverse-engineering
Unofficialcrusaderpatch
Unofficial balancing patch installer for Stronghold Crusader 1
Stars: ✭ 216 (-4.42%)
Mutual labels:  reverse-engineering
Fhex
A Full-Featured HexEditor compatible with Linux/Windows/MacOS
Stars: ✭ 225 (-0.44%)
Mutual labels:  reverse-engineering
Librw
A re-implementation of the RenderWare Graphics engine
Stars: ✭ 223 (-1.33%)
Mutual labels:  reverse-engineering
Neteasemusiccrack
iOS网易云音乐 免VIP下载、去广告、去更新 无需越狱...
Stars: ✭ 221 (-2.21%)
Mutual labels:  reverse-engineering

Android Auto for IDrive

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

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.

Android Auto for IDrive, 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 BMW Connected or Mini Connected app for your car is installed and can successfully add the Connected and Calendar entries to your car's Connected Apps menu. The new My BMW app seems to interfere with BMW Connected and is not supported.

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. After starting, the app should detect the Connected 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. Some of the new features include:

  • Supports logging in as Spotify to set the global coverart in ID5+
  • Adds Spotify browse and playlist coverart
  • Reads out notifications
  • Supports replying to notifications
  • Starts car navigation to handle certain phone navigation buttons

Check out the FAQ if you run into problems.

User Guide

Phone Connection

After connecting the phone to the car, the official Connected 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 Connected app.

Phone App List

After all the apps are connected, a bunch of new entries will show up in the car's Connected menu. Besides the official Calendar and Connected apps, there should be a new Audioplayer 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 official Spotify app at the bottom of the list.

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:

  • The UI widgets automatically take on the respective theme to fit the car
  • The Assistants, Map View, Notification List, and Music Playback screens can be assigned to the physical shortcut buttons in the dashboard
  • New notifications trigger a statusbar icon in IDrive version 4
  • New notifications can trigger a popup in IDrive version 4
  • New notification popups can be disabled if a passenger is detected in the seat
  • The currently-playing app is displayed along the top of the IDrive screen
  • The currently-playing song title is shown in the Multimedia side panel of the IDrive
  • On a MY2017+ car supporting Bluetooth Apps, audio focus will be enabled which grants the following extra features:
    • The Media shortcut button opens this app when it is in control of the music
    • Automatically resumes playback when reconnecting to the car
    • Playback pauses when pushing the mute button or during calls
    • The physical back/next buttons can be held down to seek within a track or pressed to skip tracks
    • The steering wheel controls can skip tracks from the instrument cluster
    • Enqueued songs can be scrolled in the instrument cluster, depending on app support

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:

  • Integration with the car's Voice Assistant button
  • Screen-casting of arbitrary phone apps to the car (Google Maps, Waze, or any other apps)
  • Displaying the original Android Auto interface at all

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

  • The main menu entries' icons and text can't be altered, and so do not look exactly correct
  • The individual music source icons sometimes don't open the Audioplayer interface in ID4, but they do switch the active music source
  • Android Oreo disabled Android Open Accessory Protocol 2 audio output, which is required to play audio over the app's USB connection in model years 2014-2017. Please listen over Bluetooth audio and use this app as a control interface.
  • Some Android Auto music apps enforce a list of allowed client apps, preventing this app from launching them or browsing their libraries. However, once they are running, they can be controlled. For example, these popular music apps can not be launched, they must be started manually:
    • Amazon Music
    • Audible
    • Bandcamp
    • CloudPlayer
    • Deezer
    • doubleTwist
    • Google Play Music
    • iHeartAuto
    • TuneIn Radio
    • Pandora
    • Scribd
    • Smart Audiobook Player
    • YouTube Music
  • Recent versions of Spotify block the standard Android MediaBrowserService connection, which is needed for the Search feature. Downgrading to version 8.4.96.953 will enable this feature.

Requirements

To communicate to the car, this project relies on the proxy connection that is created by the main Connected app on the phone. Both of the brand-specific Connected and the Connected Classic apps have been tested as compatible for this purpose, but the new Connected app is more reliable. My BMW and the new MINI app are not compatible.

Additionally, the car proposes a security challenge during the connection process, and this project asks the Security Service provided by the Connected apps for the correct response. The normal Connected app should be enough for this, but it might be necessary to also install the Connected Classic app to provide the Security Service. If this is needed, it is not recommended to install both the Connected and Connected Classic apps of the same brand, they may fight over the connection to the car and undefined results may happen. Instead, install the Connected Classic app of the other brand that is not intended to be used regularly, for example using BMW Connected and Mini Connected Classic.

Build Instructions

  • (Optional) Add a Google Maps API key to ~/.gradle/gradle.properties as a property named AndroidAutoIdrive_GmapsApiKey. This key should have access to Maps SDK for Android, Places API, and Directions API.
  • (Optional) Add a Spotify API Client ID to ~/.gradle/gradle.properties as a property named AndroidAutoIdrive_SpotifyApiKey.
    • The client secret is not needed, and no spaces or quotes are needed around the property value
    • It needs the Redirect URI set to me.hufman.androidautoidrive://spotify_callback
    • It may also need the package fingerprint added, follow these instructions to configure it
  • After downloading the source code, follow the instructions in external/README.md to prepare the needed APK files from official apps.
  • Android Studio makes it easy to build this project:
    • File > New > Project From Version Control > Git
    • Use the Build Variants panel to change which version is built
    • Build > Make Project to build the APK artifacts
    • Plug in your phone and click Run
  • Commandline builds should work too:
    • Make sure Android SDK Build Tools version 28 is installed
    • git clone https://github.com/hufman/AndroidAutoIdrive.git && cd AndroidAutoIdrive
    • git submodule init && git submodule update
    • ./gradlew assembleNomapNonalyticsDebug This step will fail without the Build Tools installed

The built APKs should be found in app/build/outputs/apk/*/*/*.apk

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.

The analytics-enabled version automatically reports some information to Sentry to assist with development and debugging. Besides any rare and unfortunate crashes, the app reports any installed music apps and the capabilities each app provides, as well as the model and capabilities of any connected car.

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"
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].