Skip to content

Android 端接入 Bug 报告:复用运行诊断与共享拼装 - #8

Draft
KuramiWan wants to merge 1 commit into
feat/bug-report-contractfrom
feat/bug-report-android
Draft

KuramiWan wants to merge 1 commit into
feat/bug-report-contractfrom
feat/bug-report-android

Conversation

@KuramiWan

@KuramiWan KuramiWan commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Android 端接入 Bug 报告

叠在 #7(feat/bug-report-contract)之上。本 PR 只含 Android 与共享拼装迁移的改动,桌面端实现仍在 #7。

What changed(改了什么)

Android 社区页也能点「报告问题」:看得到将要发送的报告,可以复制、导出 JSON;邮件与 GitHub 两个出口按配置出现(Android 上 mailto: 由系统邮件客户端接管)。

底层:

  • Java(RuntimeDiagnostics / AndroidDiagnostics / MainActivity):Android 已经有一套受限运行诊断(key 白名单 + 凭据脱敏)。这次补三样:
    • recent(n):读最近事件(旧到新,按字节预算截断,不会把 4MB 段全读进内存);
    • 会话标记 session.started / session.ended:启动时先读上一次的尾巴再写本次标记,正常退出(onDestroy + isFinishing)补结束标记;没有配对结束就是异常退出;
    • bugReportFacts():只交原始事实(环境 / 上次会话 / 最近事件 / 投递配置),不拼报告;诊断未开启的变体如实返回 {"available":false}。
  • facade(platform-facade.js):window.ElecKoiPlatform.bugReport.facts(),两个变体共用同一门面。
  • 渲染层:新增 bugReportBridge.js 统一平台差异——桌面直接透传 dshDesktop.bugReport,Android 把事实交给共享纯函数拼装;BugReportDialog 与移动端社区页复用同一组件。
  • 共享:buildBugReport 从桌面主进程移到 packages/shared/src/foundation/bugReport.ts,桌面侧保留旧路径再导出。拼装、脱敏、折叠、正文格式因此仍然只有一份实现。
  • ADR 0041 决定 8:补上 Android 的分工,以及「第一版只在 compat 变体提供入口」。

Architecture route(架构归属)

  • Main 新文件仅承担桌面壳职责(本 PR 未新增 Main 文件)
  • Shared 新文件位于闭合集合:packages/shared/src/foundation/bugReport.ts
  • 未新增业务 IPC 或私有桥;Android 走既有 ElecKoiAndroid 门面
  • Renderer 未直接访问 Electron、Node、SQLite 或 DSH SDK
  • 新增失败带契约码(eleckoi/lifecycle/not-ready 等复用既有码)
  • 长生命周期资源:诊断存储在 Application 里唯一实例,未新增线程或服务

Data and compatibility(数据与兼容)

  • Schema 改动:无
  • 不写 localStorage
  • 取消路径:导出走系统保存对话框,取消即 saved: false
  • 报告格式仍是 schemaVersion: 1,与桌面完全一致

Verification(验证)

  • pnpm test(报告相关 5 个文件共 74 条:契约 40、桌面 20、对话框 5、Android 门面 2、Android Web 桥 5)
  • bash gates.sh 全绿(10 步)
  • pnpm test:android:17 个文件通过、70 条通过;android-apk-resources 1 条失败,原因是本机缺 Python PIL(环境问题,与本改动无关)
  • Java 未编译:本机没有 Android SDK / javac,apps/android 的 Java 改动只做了人工审阅,需要 CI 或实机编译确认
  • 实机验收:需要 compat 变体的 APK;清单待补(桌面那份在 win-dev/checklists/bug-report.md)

Review scope(审查范围)

  • apps/android/app/src/main/java/com/eleckoi/app/{AndroidDiagnostics,RuntimeDiagnostics,MainActivity}.java
  • apps/android/app/src/main/assets/platform-facade.js
  • apps/web/src/app/windows/shell/components/bugReportBridge.js、BugReportDialog.jsx、apps/web/src/mobile/MobileAuxiliaryPages.jsx
  • packages/shared/src/foundation/bugReport.ts(从桌面主进程移入)
  • 测试:apps/android/tests/android-bug-report-facts.test.js、apps/web/tests/ui/android-bug-report.test.jsx
  • docs/adr/0041-bug-report-delivery.md(决定 8)

已知限制

  1. 只在 compat 变体提供入口(标准版没有开启运行诊断,bugReportFacts 返回 available:false)。
  2. Android 暂时没有代发通道:没有配置来源,界面只出现复制 / 导出(以及配置了邮箱时的 mailto:)。
  3. Java 未经编译器验证:本机无 Android 工具链,这是本 PR 最大的未验证点。

@coderabbitai

coderabbitai Bot commented Oct 27, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Android 没有 Electron 主进程,但已有受限运行诊断(key 白名单 + 凭据脱敏)。
这次只让它多给两样东西:一对会话标记,和「原始事实」入口;报告的拼装、
脱敏、折叠与正文格式仍走共享纯函数,一份实现。

- Java:RuntimeDiagnostics.recent() 读最近事件;AndroidDiagnostics 补
  session.started / session.ended 并按上次标记判定异常退出,bugReportFacts()
  交出环境 / 会话 / 事件 / 投递配置;MainActivity 加桥方法与正常退出标记
- facade:window.ElecKoiPlatform.bugReport.facts()(两个变体共用同一门面)
- 渲染层:bugReportBridge 统一桌面与 Android;Android 的报告用共享
  buildBugReport 拼;报告对话框与移动端社区入口复用同一组件
- 共享:buildBugReport 从桌面主进程移到 packages/shared/src/foundation,
  桌面侧保留旧路径再导出
- ADR 0041 决定 8 补充 Android 的分工与「只在 compat 变体提供入口」

测试:报告相关 74 条(含 Android 门面 2 条、Web 桥 5 条)。本机没有 Android
SDK,Java 改动未编译,实机验收待做。
@KuramiWan
KuramiWan force-pushed the feat/bug-report-android branch from 1db5b75 to e4dead9 Compare October 28, 2026 08:24
@KuramiWan
KuramiWan force-pushed the feat/bug-report-contract branch from 889644f to 7335bc8 Compare October 28, 2026 08:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant