跳转至

权限与授权

最后更新:

EvccApi 采用两层授权:Android Manifest 的普通绑定权限,加上 EVCC 内按应用签名保存的细粒度 授权。复制包名、共享 UID 或重新签名都不能继承原授权;为避免一个 UID 下的包互相借用身份,当前 版本拒绝共享 UID 应用建立公开会话。

权限预设

预设 默认包含
只读 READ_ONLY 属性目录、属性读取/监听、变量读取/监听、音乐读取/监听、音量组读取
标准联动 STANDARD 只读能力 + 属性写入、变量写入/删除、安全动作、音乐控制、音量组控制
高级控制 ADVANCED 标准联动 + 高权限动作、系统设置
全部权限 ALL 当前全部权限,包括实时全量扫描、Shell 与系统写入
自定义 CUSTOM 用户逐项选择

STANDARD 是首次授权时的默认预设。READ_ONLY、STANDARD 和 ADVANCED 不包含以下三项敏感权限; 用户可单独勾选,也可选择 ALL 一次选中全部权限。保存任何新增的敏感权限前,都需要在车机端确认 集中风险提示,取消确认不会更改原授权:

  • property.full_scan:实时全量扫描,可能改变 APVP 监听集合并增加车辆链路负载。
  • shell.exec:自由输入 Shell,仍受永久黑名单和绕过检测限制。
  • shell.system_write:系统写入;除权限外还需要车机端逐次确认。

切换非自定义预设会按该预设重新选择权限;手工修改后标记为 CUSTOM。授权保存的是当时确认的 具体权限集合,已有记录不会因增加 ALL 或将来新增权限而自动扩展。ALL 不解除永久命令黑名单, 不跳过系统写入的逐次确认,也不绕过 UID、签名或运行环境校验。

权限 ID

权限 ID 能力 风险
property.directory 分页目录、搜索、描述符 低
property.read 单个/批量读取,目录包含值 低
property.listen 属性监听与初始快照 中
property.write 属性写入和预检查 高
volume.read 音量组查询与读取 低
volume.control 音量组设置、增减与预检查 中
music.read 当前音乐、歌词、封面、已有 BPM 低
music.listen 音乐监听(依赖读取) 低
music.control 播放控制(独立授权) 中
variable.read 查询与读取变量 低
variable.listen 指定变量监听 中
variable.write 写入非只读变量 中
variable.delete 删除非只读变量 中
action.safe 执行安全动作 中
action.privileged 执行高权限动作 高
system.settings 系统设置类能力 高
property.full_scan LIVE_FULL_SCAN 高、单独授权
shell.exec Shell 执行 极高、单独授权
shell.system_write 系统级写入 极高、单独授权及确认

权限集合还会强制保持依赖关系:property.listen 必须同时包含 property.read, variable.listen 必须同时包含 variable.read,shell.system_write 必须同时包含 shell.exec。 无论授权页、旧记录还是 Binder 调用都不能构造出绕过这些前置权限的有效会话。

授权生命周期

  • 首次勾选应用时,EVCC 会弹出非全屏权限管理窗口;取消则不会创建授权。
  • 授权记录绑定包名、UID、当前签名证书 SHA-256 和授权修订号。
  • 用户撤权、签名变化或云端关闭 EVCC 开放 API 时,现有会话立即失效。
  • 云端隐藏功能不会删除授权记录;再次开放后仍会重新校验应用身份。
  • EvccSessionInfo.grantedPermissions 是本会话的真实权限集合,客户端不应仅根据预设名称推断。

正确处理权限不足

业务返回通常使用 PERMISSION_DENIED,未授权绑定也可能得到空 Binder 或会话建立失败。客户端应:

  1. 显示缺少的能力名称,不要循环重试危险调用。
  2. 通过按应用授权入口或 SDK 的 openAuthorization() 打开当前应用的授权窗口, 由用户选择权限并保存;旧版可通过 ACTION_OPEN_SETTINGS 打开控制台再手动选择应用。
  3. 返回应用后重新绑定并读取新的 EvccSessionInfo。

公开跳转 Action 只负责打开页面,不会自动授予或扩大任何权限。

悬浮窗、存储、无障碍等 Android 系统权限使用第三方应用跳转入口中的 OPEN_APP_PERMISSIONS。它与此处的 EVCC 开放 API 授权相互独立。

旧版 AIDL、备份与恢复边界

  • “米德宝/AIDL 联动”中的旧版自定义 AIDL 开放应用列表与 EvccApi 授权完全独立,不会自动迁移、 继承或互相放权。
  • EVCC 配置备份将旧版“米德宝/AIDL 联动”作为一个选择项;米德宝 AIDL 与旧版自定义 AIDL 共用的 JSON 只保存一次。
  • EVCC 开放 API 的授权记录不进入普通配置包。恢复设置、复制配置包或导入属性目录都不能授权应用; 应用仍须由车机用户在“开放权限的应用”中重新确认。
  • 会话、订阅集合、事件序号、初始化缓存和来源租约都是运行时状态,不属于备份。EVCC 或客户端重启后, SDK 会重新绑定并恢复当前进程声明的订阅,客户端仍应按新的初始快照建立基线。
  • 属性目录导出是开发快照而不是配置备份,其中可能含车辆状态值。分享前应脱敏,不能把导入网页工具 当作恢复到车机或远程调用 Binder 的方式。

API 1.1 音乐能力

新增 music.read(音乐与资源读取)、music.listen(依赖 music.read)及独立 music.control。只读预设增加前两项,标准联动增加控制;已有保存的授权不自动扩展。银河同样由用户授权。

API 1.2 音量组权限

volume.read 与 volume.control 彼此独立。新授权只读预设包含读取,标准和高级预设包含控制;已有保存的授权不自动扩展。用户主动勾选或切换预设并保存后,客户端须重新建立会话。音量权限不依赖音乐控制、属性写入或 Shell。