AI Agent 写了个 Android 扫码 App——从零到扫码成功的 3 轮 PDCA

本文最后更新于 2026年7月27日 早上

7 月 26 日晚上,我对 Hermes 的 AI 助手说了一句:“帮我做一个支持扫码的 Android App。”

7 月 27 日凌晨 1 点,一个 36MB 的 APK 已经编译成功。早上一试,扫码正常。

从零到能用的扫码 App,3 轮 PDCA 循环,纯 AI 驱动开发。这不是我第一次用 AI Agent 写代码,但这次是第一次做 Android 原生应用——没有现成的模板、没有熟悉的代码结构,一切都要靠 Agent 从零推。

为什么做扫码 App

需求本身很简单:张老师需要一台 Android 手机上的扫码工具,扫二维码、扫条码都行。

这类需求在开发者世界很常见,但放在 AI Agent 的角度,这是个好检验项目:

  • 技术栈陌生:Android 原生开发不是 AI 的日常训练数据
  • API 复杂:CameraX + ML Kit 的组合有多个版本兼容性问题
  • 端到端:从需求到 APK,不靠人工干预

如果这个能跑通,说明 AI Agent 已经可以独立完成跨技术栈的完整应用开发。

技术选型

AI 助手选了 CameraX + ML Kit Barcode Scanning

组件 版本 理由
CameraX 1.3.4 比 Camera2 简单,生命周期自动管理
ML Kit Barcode 17.3.0 离线条码识别,支持 QR/EAN/UPC 等主流格式
Kotlin 2.0.21 当前 Android 开发标准
Jetpack Compose 声明式 UI,代码量小

选择理由很务实:CameraX 比 Camera2 对新手友好,ML Kit 比 ZXing 更新更快,Compose 让 UI 代码少一半。

三轮 PDCA 开发过程

ADP 开发循环每轮 15 分钟左右,3 轮下来完成了从 Hello World 到完整扫码功能。

AI Agent 3轮 PDCA 开发流程

第 1 轮 P → D:从需求到代码骨架

P 阶段产出了 TASK-20260727-001 任务卡片,明确了 REQ-002 条码扫码功能。

D 阶段通过 ide-hub 派 OpenCode 执行,代码在 /home/tony/projects/Hello Android/ 下生成:

1
2
3
4
app/src/main/java/com/example/helloandroid/scanner/
├── BarcodeScannerActivity.kt # 扫码界面
├── CameraPreview.kt # CameraX 预览
└── BarcodeAnalyzer.kt # ML Kit 条码识别

第 2 轮 C:检查发现问题

C 阶段跑 ./gradlew assembleDebug,BUILD SUCCESSFUL 但有几个 Warning:

1
2
3
Annotation 'ExperimentalGetImage' is not annotated with '@RequiresOptIn'
'val LocalLifecycleOwner' is deprecated
'fun setTargetResolution' is deprecated

这些不是阻塞问题,但说明选用的 API 版本不完全匹配。

第 3 轮 A → 下轮 P:修复 API 兼容性问题

真正的工作在第 3 轮。两个 API 问题需要手动修复:

问题 1:BarcodeScannerOptions 在 ML Kit v17.x 的 Kotlin 中不可用

1
2
3
4
5
6
7
8
9
// 报错
private val scanner = BarcodeScanning.getClient(
BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
)

// 修复:用默认配置
private val scanner = BarcodeScanning.getClient()

默认配置已经覆盖了 QR/EAN/UPC/Code-128/Data Matrix 等主流格式。

问题 2:CameraX 1.3.4 的 API 变更

1
2
3
4
5
// 旧写法:属性赋值(CameraX 旧版本)
preview.surfaceProvider = previewView.surfaceProvider

// 新写法:方法调用(CameraX 1.3+)
preview.setSurfaceProvider(previewView.surfaceProvider)

这个错误是因为 ML Kit v17 与 CameraX 版本不匹配导致编译失败,修复后 BUILD SUCCESSFUL。

最终成果

36MB APK,构建成功,推送到 Gitee,Git tag v0.4.0

1
-rw-rw-r-- 1 tony tony 36M Jul 27 01:16 app/build/outputs/apk/debug/app-debug.apk

第二天在真机上试了扫码,QR Code、EAN-13 条码都能正常识别。

三个有价值的发现

1. ADP 开发循环对陌生技术栈有效

Android 开发不是 AI 的训练数据强项,但 3 轮 PDCA 就把问题解决了。关键在 C 阶段抓 API 兼容性问题——不是语法错误,而是版本不匹配。如果 C 阶段只看”BUILD 成功”就放过了,问题会留到运行时。

2. ML Kit API 的 Kotlin 兼容性有坑

BarcodeScannerOptions 在 Java 中正常,在 Kotlin 中不可用。这个坑不在文档里,只有真编译才会暴露。以后 Android 项目用 ML Kit,优先用默认配置,需要指定格式时才查 Java 兼容性。

3. CameraX surfaceProvider 是方法不是属性

这个坑更隐蔽:Google 官方示例还在用属性写法,但 CameraX 1.3.4 已经是方法签名。Agent 生成代码时参考的可能是旧示例。

一个更深层的思考

这次开发让我想到:AI Agent 写代码,最大的价值不是“写得快”,而是 C 阶段发现问题 → A 阶段修复 这个闭环跑得通。

第一轮生成代码有 Bug,第二轮发现,第三轮修复。如果只有 P + D,这个 App 可能永远停在“BUILD 但有 Warning”的状态。

ADP 的 PDCA 不只是项目管理框架,它是让 AI 从“一次性生成”变成“迭代交付”的机制。


参考文献

  1. CameraX 官方文档
  2. ML Kit Barcode Scanning
  3. Hello Android GitHub

AI Agent 写了个 Android 扫码 App——从零到扫码成功的 3 轮 PDCA
https://normdist.com/2026/07/27/ND-20260727-002-ai-agent-android-scanner-app-pdca/
作者
小瑞
发布于
2026年7月27日
许可协议