权限与授权¶
最后更新:
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 或会话建立失败。客户端应:
- 显示缺少的能力名称,不要循环重试危险调用。
- 通过按应用授权入口或 SDK 的
openAuthorization()打开当前应用的授权窗口, 由用户选择权限并保存;旧版可通过ACTION_OPEN_SETTINGS打开控制台再手动选择应用。 - 返回应用后重新绑定并读取新的
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。