BimmerGestalt/AAIdrive

GitHub: BimmerGestalt/AAIdrive

AAIdrive 通过 BMW Connected Apps 协议将 Android 手机的通知、音乐、导航等功能集成到不支持原生 Android Auto 的 BMW/Mini IDrive 车载系统中。

Stars: 671 | Forks: 98

# AAIdrive [![构建状态](https://img.shields.io/github/actions/workflow/status/BimmerGestalt/AAIdrive/android-build.yml?branch=main)](https://github.com/BimmerGestalt/AAIdrive/actions?query=workflow%3Abuild) [![代码覆盖率](https://img.shields.io/codecov/c/gh/BimmerGestalt/AAIdrive/main.svg)](https://codecov.io/gh/BimmerGestalt/AAIdrive) [![Crowdin](https://badges.crowdin.net/androidautoidrive/localized.svg)](https://crowdin.com/project/androidautoidrive) [![Release 下载](https://img.shields.io/github/release/BimmerGestalt/AAIdrive.svg)](https://github.com/BimmerGestalt/AAIdrive/releases/latest) [![Gitter](https://badges.gitter.im/AndroidAutoIdrive/community.svg)](https://gitter.im/AndroidAutoIdrive/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![请我喝杯咖啡](https://img.shields.io/badge/support-buymeacoffee-5f7fff)](https://www.buymeacoffee.com/q4JVoxz) ![MIT 许可证](https://img.shields.io/github/license/BimmerGestalt/AAIdrive) 在 Google Play 获取 BMW/Mini IDrive NBT 并不提供原生的 Android Auto 集成,但提供了一个非常强大的 Connected Apps 融合选项,与汽车有着深度的集成。本项目致力于将 Android Auto 的大部分功能作为非官方的 BMW/Mini Connected Apps 实现出来。 借助 Connected Apps 技术,本应用在不进行任何改装或破解的情况下,极大地扩展了汽车的功能。任何 2014 款(MY2014)及以后配备了 NBT 或 NBT Evo、拥有“BMW Apps (6NR)”功能、激活了 [BMW ConnectedDrive 订阅](https://bimmergestalt.github.io/AAIdrive/images/bmw-connected-subscription.png),或选配了“Mini Connected (SA6NM)”选项的 BMW 或 Mini 车型均应兼容。 [![应用列表](https://bimmergestalt.github.io/AAIdrive/images/demo-applist.gif)](https://bimmergestalt.github.io/AAIdrive/gallery.html) [图库](https://bimmergestalt.github.io/AAIdrive/gallery.html) ## 概述 作为 Connected Apps 功能的一部分,当手机通过 USB(或在 2017 款及以后的车型中通过 Bluetooth)连接到汽车时,已启用的手机应用可以在汽车上显示一个专门针对仪表盘优化的界面。 AAIdrive 结合了触感极佳的 IDrive 控制器在安全性上的优势,基于此协议允许用户在安全存放手机的同时,与接收到的通知进行交互并控制手机上的音乐。 ## 新手入门 本应用要求安装适用于您车辆的 MyBMW 或 MINI 应用,并且能够成功启用您 ID5+ 车辆的 [Apps 复选框](app/src/main/res-facets/tips/drawable/pic_btapp_bmw.jpg),或者您的 ID4 车辆具有 [Connection Assistant 选项](app/src/main/res-facets/tips/drawable/pic_connassistant_bmw.jpg)。 从 [Releases 页面](https://github.com/BimmerGestalt/AAIdrive/releases/latest) 下载最新稳定版的 APK。选择带有“sentry”字样的版本可自动上传崩溃报告,否则请选择“nonalytics”版本。您也可以在 [Google Play 商店](https://play.google.com/store/apps/details?id=me.hufman.androidautoidrive) 下载。启动后,应用应会检测到 MyBMW 应用,并开始等待与车辆建立连接。 也可以考虑尝试每日构建版(nightly build)!它包含最新的功能,是下一个发布版本的预览,因此请考虑安装 [sentry 每日构建版](https://bimmergestalt.s3.amazonaws.com/aaidrive/builds/androidautoidrive-latest-main-mapbox-sentry-release.apk) 以便自动报告崩溃。 同时也提供 [nonalytics 每日构建版](https://bimmergestalt.s3.amazonaws.com/aaidrive/builds/androidautoidrive-latest-main-mapbox-nonalytics-release.apk)。 如果您遇到问题,请查看 [常见问题](https://bimmergestalt.github.io/AAIdrive/faq.html)。 ## 用户指南 ![手机连接](https://bimmergestalt.github.io/AAIdrive/images/screenshot-connection.png) 将手机连接到汽车后,官方 MyBMW 应用应会在状态栏中显示此汽车图标。当此图标出现时,本应用应会建立连接并将其功能添加到汽车中。 请参阅 [此指南](https://bimmergestalt.github.io/AAIdrive/connection.html) 获取有关提升 MyBMW 应用连接可靠性的技巧。 ![手机应用列表](https://bimmergestalt.github.io/AAIdrive/images/screenshot-phoneapps.jpg) 所有应用连接成功后,汽车的 Connected 菜单中会出现许多新条目。其中应该有一个新的 Audioplayer 或 Spotify 图标,以及一个没有标签的书籍图标。如果已启用,这个书籍图标就是通知应用。 ![音乐应用列表](https://bimmergestalt.github.io/AAIdrive/images/screenshot-medialist.jpg) 控制屏幕的 Media 部分将添加几个新条目。Audioplayer 图标具备主要功能,而 Audioplayer 上方显示的其他应用则是用于切换到相应应用进行播放的快捷方式。此截图还显示了列表底部的旧版 Spotify 应用。 ## 开发状态 AAIdrive 功能已开发完毕,在 BMW 应用系统允许的范围内实现了尽可能多的 Android Auto 功能以及其他更多功能。除了偶尔的维护补丁外,本项目已完成,不会再进行更多的开发。此外,作者已不再拥有支持 AAIdrive 的汽车,因此任何进一步的开发都需要由外部贡献。 ## 已实现的功能 - 日历集成 - 在汽车上查看手机日历 - 自动触发汽车导航至即将到来的日程 - 车辆信息 - 记住停车后的燃油液位、车窗状态和车辆位置 - 连接时显示实时更新的车速和指南针 - 在车载信息娱乐屏幕上添加多页详细的车辆数据 - 汽车导航集成 - Android 导航 Intent 和按钮可由已连接汽车的导航系统处理 - Google Maps 可将目的地分享至已连接汽车的导航系统 - 可在手机界面中输入地址以启动汽车导航 - Google Assistant - 手机上安装的任何语音助手都会作为 Connected App 条目被添加 - Google Assistant 效果最好,但也兼容 Alexa、Bixby 和 Cortana - 为方便起见,可将语音助手应用设置为硬件快捷键 - 手机通知 - 弹出新通知提醒 - 可通过汽车扬声器播放通知提示音 - 支持“忽略”、“标记为已读”或其他通知操作 - 支持回复,包括 emoji 输入 - 使用车载 TTS 朗读通知 - Google Maps(概念验证) - 基础搜索和路线规划 - 包含一些暗色主题 - 由于协议本身的限制,性能较差 - 默认不编译,因为在汽车上显示 Google Maps 违反了 Maps API 许可协议 - Mapbox 自定义地图 - 搜索和路线规划、卫星图像和交通状况、3D 倾斜和建筑物显示 - 支持自定义 Mapbox 样式 URL - 通过 Bluetooth 连接时性能较差 - 控制兼容 Android Auto 的音乐应用 - 支持浏览和搜索应用的音乐库,包含特殊的 Spotify 集成 - 支持从当前已排队的歌曲列表中进行选择,以及基本的上一首/下一首控制 - 集成到汽车的音频上下文中,实现自动恢复和硬件按钮控制 - 支持 ID5+ 音乐布局,启用全局封面图集成 - 支持控制任何活动的音乐会话,即使是未兼容 Android Auto 的应用 - 自动更新屏幕以跟随当前活动的应用 - 推荐的兼容应用: - 有声书和播客: - [Acast Podcast Player](https://play.google.com/store/apps/details?id=com.acast.nativeapp) - [AntennaPod](https://play.google.com/store/apps/details?id=de.danoeh.antennapod) - [Audecibel](https://play.google.com/store/apps/details?id=com.podcastsapp) - [Blinkest](https://play.google.com/store/apps/details?id=com.blinkslabs.blinkist.android) - [The Bob & Tom Show](https://play.google.com/store/apps/details?id=com.radio.station.BOB.TOM) - [Castbox](https://play.google.com/store/apps/details?id=fm.castbox.audiobook.radio.podcast) - [Google Play Books](https://play.google.com/store/apps/details?id=com.google.android.apps.books) - [iVooz](https://play.google.com/store/apps/details?id=com.ivoox.app) - [Libro.fm Audiobooks](https://play.google.com/store/apps/details?id=fm.libro.librofm) 至版本 [3.2.2](https://apkpure.com/libro-fm-audiobooks/fm.libro.librofm/download/90-APK) - [Listen Audiobook Player](https://play.google.com/store/apps/details?id=com.acmeandroid.listen) - [Player FM](https://play.google.com/store/apps/details?id=fm.player) - [Podcast Addict](https://play.google.com/store/apps/details?id=com.bambuna.podcastaddict) - [Podcast Republic](https://play.google.com/store/apps/details?id=com.itunestoppodcastplayer.app) - [Stitcher](https://play.google.com/store/apps/details?id=com.stitcher.app) - [Voice Audiobook Player](https://play.google.com/store/apps/details?id=de.ph1b.audiobook) - 音乐库 - [AIMP](https://play.google.com/store/apps/details?id=com.aimp.player) - [Black Player](https://play.google.com/store/apps/details?id=com.musicplayer.blackplayerfree) - [DSub](https://play.google.com/store/apps/details?id=github.daneren2005.dsub) - [HiBy Music](https://play.google.com/store/apps/details?id=com.hiby.music) - [Jellyfin](https://play.google.com/store/apps/details?id=org.jellyfin.mobile) - [jetAudio HD](https://play.google.com/store/apps/details?id=com.jetappfactory.jetaudio) - [Media Monkey](https://play.google.com/store/apps/details?id=com.ventismedia.android.mediamonkey) - [Musicolet Music Player](https://play.google.com/store/apps/details?id=in.krosbits.musicolet) - [Neutron Music Player](https://play.google.com/store/apps/details?id=com.neutroncode.mp) - [Plex](https://play.google.com/store/apps/details?id=com.plexapp.android)(仅限音乐和播客) - [PlayerPro](https://play.google.com/store/apps/details?id=com.tbig.playerprotrial) - [PowerAmp](https://play.google.com/store/apps/details?id=com.maxmpz.audioplayer) - [Retro Music Player](https://play.google.com/store/apps/details?id=code.name.monkey.retromusic) - [Rocket Player](https://play.google.com/store/apps/details?id=com.jrtstudio.AnotherMusicPlayer) - [Symfonium](https://play.google.com/store/apps/details?id=app.symfonik.music.player) - [TimberX Music Player](https://play.google.com/store/apps/details?id=com.naman14.timberx) - [VLC For Android](https://play.google.com/store/apps/details?id=org.videolan.vlc) - 电台 - [AP News](https://play.google.com/store/apps/details?id=mnn.Android) - [Antenne Bayern](https://play.google.com/store/apps/details?id=de.antenne.android) - [ARD Audiothek](https://play.google.com/store/apps/details?id=de.ard.audiothek) - [Audials Radio](https://play.google.com/store/apps/details?id=com.audials) - [BFM](https://play.google.com/store/apps/details?id=my.bfm.app) - [Dash Radio](https://play.google.com/store/apps/details?id=com.dashradio.dash) - [DI.FM](https://play.google.com/store/apps/details?id=com.audioaddict.di) - [Energy Radio](https://play.google.com/store/apps/details?id=radioenergy.app) - [Guardian](https://play.google.com/store/apps/details?id=com.guardian) - [HOT97 Official](https://play.google.com/store/apps/details?id=com.jacapps.whhl) - [Manchester United](https://play.google.com/store/apps/details?id=com.mu.muclubapp) - [myTuner](https://play.google.com/store/apps/details?id=com.appgeneration.itunerfree) - [Nederland.FM](https://play.google.com/store/apps/details?id=nl.nibbixsoft.app) - [NHL](https://play.google.com/store/apps/details?id=com.nhl.gc1112.free) - [ntv Nachrichten](https://play.google.com/store/apps/details?id=de.lineas.lit.ntv.android) - [NYTimes](https://play.google.com/store/apps/details?id=com.nytimes.android) - [Open Radio](https://play.google.com/store/apps/details?id=com.yuriy.openradio) - [R101](https://play.google.com/store/apps/details?id=it.r101) - [Radio 105](https://play.google.com/store/apps/details?id=it.froggy.android.radio105) - [Radio Bob](https://play.google.com/store/apps/details?id=de.radiobob.radio) - [Radio FM](https://play.google.com/store/apps/details?id=com.radio.fmradio) - [Radio Monte Carlo](https://play.google.com/store/apps/details?id=it.froggy.android.rmc) - [Radio Nowy Swiat](https://play.google.com/store/apps/details?id=com.thehouseofcode.radio_nowy_swiat) - [Replaio FM Radio](https://play.google.com/store/apps/details?id=com.hv.replaio) - [RTL 102.5](https://play.google.com/store/apps/details?id=com.rtl.rtlapp) - [Scanner Radio](https://play.google.com/store/apps/details?id=com.scannerradio) - [SiriusXM](https://play.google.com/store/apps/details?id=com.sirius) - [Simple Radio](https://play.google.com/store/apps/details?id=com.streema.simpleradio) - [SomaFM](https://play.google.com/store/apps/details?id=com.dgmltn.radiomg.somafm) - [SWR3](https://play.google.com/store/apps/details?id=de.swr.swr3radio) - [sunshine live](https://play.google.com/store/apps/details?id=app.sunshinelive.de.sunshinelive) - [Versuz Radio](https://play.google.com/store/apps/details?id=com.versuzradio) - [Virgin Radio Italy](https://play.google.com/store/apps/details?id=it.froggy.android.virginradio) - 流媒体服务 - [Apple Music](https://play.google.com/store/apps/details?id=com.apple.android.music) - [Anghami](https://play.google.com/store/apps/details?id=com.anghami) - [Gaana Music](https://play.google.com/store/apps/details?id=com.gaana) - [JioSaavn](https://play.google.com/store/apps/details?id=com.jio.media.jiobeats) - [Qobuz](https://play.google.com/store/apps/details?id=com.qobuz.music) - [SoundCloud](https://play.google.com/store/apps/details?id=com.soundcloud.android) - [Spotify](https://play.google.com/store/apps/details?id=com.spotify.music) - [Tidal](https://play.google.com/store/apps/details?id=com.aspiro.tidal) ## 集成点 除了显示独立的远程 UI 外,IDrive 系统还提供了许多令人兴奋的集成点。以下是本项目支持的一些集成点: - UI 组件会自动采用相应的主题以适配汽车 - 助手、地图视图、通知列表和音乐播放屏幕可分配给仪表板上的物理快捷按钮 - 断开连接后会保留车辆信息,如车窗状态和驻车位置 - 新通知会触发状态栏图标 - 新通知可触发弹出窗口 - 如果检测到副驾驶座有乘客,可禁用新通知弹窗 - 接收或选中通知时,可通过汽车的 TTS 朗读通知 - 汽车的导航系统可用于处理 Android 导航 Intent - 自定义地图中会显示车辆的位置和方位 - 当前正在播放的应用会显示在 IDrive 屏幕顶部 - 当前播放的歌曲标题会显示在 IDrive4 多媒体侧边栏中 - 当前播放的歌曲封面和进度会显示在 IDrive5+ 主屏幕和多媒体侧边栏中 - 在支持 Bluetooth Apps 的 2017 款(MY2017)及以上的汽车上,将启用音频焦点(audio focus),这会赋予以下额外功能: - 当本应用正在控制音乐时,Media 快捷按钮会打开本应用 - 重新连接汽车时自动恢复播放 - 按下静音按钮或通话期间暂停播放 - 长按物理上一首/下一首按钮可在曲目内快进/快退,短按则跳转曲目 - 方向盘控制按键可从仪表盘切换曲目 - 根据应用的支持情况,可在仪表盘中滚动浏览已排队的歌曲 ## 限制 本项目使用 IDrive 界面,并调用与 Android Auto 相同的 API 与音乐应用通信,复刻了 Android Auto 的部分功能。目前它无法更高级的 Android Auto 功能,例如: - 与汽车语音助手按钮的集成 - 将任意手机应用(Google Maps、Waze 或其他任何应用)的屏幕投屏到汽车上 - 完整显示原生的 Android Auto 界面 由于本项目具有非官方的逆向工程性质,因此存在一些限制: - 主菜单条目的图标和文字无法更改,因此看起来并不完全正确 - 在 ID4 中,各个音乐源图标有时无法打开 Audioplayer 界面,但它们确实会切换当前活动的音乐源 - Android Oreo 禁用了 Android Open Accessory Protocol 2 音频输出,而这对于在 2014-2017 款车型中通过应用 USB 连接播放音频是必须的。请通过 Bluetooth 音频收听,并将本应用用作控制界面。 - 部分 Android Auto 音乐应用强制实施了白名单机制,阻止本应用启动它们或浏览其媒体库。但是,只要它们处于运行状态,就可以被控制。例如,以下这些流行的音乐应用无法被直接启动,必须手动开启: - Amazon Music - Audible - Bandcamp - CloudPlayer - Deezer - doubleTwist - Google Play Music - iHeartAuto - TuneIn Radio - Pandora - Scribd - Smart Audiobook Player - YouTube Music ## 环境要求 为了与汽车进行通信,本项目依赖于手机上主要的 MyBMW 或 Mini 应用创建的代理连接。此外,经过测试,旧版的 Connected 和 Connected Classic 应用也能兼容实现此目的,但 Connected 应用对 Android 内存管理机制的抵抗力更强。 ## 开发者指南 ## 隐私 本项目不包含任何广告或用户追踪,完全是出于乐趣和为了增强 BMW/Mini 信息娱乐系统的实用性而开发的。 本应用使用 Internet 权限与汽车建立 TCP 连接,该连接可通过主要 Connected 应用上的 localhost socket 访问。此外,可能会从互联网 URL 获取一些封面图和包含图片的通知(例如来自 Hangouts 的通知)。本应用的功能不需要任何其他互联网访问权限。 作为其功能的一部分,本应用会在您的手机上本地收集并记住一些信息: - “车辆信息”标签页会记住最近连接的车辆信息,包括车型、可用功能、具体的驾驶统计信息和车辆设置,以及汽车连接时报告的最后位置 - 音乐功能会记住已安装的音乐应用列表及其提供的功能 - Spotify 集成会保留一个用于访问您的 Spotify 媒体库的 token 应用还需要一些其他信息才能运行,但它不会记住任何这些信息,也永远不会将其分享出去: - 为了建立汽车连接,应用会识别已安装的 BMW 和 Mini 应用 - 应用会监视 Bluetooth 连接,以识别汽车何时连接 - 任何已安装的语音助手都会被发现并添加到汽车中 - 作为 AAIdrive 插件运行的应用将被发现并展示在 Addons 标签页中 - 如果已启用,在连接到汽车时会从手机读取通知,并在断开连接后遗忘这些通知 - 如果编译进应用并被启用,自定义地图功能在显示地图时会使用汽车或手机的位置信息 禁用分析版本绝不会分享任何信息,并且该版本的应用中未编译任何分析代码。 启用分析版本提供了一个选项,可以将一些匿名信息分享给 [Sentry](https://www.sentry.io) 以协助调试和开发:如果启用,除了偶发的不幸崩溃外,应用还会分享任何[已安装的音乐应用](app/src/sentry/java/me/hufman/androidautoidrive/Analytics.kt) 及每个应用提供的功能,以及任何已连接汽车的[车型和功能](app/src/main/java/me/hufman/androidautoidrive/carapp/carinfo/CarInformationDiscovery.kt#L36),以用于使用统计和功能优先级规划。 每个发布版本均提供启用分析和禁用分析两个选项。
示例分析数据 ### 音乐应用 ``` { "appId": "github.daneren2005.dsub", "appName": "DSub", "controllable": "false", "connectable": "true", "browseable": "true", "searchable": "false", "playsearchable": "false" } ``` ### 汽车连接 ``` { "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" } ```
标签:Android, Android Auto, BMW, DSL, 第三方客户端, 车机互联, 车联网