用 DeepSeek Harness 从零创建「墨页 PDF」安卓应用
用 DeepSeek Harness 从零创建「墨页 PDF」安卓应用本文档完整记录如何仅靠 DeepSeek Harness对话式 AI 代理 本机工具链从零开发、构建、测试、修复一款可安装的 Android 应用图片转 PDF 工具。全程真实经历含所有踩坑与解决过程。0. 最终成果交付物路径说明APK 安装包InkPDF\download\app-debug.apk18MB中文版Android 8.0 可装完整工程源码InkPDF\Kotlin Jetpack Compose33 个 Kotlin 文件源码APK 打包InkPDF-source.zip拷到联网电脑即可继续构建交互原型InkPDF\demo\app-prototype.html浏览器可点的界面原型深色设计稿design\mockups\*.pngGDI 程序化渲染构建/分发脚本build.bat/serve.bat/download\index.html一键构建 手机局域网直装功能图片转 PDF、PDF 合并/拆分/转图、图片压缩、文字水印、最近记录、后台生成、深色纸墨风 UI。原则纯离线、零权限仅一个可选通知权限、全部基于 Android 系统原生 API。1. Harness 是什么、怎么工作DeepSeek Harness 是一个对话式开发环境AI 代理在真实电脑上执行操作工具集包括文件工具write创建/覆盖、edit精准替换、read带行号阅读、glob/grep搜索命令工具pwsh执行 PowerShell支持前台/后台 job、超时、工作目录后台任务长任务构建、下载放后台跑完成自动通知不阻塞对话目标工具create_goal建立长周期目标跨多轮自动推进搜索工具web_search联网信息外部组件OpenPencil设计画布、subagent/workflow多代理核心工作流用户用自然语言提需求 → 代理把需求拆解成可执行步骤 → 用工具真实执行写代码、跑命令、查错误→ 把执行结果反馈给用户 → 迭代。2. 第一步需求与方案用户直接给出了一份完整的方案文档技术选型、架构图、功能表、UI 草图、避坑提示。这是最好的起点——需求越明确产出越准。关键决策点永久可用图片转 PDF 用android.graphics.pdf.PdfDocumentPDF 读取用PdfRenderer——纯系统 API零第三方 PDF 库。零权限文件访问走 SAF / PhotoPicker / MediaStore不需要存储权限。深色优雅Material 3 自定义深夜纸墨配色背景#0B0E13、主色暖金#E8B469。经验先让用户/自己把方案写清楚哪怕只是要点再动手——本应用 90% 的功能点都来自那份方案文档。3. 环境侦察动手前先摸清工具链开发前必须先探明本机环境否则会白干。用 pwsh 一次性检查java-version;echo$env:JAVA_HOME;gradle--version# Java/Gradleecho$env:ANDROID_HOME;Test-Path$env:LOCALAPPDATA\Android\Sdk# Android SDKInvoke-WebRequesthttps://dl.google.com-TimeoutSec 8# 网络本机真实情况✅ JDK 17D:\develop\Java\jdk-17.0.1❌ 无 Android SDK、无 Gradle 命令、无网络Google/阿里云镜像全断✅ 有 Gradle 8.8 发行版缓存、JDK、Python 3.10结论无法直接构建 APK → 策略调整为先产出完整可构建的源码 视觉稿等用户安装 Android Studio 后再真构建。环境侦察决定了整个开发策略这一步不能省。4. 工程搭建离线也能干没有网络也能搭好工程骨架Gradle Wrapper本机无法运行gradle wrapper守护进程锁、权限问题改为从磁盘上已有的其他 Gradle 项目复制gradle-wrapper.jargradlewgradlew.bat找到的正好是 Gradle 8.8 时代的 wrapper自己写gradle-wrapper.properties。版本目录gradle/libs.versions.tomlAGP 8.5.2 / Kotlin 2.0.20 / Compose BOM 2024.09.03 / Room 2.6.1 / Work 2.9.1统一管理。构建脚本settings.gradle.kts预留阿里云镜像注释、根/模块build.gradle.kts、gradle.properties开 AndroidX。// libs.versions.toml 片段[versions]agp8.5.2kotlin2.0.20composeBom2024.09.03[plugins]android-application{idcom.android.application,version.refagp}kotlin-compose{idorg.jetbrains.kotlin.plugin.compose,version.refkotlin}5. 分层实现架构即代码按方案文档的 MVVM 分层一个文件一个文件写com.inkpdf.app/ ├── ui/ # Compose 界面首页/编辑/预览/设置 深色主题 ├── data/ # Room(最近记录) DataStore(设置) 领域模型/状态机 ├── engine/ # PdfEngine / ImageProcessor / BitmapUtils纯逻辑 ├── repository/ # PdfRepository / FileRepository(SAFMediaStore) / ShareUtils ├── work/ # WorkManager 后台导出 ├── notification/ # 通知渠道与进度关键设计都对应方案文档防 OOM解码采样长边 2400px 逐页recycle()EXIF 方向API 28 用ImageDecoder26-27 用BitmapFactoryExifInterface灰度/黑白ColorMatrix饱和度 0 阈值矩阵质量参数真实生效先按 JPEG 重编码再嵌入后台导出CoroutineWorker 系统通知设计系统ui/theme/里定义配色 token、字重、圆角——深色纸墨风贯穿所有界面。6. 视觉稿与交互原型OpenPencil 不可用时的替代原计划用 OpenPencil 渲染界面设计稿但宿主不可用。改用两条替代路径GDI 程序化渲染写一个 PowerShell 脚本design/render_mockups.ps1用System.Drawing按坐标画出 5 个屏幕390×844 2x 应用图标 总览板。踩坑函数名H撞了 PowerShell 内置别名Get-History大小写不敏感且.ps1需 UTF-8 BOM 才能读中文。全部修复后渲染成功。HTML 交互原型demo/app-prototype.html——纯 CSS/JS 还原深色界面手机壳里可点选图→编辑→拖拽排序→进度动画→预览翻页→工具。用户双击浏览器即可体验应用。经验外部组件不可用时用语言自带的绘图/HTML 能力做等价交付保证用户看得见。7. 真实构建与排错最有价值的部分用户安装 Android Studio 后开始真构建。每一轮编译都暴露了真实问题——这正是能跑命令比只写代码强的地方#错误根因修复1Directory E:\deepseek_1 does not contain a Gradle buildgradlew 在错误工作目录执行pwsh 指定workdir2SDK location not foundlocal.properties被 PowerShell 写入UTF-8 BOMJava properties 解析失败无 BOM 重写 ANDROID_HOME双保险3Failed to find Platform SDK platforms;android-37新 SDK 只有android-37.0平台AGP 8.5 需要android-34SDK XML 版本 4 与 AGP 8.5 不兼容复制 37 目录伪装成 34后改用官方包4jlink.exe does not existIntelliJ 精简 JBR 缺 jlink换完整 JDK 175编译错误 ×9it变量遮蔽、coilRotationTransformation不存在、Bitmap→ImageBitmap类型不符、挂起函数位置错误、combinedClickable缺 OptIn、PageSettings缺字段手写代码的真实 bug逐一定位修复6真机启动闪退导航路由注册错误composable(routepreview)但声明了必填参数uri导航库启动即抛IllegalArgumentExceptionroute 改为preview?uri{uri}name{name}排错方法论静态校验grep 资源引用、括号配平、runCatching 内挂起函数→ 真构建暴露编译错误 → 模拟器复现运行时错误 → logcat 拿堆栈。每层都能抓到不同类型的 bug。8. 模拟器验证本机自测的完整链路没有真机时自己搭模拟器做端到端验证发现网络其实通PowerShell/curl 失败是 Windows Schannel 凭证问题SEC_E_NO_CREDENTIALS但Java 的 TLS 正常Gradle 能下载依赖证明了这点。用 Java 写了个 10 行下载器tools/D.java下载 SDK 组件。补平台从repository2-3.xml找到官方platform-34-ext7_r03.zip下载并 SHA1 校验替换伪装的目录。下载系统镜像x86_64-34_r04.zip687MB解压到system-images/android-34/default/。手工建 AVD无 cmdline-tools直接写config.ini.iniANDROID_AVD_HOME指向可写目录。启动WHPX 硬件加速可用90 秒 boot。adb 自动化 UI 测试uiautomator dump读界面文本 →input tap模拟点击 → 完整跑通选图→编辑→生成 PDF→预览真实产出了 123KB PDF 文件。这次模拟器测试直接抓到了导航闪退——没有它用户会一直拿到坏包。9. 交付与分发download\目录APK 深色下载页index.html自动检测 APK 是否就绪serve.batPython 起局域网 HTTP手机浏览器输地址即下载安装build.bat/build.sh联网电脑一键构建自动检测 JDK/SDK、生成 local.propertiesInkPDF-source.zip源码APK 打包随时可转移10. 中文化与真机问题中文化应用文案本身全中文模拟器系统语言切zh-CN后系统组件PhotoPicker影集/照片、SAF保存/下载也全中文文件名/目录改为墨页PDF_时间戳.pdf。真机闪退排查进行中模拟器 Android 14 正常用户平板 Android 15 闪退。已做16KB 对齐检查通过、在应用里加崩溃日志捕获器闪退时把完整堆栈写入下载目录无需 adb 即可取回、准备无线调试路径。关键教训不同 Android 版本的行为差异必须用真机日志定位模拟器验证 ≠ 真机验证。11. 经验总结给后来者先侦察环境工具链/网络/权限决定策略一分钟排查省一天返工。需求文档化让用户先写方案哪怕要点开发有依据。分层实现UI / 数据 / 引擎分离出错好定位。尽早真构建编译器/运行时抓到的 bug 比想象中多本应用约 10 处。模拟器自动化uiautomator adb 可以全自动测 UI 流程比截图可靠。网络被伪断时换路子schannel 失败但 Java TLS 通——工具选对了网络就是通的。兜底思维OpenPencil 不可用→GDI/HTMLadb 连不上→崩溃日志捕获器只要目标明确总有路径。

相关新闻

Fiddler手机抓包全攻略:Wi-Fi、热点、USB三种场景实战详解

Fiddler手机抓包全攻略:Wi-Fi、热点、USB三种场景实战详解

1. 项目概述:为什么我们需要在手机上抓包?作为一名常年和网络请求打交道的开发者,我几乎每天都会用到抓包工具。Fiddler,这款经典的HTTP/HTTPS调试代理,在PC端调试Web应用时堪称神器。但移动互联网时代,大量…

2026/8/17 3:09:05 阅读更多 →
卷积(三):快速卷积 (FFT‑法) 原理与代码落地,告别时域卷积算力困境

卷积(三):快速卷积 (FFT‑法) 原理与代码落地,告别时域卷积算力困境

本专栏《信号与系统硬核精讲》付费连载第 3 篇 前文回顾: 第 1 篇:卷积本质含义、连续 & 离散卷积公式、4 步图解计算法、工程应用场景; 第 2 篇:离散 / 连续卷积手算实例、朴素时域卷积 Python/MATLAB 底层实现、卷积五大数学…

2026/8/17 3:08:05 阅读更多 →
SpringBoot+Vue企业人事管理系统:从架构设计到工程化部署全解析

SpringBoot+Vue企业人事管理系统:从架构设计到工程化部署全解析

如果你正在寻找一个既能作为毕业设计项目,又能直接用于实际企业管理的实战案例,那么一个功能完整、技术栈主流、附带源码和论文的“企业人事管理系统”无疑是一个绝佳的选择。但问题来了:网上开源项目众多,为什么这个基于SpringBo…

2026/8/17 3:07:05 阅读更多 →

最新新闻

Element UI el-select filter-method 自定义搜索:多字段、拼音与性能优化实战

Element UI el-select filter-method 自定义搜索:多字段、拼音与性能优化实战

1. 项目概述:当默认搜索不够用在后台管理系统里,下拉选择框(Select)绝对是高频组件。Element UI 的el-select配合filterable属性,开箱即用的远程搜索或者本地过滤,应付大部分场景绰绰有余。但总有那么些“特…

2026/8/17 4:03:21 阅读更多 →
Android事件模拟与注入:从input命令到无障碍服务的自动化实战

Android事件模拟与注入:从input命令到无障碍服务的自动化实战

1. 项目概述:Android事件模拟与注入的深度探索在Android应用开发与测试的日常工作中,我们经常会遇到一些需要自动化操作或模拟用户交互的场景。比如,你想做一个自动化的测试脚本,让它在凌晨三点自动帮你签到领积分;或者…

2026/8/17 4:03:21 阅读更多 →
Android性能优化全链路解析:从指标体系到流畅度、内存与启动速度优化

Android性能优化全链路解析:从指标体系到流畅度、内存与启动速度优化

1. 项目概述:为什么Android性能优化是“玄学”也是“科学”干了这么多年Android开发,最常被产品和测试同学追着问的一句话就是:“这个页面怎么又卡了?” 性能问题,尤其是移动端的性能问题,往往不像功能Bug那…

2026/8/17 4:03:21 阅读更多 →
华硕ROG魔方幻分布式路由实战:Mesh组网与Wi-Fi 6全屋覆盖指南

华硕ROG魔方幻分布式路由实战:Mesh组网与Wi-Fi 6全屋覆盖指南

最近在折腾家里的网络,特别是游戏和影音需求越来越高,原有的单台路由器在信号覆盖和高速稳定性上越来越力不从心。面对动辄上百平米的户型、多堵承重墙,以及家人同时在线游戏、4K流媒体和远程办公的多重压力,我开始研究一套能彻底…

2026/8/17 4:03:21 阅读更多 →
KKCE:从ping命令到在线Ping

KKCE:从ping命令到在线Ping

一、人人会用,却少有人用对的命令 ping 大概是 IT 行业使用频率最高的网络命令:网管、开发、运维、甚至普通用户排查断网,第一反应都是敲一句 ping。但大多数人只会最基础的用法——输入命令、看一眼通不通,然后就没了。 实际上…

2026/8/17 4:03:21 阅读更多 →
编码智能体架构解析:从ReAct到MetaGPT的源代码分类与工程实践

编码智能体架构解析:从ReAct到MetaGPT的源代码分类与工程实践

1. 项目概述:拆解“脚手架”里的智能体蓝图最近和几个做AI应用开发的朋友聊天,大家都有一个共同的困惑:市面上关于“编码智能体”(Coding Agent)的论文和宣传文章越来越多,从OpenAI的Codex到各种开源项目&a…

2026/8/17 4:02:20 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →