直接回答
Debug 构建的数据面可能不同于 Release,但 debug 一词本身并不说明差异。source set、Manifest overlay、构建配置、日志封装、测试夹具、端点和依赖变体都可能变化。Android 安全指南警告不要将敏感值写入日志,并建议清理生产日志。ANDROID-PRIVACY-01 与 ANDROID-LOG-DISCLOSURE-2026-01 支持按构建审核,但不能证明某个应用当前确实记录私人提示词。 比较前固定确切制品。记录源码版本、应用版本、构建变体、解析依赖、合并 Manifest、网络设置、包内容及适用的签名身份。Debug APK 与 Release 包可能带有不同资源、库和配置。检查最终包而不仅是 Gradle 源文件。搜索 staging 主机、测试账号、样例提示、私有路径、详细日志开关和夹具资源。源码中的 debug 条件也可能受资源合并或依赖注入影响。 为提示词、转录、图片说明、账号标识及文件路径创建合成金丝雀。分别在两个变体中触发推理成功、模型加载失败、取消、权限拒绝、网络错误和导出。检查 Logcat、崩溃报告、分析事件、截图、本地缓存和支持包。不得使用真实用户内容,因为 Debug 输出可能进入 CI、共享开发设备、缺陷附件或崩溃工具。 在受控动作下比较出站路径。Debug 可能指向 staging 或带有诊断 SDK;Release 也可能启用 Debug 中不存在的分析或支持路径。按变体分别抓取。核对 debuggable Manifest、明文配置、网络安全设置、测试证书及 API 密钥。不能将生产秘密放入 Debug 配置,也不能为了抓包而关闭 TLS 验证。对不支持的原生网络或证书固定要记录限制。 检查最终打包和运行行为。用类似发行的制品确认测试夹具、私有证书、本地主机、详细跟踪和 Debug 专属页面是否按预期排除或禁用。检查合并后的 Release 代码,并真实触发成功及失败流程。R8 可能剥离选定日志调用,但不会自动清理所有消息或阻止网络。即使包中没有 Logcat 输出,同一内容仍可能被持久保存或经其他渠道传出。 用变体矩阵保持可复现。逐项写清 Debug 和 Release 的预期行为,例如金丝雀是否只出现于本地开发控制台、staging 端点是否可达、诊断导出是否需用户选择。要验证结果,不能仅相信命名习惯。Build flavor、构建类型、SDK 或测试工具改变后都应复测。如果工具生成截图或转储,也要记录保存位置和可访问者。 结论只适用于受测提交、构建制品和动作。它不能证明每个 Debug 都泄漏、每个 Release 都私密,或某包已可上架。将源码审核、包检查和网络观察分别报告。如果发现金丝雀,找出来源、做范围有限的修复并用同一夹具重测。本文把构建变体的不确定性转成隐私回归测试,而不是 Android 的笼统声明。
Debug 错误日志中出现提示词诊断
开发者为排查本地模型加载失败增加了跟踪信息。Release 审核者需要确认提示词日志、staging 端点、合成夹具或更广权限是否进入分发包,或会在发行运行中启用。
决策
用合成金丝雀比较最终 Debug 与 Release 制品,并在两个变体中执行相同成功和失败动作。
预期结果
记录具体构建和检查过的数据路径,不把 Release 名称当作隐私保护。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- ANDROID-PRIVACY-01:应用需核查完整数据访问路径
- ANDROID-LOG-DISCLOSURE-2026-01:敏感内容不应进入默认日志
隐私声明需要数据清单和流量证据;“本地模型”标签本身不是证明。
实施流程
- 固定两个变体及构建输入. 记录源码版本、应用版本、变体、依赖图、合并 Manifest、网络设置、包内容和签名信息,便于复现比较。
- 用合成金丝雀跑过各类结果. 用假提示、转录片段、图片标签、账号标记和路径覆盖成功、加载失败、取消、权限及导出流程。
- 检查本地诊断表面. 搜索 Logcat、崩溃报告、分析事件、截图、缓存、CI 输出和支持材料中的金丝雀。
- 按动作比较网络路径. 分别抓取变体,记录端点与可见字段、连接状态和触发动作,并注明原生库或证书控制造成的盲区。
- 验证打包并复测变化. 在最终包中核对夹具、端点、密钥、跟踪和 Debug 页面;构建或依赖变化后按相同用例重新测试。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 独立识别并测试 Debug 与 Release 制品;结论注明提交版本和受测动作。
- 合成私人数据金丝雀不进入未经批准的 Release 日志、崩溃报告、分析或网络负载。
- 记录变体及抓取限制,不把构建标签视为隐私保证。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| Debug 源配置 | 检查开关、source set、主机和夹具 | 显示预期差异,但不必然代表最终合并包。 |
| Release 制品检查 | 检查最终 Manifest 和包资源 | 能确认打包内容,不能显示全部运行请求。 |
| 运行时金丝雀测试 | 触发流程并检查日志与流量 | 提供动作级证据,同时保留抓取限制。 |
需要避免的失败模式
- 认为只有 Debug 构建会记日志
- 把 R8 剥离当作网络保护
- 在 CI 或共享设备上使用真实用户内容
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
Debug 构建必然比 Release 更不私密吗?
不必然。行为取决于变体代码和配置。应比较构建后的包,并对两个版本执行同一组合成测试,保留差异证据、受测动作和构建标识。
R8 剥离日志能证明提示词不会离开设备吗?
不能。它只影响选定日志调用。网络客户端、分析、崩溃报告、缓存及其他输出渠道仍要分别审核,并说明每项测试覆盖的构建与路径。
开发者能否在 Debug 跟踪中使用真实提示词?
默认应避免。合成金丝雀可测试失败路径,并避免私人内容进入 CI、共享设备、缺陷附件和崩溃诊断工具;还要审查访问权限与保留策略。