# 20260610 Diverse 100 APK Intake Findings

状态：active
Owner：app-dissector
Review cadence：next APK batch run

## 结论

这轮不再从 iOS 榜单标题反推 Android 包，而是用 `google-play-scraper` 直接从 Google Play 搜索发现 `package_id`，再交给 APK 下载和静态分析。

- Google Play 搜索候选：490 个
- 抽样目标：100 个
- 下载/分析 blocked：0 个
- 静态分析成功：72 个
- APKPure 未产出包：9 个
- APKPure 产出不可读 archive：19 个
- 普通分析异常：0 个

上一轮匹配少的主要原因不是静态分析能力，而是输入身份不稳：不少 App 来自 iOS 榜单或人工标题，Android 侧标题、开发者、地区包和包名经常不一致。旧 resolver 为了避免下错包，只放行 `exact/strong`，因此会把大量 `medium/ambiguous` 拦住。本轮的 `discovered_play` 直接来自 Google Play `appId`，所以 100 个目标全部进入下载队列。

## 样本结构

- indie_new：30
- mid：35
- upper_mid：25
- head：10
- AI 图片/视频：29
- 健康/健身/睡眠：23
- niche 工具：18
- 工具订阅：15
- PDF/效率：15

## 高价值静态样本

- AI Photo Enhancer - Evoke：Flutter / `flutter-aot-arm64`
- PixVerse: AI Video Generator：Flutter / `flutter-aot-needs-arm64`
- SparkReceipt: Receipt Scanner：Flutter / `flutter-aot-needs-arm64`
- UpFoto - AI Photo Enhancer：Flutter / `flutter-aot-arm64`
- Avatarro: AI Avatar Maker：Flutter / `flutter-aot-arm64`
- Categorizr: Receipt Scanner：native / `native-ghidra-targeted`
- Duplicate Photo Finder Remover：native / `activity-triage`
- Olive - Holistic Food Scanner：Hermes + React Native / `hermes`
- Any TV Remote Control：Hermes + React Native / `hermes`
- Phone Cleaner - AI Cleaner：native / `native-ghidra-targeted`

## 失败类型

`download_missing` 的 9 个目标是 APKPure 没有产出包，日志显示 apkeep 正常结束但目录里没有 APK/XAPK/APKS。后续需要 Google Play 凭据源、Huawei/F-Droid 可用源或其他镜像源补齐。

`invalid_package_archive` 的 19 个目标是 APKPure 写出了 `.xapk`，但 Python `zipfile`、`unzip`、`apktool` 都无法读取，典型表现是缺 ZIP central directory 或内层 APK 截断。它们不是包身份匹配问题，也不是静态分析器普通解析失败；需要换下载源重取。

## 落地改动

- 新增 `scripts/package_forensics/sample_pick_google_play.mjs`：参数化 Google Play 采样，输出 APK 批处理 CSV、完整 JSON、store-targets JSONL。
- 更新 `scripts/package_forensics/collect_apk_batch.py`：默认放行 `discovered_play`，支持多 `--download-source`、`--max-targets`，同名 `target_id` 自动去重，明确标记 `invalid_package_archive`。

## 下一步

1. 给 apkeep 配置 Google Play 下载源后，对 9 个 missing 和 19 个 invalid 目标单独重跑。
2. 对 15 个 Flutter 样本按 arm64 状态分批跑 blutter；优先 Evoke、UpFoto、Avatarro、Processed、PixVerse。
3. 对 2 个 Hermes / React Native 样本跑 Hermes bytecode 反编译，优先 Olive 和 Any TV Remote。
4. 对 `native-ghidra-targeted` 样本跑 Ghidra headless，优先 Categorizr、Phone Cleaner、Photo Editor、Image to PDF。
