{
  "added_at": "2026-10-18",
  "additional_evidence_urls": [
    "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/scripts/verify-flutter.mjs",
    "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/scripts/fixtures/flutter-gallery-expectations.json",
    "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/README.md",
    "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/package.json",
    "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/LICENSE",
    "https://github.com/morluto/rea/pull/1582"
  ],
  "category": "workflow-guides",
  "description_en": "Identifies a Flutter APK’s Dart snapshot hash, per-ABI library digests and engine build provenance, then inspects one ABI’s AOT snapshot sections, through REA’s pure-parsing CLI and MCP tools. The string-pool output is a bounded byte-pattern projection of package and SDK URIs, not deserialized Dart classes or recovered source.",
  "description_zh": "通过 REA 的纯解析命令行与 MCP 工具，识别 Flutter APK 的 Dart 快照哈希、各 ABI 库摘要与引擎构建来源，再检查单个 ABI 的 AOT 快照段。字符串池输出是对 package 与 SDK URI 的有界字节模式投影，并非反序列化的 Dart 类或恢复的源码。",
  "entry_url": "https://awesomerea.org/resources/rea-flutter-guide/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/rea-flutter-guide/",
  "evidence_url": "https://github.com/morluto/rea/blob/c12d9eda87aa5a022ee7e18ea96d8d03bfd12e96/docs/flutter-analysis.md",
  "group": "rea",
  "id": "rea-flutter-guide",
  "json_url": "https://awesomerea.org/resources/rea-flutter-guide/record.json",
  "kind": "documentation",
  "markdown_url": "https://awesomerea.org/resources/rea-flutter-guide/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/rea-flutter-guide/index.md",
  "name": "Flutter build identification",
  "name_zh": "Flutter 构建识别",
  "record_type": "resource",
  "relationship": "official-documentation",
  "requirements": [
    "Reviewed on main as rea-agents 6.7.0, which declares Node ^22.19.0, ^24.11.0 or 26+. identify-flutter-build and inspect-dart-aot (MCP identify_flutter_build and inspect_dart_aot) parse a caller-supplied APK’s libapp.so and libflutter.so without an engine, external tool, execution or network lookup. Inputs are copied into an owned read-only snapshot, with documented bounds such as 2 GiB per APK and 256 MiB per library.",
    "REA performs no hash-to-SDK lookup; mapping a snapshot hash to a Dart release needs an external dataset such as reFlutter’s. Complete structural coverage currently requires the FullAOT kind of the supported Dart 2.14 snapshot layout, and other kinds are kept with partial coverage. Typed class and function recovery needs an SDK-specific parser, and class-like tokens include incidental matches.",
    "The documented verifier runs both tools through the compiled CLI and stdio MCP on the Flutter Gallery 2.9.2 release APK against a pinned expectations file: one agreeing snapshot hash on all three ABIs, engine labels and URI counts. A plain aapt2-built APK checks negative detection. The guide reports the Gallery workflow and 147 focused tests passing on macOS 14.8.9 x86-64 and Windows 11 x64 guests.",
    "In merged PR #1582, an independent reviewer reports that hashes, ELF sections and package lists matched readelf/strings checks on three F-Droid apps, PocketDhamma, Flutter McSweepy and cone, on pre-merge heads, with a non-Flutter control not detected; the thread records fixes for gaps found. These checks cover build identity and structure. REA declares MIT; analysed APKs keep their own licenses."
  ],
  "requirements_zh": [
    "审阅时 main 上为 rea-agents 6.7.0，声明支持 Node ^22.19.0、^24.11.0 或 26 及以上。identify-flutter-build 与 inspect-dart-aot（对应 MCP 的 identify_flutter_build 与 inspect_dart_aot）解析使用者提供的 APK 中的 libapp.so 和 libflutter.so，无需引擎、外部工具、执行或联网查询。输入先复制为分析器独占的只读快照，并有文档列明的上限，例如每个 APK 2 GiB、每个库 256 MiB。",
    "REA 不做哈希到 SDK 的查询；把快照哈希对应到 Dart 版本需借助外部数据集，例如 reFlutter 维护的数据。目前只有所支持的 Dart 2.14 快照布局中的 FullAOT 类型能得到完整结构覆盖，其他类型会保留为部分覆盖。恢复带类型的类与函数需要针对特定 SDK 的解析器，类名样式的标记也包含偶然匹配。",
    "文档中的验证脚本经编译后的命令行与 stdio MCP 运行两个工具，以 Flutter Gallery 2.9.2 发布版 APK 对照固定的期望文件：三个 ABI 上快照哈希一致，并核对引擎标签与 URI 数量；另用普通 aapt2 构建的 APK 检查不误报。指南报告 Gallery 流程与 147 项 Flutter 专项测试在 macOS 14.8.9 x86-64 与 Windows 11 x64 虚拟机中通过。",
    "在已合并的 PR #1582 中，一位独立审阅者报告：在合并前的分支版本上，三个 F-Droid 应用 PocketDhamma、Flutter McSweepy 与 cone 的哈希、ELF 段和 package 列表与 readelf／strings 检查一致，非 Flutter 对照应用未被识别为 Flutter；讨论串记录了对所发现问题的修复。这些检查针对构建身份与结构。REA 声明 MIT，所分析的 APK 保留各自许可。"
  ],
  "targets": [
    "app"
  ],
  "url": "https://github.com/morluto/rea/blob/main/docs/flutter-analysis.md",
  "verification": "source-reviewed",
  "verified_at": "2026-10-18"
}
