DiPlay 隐私与诊断数据模型:本地优先的连接设计、报告脱敏与 Usage Access 边界
移动开发智能硬件音视频【免费下载链接】DiPlayIndependent CarPlay receiver for compatible Android head units. Wired and wireless public preview.项目地址https://gitcode.com/gh_mirrors/di/DiPlay点击查看免费下载DiPlay 是一款面向兼容 Android 车机的独立 CarPlay 接收端其隐私设计的核心是本地优先认证与连接全部发生在车机与 iPhone 之间的本地链路上不存在账号体系或远端认证服务诊断数据也只有在你主动导出时才会落地。阅读本文后你将理解 DiPlay 在头端head unit侧存储了哪些数据、为什么认证配对材料永远不会进入 Android 备份、诊断报告导出与脱敏的具体实现边界在哪里以及可选的 Usage Access 权限如何被限制在四个比亚迪BYD原厂仪表 Activity 之内。本地优先无账号、无云服务的连接模型DiPlay 的产品流程依赖本地认证与 iPhone 之间的直连 USB/Wi-Fi 通道没有账号没有远端认证服务也没有任何自动上传诊断信息的行为iPhone 上运行的 CarPlay App 拥有各自的联网与隐私行为这属于那些 App 的范畴不受 DiPlay 控制所有与配对手相关的材料配对数据、配对设备选择都只存在于车机的应用私有存储中。头端本地保存的内容包括应用偏好设置、配对设备选择、配对数据以及有界bounded的诊断日志。这里的有界不是营销措辞源码中确实存在一个容量受限的写盘组件 BoundedDiagnosticWriter它用单个守护线程串行写盘队列最多保留 64 条待写入记录过载时丢弃最旧的条目永不等待磁盘Never waits for disk. Under overload, discard the oldest pending entry。诊断日志因此不会无限膨胀磁盘失败也不会阻断后续写入。认证与配对材料被排除在 Android 备份之外隐私声明Authentication and pairing material are kept out of Android backup认证与配对材料被排除在 Android 备份之外对应的是整份备份排除规则 backup_rules.xml。该文件排除了 root、file、database、sharedpref、external 以及全部 device 域也就是说 DiPlay 主动声明了整应用级备份排除配对密钥与认证材料不随 Android 备份/还原流程流转。数据生命周期上的两个事实也值得注意卸载应用会删除应用私有数据而你此前导出到 Downloads 的报告是独立于应用的数据会一直保留直到你手动删除。诊断报告内容、脱敏与诚实的边界诊断导出完全由你发起Diagnostic export is initiated by you没有任何自动外发通道。报告包含的内容是App 与设备版本显示设置与分辨率协商过程连接状态迁移connection transitionsWi-Fi 频段/信道与状态解码器恢复事件decoder recovery events。脱敏过滤器源码级的逐条规则导出器会过滤协议载荷、携带凭据的行以及常见标识符这句话的实现是 DiagnosticRedactor它对每一行日志做如下处理规则行为说明行内含TRACE、PHONE或多行内容整行丢弃协议级载荷不出现在报告中命中秘密模式password/passphrase/token/private key/certificate/pair record/ssid或body、payload、hex整行丢弃携带凭据的行直接删除而非替换命中设备名赋值phone/device/peer/host name[:]整行丢弃防止设备名泄露MAC 地址aa:bb:cc:dd:ee:ff形式替换为[address]十六进制边界断言防止误伤长十六进制标识符≥24 位连续 hex或 UUID 形态替换为[identifier]IPv4 地址替换为[ip]IPv6 地址含::压缩形式与 zone 后缀替换为[ip]单行长度截断至 700 字符take(700)从源码结构看脱敏采取的是丢弃可疑行 替换地址类标识 截断长度三层策略宁可丢弃整行信息也不在凭据上下文中做局部替换。文档同时给出了一个诚实的边界声明脱敏无法承诺识别所有厂商自定义的字符串。在把报告贴到公开渠道例如 GitHub issue它本身就是公开的之前应当人工复查一遍报告内容。导出存储链三级回退与共享授权模型当系统的文档选择器document picker或 Downloads 存储不可用时报告保存到主外置存储的Android/data/package/files/diagnostic-reports/全程不请求存储权限导出确认界面会显示实际 TXT 文件路径。这一描述对应 DiagnosticExportStore 的saveWithoutPicker三级回退Android 10API Q及以上通过MediaStore.Downloads写入Downloads/DiPlay并使用IS_PENDING机制保证写完才发布——写入或发布失败时会删除本次创建的半成品条目不留残留报告外置应用专属目录context.getExternalFilesDir(null)下的diagnostic-reports/即Android/data/package/files/diagnostic-reports/无需任何存储权限也不依赖 OEM 的文档选择器 Activity部分车机系统缺失该组件应用私有目录外置存储缺失、只读或写满时最终回退到应用私有存储filesDir/diagnostic-reports。几个与隐私直接相关的实现细节包名发布包为com.shihab.diplay调试构建为com.shihab.diplay.hudtest代码注释明确要求包含调试 applicationId 的包专属目录。新版 Android 的文件管理器可能限制访问Android/data此时应使用 DiPlay 内置的View或Share功能而不是用文件管理器翻找只保留最新 8 份每个回退目录在保存新报告时按修改时间排序、保留最新 8 份并删除其余文件drop(7)?.forEach { it.delete() }且永远不会清理正在返回的那一份FileProvider 的独立身份报告 URI 由 DiagnosticReportProvider 生成该类是一个独立的FileProvider子类注释写明目的是防止合并后的应用清单扩大报告路径面。在 AndroidManifest.xml 中该 provider 声明为android:exportedfalse、android:grantUriPermissionstrueauthority 为${applicationId}.diagnostic-reports路径白名单仅包含 diagnostic_report_paths.xml 中的两个diagnostic-reports/目录每次导出都是新 URI每次导出创建全新的临时文件与 URIearlier share grant cannot read a later report——早前的分享授权无法读取之后的报告。分享操作只对选中的那一份报告授予读权限不会自动发送任何东西Android 9 及更早版本的已知限制在这些系统上拥有存储权限的其他应用有可能读取到外置存储中的报告。权限清单每个权限的真实用途DiPlay 申请的权限与其实际用途一一对应且多为可选能力权限用途可选性麦克风支持 Siri 与通话CarPlay 会话中的语音与电话功能功能相关蓝牙 / 附近设备设备发现与传输功能相关Wi-Fi / 位置设备发现与无线传输功能相关本地 VPNVpnService类支撑 USB 链路Android 上 USB 虚拟网络通道的实现机制可选它不构成远端互联网 VPNUsage AccessPACKAGE_USAGE_STATS已验证的 DiLink 5.1 仪表 profile 的主题/小窗跟随可选opt-inoptional local VPN permission supports the USB link; it does not provide a remote internet VPN 是一个关键澄清该权限只是 Android 平台实现 USB 网络通道的技术手段流量不会经过任何第三方。AndroidManifest.xml 中的FOREGROUND_SERVICE_MICROPHONE、FOREGROUND_SERVICE_LOCATION等声明与上表的麦克风/位置用途相对应而PACKAGE_USAGE_STATS的注释也明确标注为 Optional, owner-enabled Usage Access for the verified DiLink 5.1 cluster profile。Usage Access被白名单锁死的四个 BYD 仪表 Activity已验证的 DiLink 5.1 仪表 profile 会可选地使用 Android Usage Access使用情况访问来跟随车机主题与小地图卡片的可见性。这是 DiPlay 中唯一触碰应用活动历史的权限仓库对它的约束体现在三层白名单过滤。ClusterActivityState 的accepted方法只接受四个原厂 BYD 仪表 Activitycom.byd.automap.meter.MeterActivity全屏地图来自com.byd.automap/com.byd.launchermapcom.byd.automap.meter.MeterSmallScreenActivity小窗地图com.byd.sr.cluster.ClusterActivity场景主题来自com.byd.srcom.byd.cluster.SimpleClusterDynastyActivity简约主题。其他任何应用的活动事件直接return不进入状态机源码注释写明head-unit apps are irrelevant车机应用与我们的覆盖层无关。本地处理、最小日志。DiLink51ClusterMonitor 通过UsageStatsManager查询事件仅处理ACTIVITY_RESUMEDtype 1与ACTIVITY_STOPPEDtype 23并对事件做去重对系统关机/开机事件type 26/27则清空状态。最终输出的只是推断出的仪表主题/可见性变化无关的活动事件既不被保留也不被上传任何RuntimeException都会让状态回退为无可靠信号即不显示覆盖层。权限检查与可撤销性。hasAccess通过AppOpsManager.checkOpNoThrow(OPSTR_GET_USAGE_STATS)判断是否真正获得授权MODE_ALLOWED。该模式是 opt-in 的禁用它即停止这些查询也可随时在系统设置中撤销 Usage Access相关说明见 BYD 导航文档的 DiLink 5.1 主题 profile 一节。静态网站与第三方服务DiPlay 的静态网站不包含任何分析脚本analytics也没有账号功能。文档同时如实提示当你使用 GitHub Pages、GitHub 或 Telegram 这些服务时这些平台会各自适用它们自己的隐私政策——这属于服务方行为与 DiPlay 应用本身的数据处理无关。小结可验证的隐私边界把文档声明与仓库实现对照起来DiPlay 的隐私模型可以归纳为几条可验证的边界无外发没有自动诊断上传报告只在用户主动导出时生成且分享授权只覆盖单份文件备份隔离整份 backup_rules.xml 排除全部数据域认证/配对材料不进入 Android 备份存储有界诊断日志写入端有 64 条队列上限导出目录只保留最新 8 份卸载即清空应用私有数据脱敏有规则也有诚实声明DiagnosticRedactor 明确列出丢弃与替换模式但公开前仍需人工复查特权最小化唯一的敏感系统权限 Usage Access 被白名单锁在四个 BYD 原厂仪表 Activity 上且 opt-in、可撤销。对于需要在车机侧长期运行的 CarPlay 接收端而言这套本地优先 有界存储 白名单特权的设计为审查同类车载应用的数据行为提供了一个具体的参照基线。赞分享移动开发智能硬件音视频【免费下载链接】DiPlayIndependent CarPlay receiver for compatible Android head units. Wired and wireless public preview.项目地址https://gitcode.com/gh_mirrors/di/DiPlay点击查看免费下载相关推荐ServerBox 隐私架构深度解析本地数据、诊断上报与脱敏机制全指南ServerBox 隐私架构深度解析本地数据、诊断上报与脱敏机制全指南 Server Box 是一款开源的服务器状态监控与工具箱应用其隐私策略围绕一条核心原运维观测指标监控监控大盘运维DeepCode Desktop 隐私与诊断机制解析本地优先的数据边界、受控网络活动与按需诊断导出DeepCode Desktop 隐私与诊断机制解析本地优先的数据边界、受控网络活动与按需诊断导出 DeepCode 是一个开源 Agentic Coding人工智能大模型AI AgentAgent 框架多智能体代码智能体代码生成工具调用MCP ClientsMCP 服务桌面应用AI 评测optimizerDuck 隐私架构解析本地优先、零遥测的数据边界设计optimizerDuck 隐私架构解析本地优先、零遥测的数据边界设计 本篇技术指南围绕 optimizerDuck 官方隐私政策 PRIVACY.md h桌面应用上一篇Shotcut音频同步终极指南3步解决音画不同步问题下一篇如何利用Squoosh实现极致图像压缩前端开发者的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考