从零到上架:第一个App开发全流程复盘与踩坑教训
如果你问我一个从没上过架的开发者从零开始把第一个App做到能下载、能使用、能收到真实用户反馈需要多久我的答案是大概两个半月。这个速度不算快也不算慢但这段时间里踩过的坑、想明白的事比写过的代码更有价值。我的第一个App是个轻量级的阅读打卡工具功能少得可怜核心就三件事记录每天读了多长时间、随手写一句阅读心得、在日历上留下打卡标记。但就是这个小东西让我把想法→原型→开发→上架→看数据的完整链路亲手跑了一遍。这篇文章不是那种从入门到精通的教程更像是我做第一个App的完整复盘。如果你也正打算做自己的第一款产品不管你是学生、刚转行的开发者还是一直写后端从来没碰过移动端的人接下来的内容应该能帮你少走一些弯路。1. 我为什么把第一个App做成阅读打卡工具大多数人做第一个App时第一反应都是挑一个看起来热门的方向比如社交、电商、AI应用。我很早就把这类方向排除了原因很简单第一个App的核心目标不是一炮而红而是跑通整个开发到上架的流程让我在有限时间内能交付一个完整作品。1.1 选题不是拍脑袋当时我对比过四个方向当时我认真想过四个方向记账、待办清单、阅读打卡、喝水提醒。我没有直接开写而是列了一个很简单的对比表从数据复杂度、竞争程度、适不适合首个作品三个维度去筛。记账类的痛点确实存在但它的功能边界很难控制分类、预算、图表、账单导入每一块都是深坑而且用户对数据准确性非常敏感做不好很容易被差评。待办清单看起来简单可是这个赛道已经有太多成熟产品用户迁移成本高我一个新做的版本凭什么让人换过来。喝水提醒则需要稳定的推送能力还涉及系统通知权限做起来比想象中麻烦而且使用场景太碎。最后剩下阅读打卡。这个方向的用户目标非常明确就是想坚持读书的人需要一个不打断阅读流程的记录工具。数据模型也足够简单基本就是书、记录、日期这三张表。就算前期功能粗糙只要记录和打卡两条主路径顺畅就有人愿意用。1.2 核心需求边界MVP只做三件事我给自己定的第一版范围非常克制只做三件事添加在读的书籍记录每次阅读的页码或时长在日历上看到自己的打卡轨迹。用户的核心场景是晚上睡前读二十分钟书打开App点一下今天读了写一句话心得关掉。整个过程不应该超过十五秒。这个边界不是随便划的我专门把统计图表云端同步阅读提醒社区分享这些听起来很加分的东西全部放进了以后再说的清单。原因是我很清楚第一版每多一个功能开发和测试的时间就不是线性增长而是指数增长。功能之间会互相牵连比如加了云端同步就要做账号系统、数据冲突处理、隐私说明这一串拉出来上线遥遥无期。1.3 为什么我没有一上来就做大而全很多第一次做App的人会陷入一个误区总觉得功能少了不好意思拿出来见人。我的看法正好相反第一个App最忌讳的就是大而全。功能一多你每天疲于奔命地加代码、修Bug根本没精力观察用户到底怎么用你的产品。小试牛刀这四个字我觉得理解得很到位不是要你做一把削铁如泥的宝刀而是先确认自己能把刀抡起来并且不砍到自己。把范围缩到最小不是为了偷懒是为了让每一个功能都被打磨到位。我宁可给别人看一个只有三个功能但都很流畅的App也不想给人家看一个什么都有但什么都卡的半成品。2. 技术选型的务实思路第一次开发稳定比炫技重要技术选型这种事新手最容易纠结因为各种技术社区每天都在争论哪个方案更好。我在第一个项目上给自己的唯一要求是选一个我能控制住的技术方案而不是选一个表面上最潮的方案。2.1 跨平台方案还是原生开发我选了跨平台当时我面前摆着两条路原生开发和跨平台方案。原生开发的好处是性能和平台能力都拉满但它意味着我至少要学习两套语言和两套工具链这对一个只有零散编程经验的人来说周期太长了。跨平台方案的好处是一套代码同时覆盖两端调试体验也更现代开发效率明显更高。我最后选了Flutter这套跨平台方案。有人可能会问为什么不是另一套主流跨平台框架我的理由特别简单我能找到的教程和踩坑资料更多英文中文社区都很活跃遇到问题搜一下基本都有答案。对于第一次做App的人来说生态的成熟度比技术本身的先进性重要得多。维度跨平台方案Android端原生开发周期一套代码两端跑明显更短只覆盖单端做双端要写两遍学习成本一门语言、一套工具链即可需要额外熟悉平台生态和语言性能表现常规列表、页面交互完全够用极致动画和重度计算更有优势调试体验热重载改完立刻看到效果编译步骤相对多社区资料教程、问答、组件库都很丰富官方文档最权威但中文资料质量参差我不否认原生开发的长期价值但第一个App这个前提决定了效率优先。先把作品做出来建立起完整闭环比追求某端极致性能更符合这个阶段的诉求。2.2 数据存储只用本地没有后端也能跑很多第一次做App的人有一个思维惯性就是App一定要有服务器。我第一版故意没有做任何后端数据全部存在本地。原因主要有三个第一我没有服务器预算也不想为了一个MVP去搭一套账号体系第二阅读打卡这类数据天然适合存在用户自己的设备上隐私负担也更小第三去掉后端以后整个产品就不依赖网络环境开发和测试都省了很多事。数据层我用的是SQLite这类本地关系型数据库再包一层简单的数据访问操作。第一版的表结构特别简单基本就是三张表书籍表存书名、作者、总页数记录表存每次阅读的日期、页数和心得设置表存一些偏好。核心的数据模型大概长这样class ReadingRecord { final String bookId; final DateTime readDate; final int pagesRead; final String note; }没有后端还有一个隐藏好处就是上线前的合规材料简单很多。我只需要说明数据保存在本地、不会上传到任何服务器隐私政策几段话就能写清楚这在后面过审核的时候给我省了不少事。2.3 第三方服务第一版一个都没接这里我说的第三方服务是指统计SDK、崩溃上报SDK、推送SDK这些东西。我第一版统统没有接入。这跟主流观点不太一样很多人建议一开始就埋点方便以后分析。我的想法是第一版用户量本来就小应用商店后台自带的下载量和评分已经能提供基础信号崩溃信息靠真机加上模拟器多轮自测也基本够用。第三方SDK看着是省事实际上每接一个都会带来副作用安装包体积变大、隐私政策要列更多条目、启动流程多出初始化步骤而且一旦某个SDK出问题排查难度非常高。我给自己定了一条规则任何第三方服务都要等到有明确证据证明现在缺了它不行再接入而不是先接上防止以后要用。3. 开发阶段的真实踩坑记录第一个版本的翻车现场这一章我要写得细一点因为开发阶段踩的坑才是第一个App最值钱的收获。很多东西看着是常识但你真正遇到的时候才会知道为什么大家都说纸上得来终觉浅。3.1 拖了两天的环境搭建版本对不上最要命我以前以为开发App最难的是写业务逻辑实际上最先卡住我的是环境搭建。我遇到的情况是脚手架创建工程时自动拉取了工具链结果项目依赖的某个组件库要求一个新版本的SDK我本机的SDK版本没跟上于是我去升级SDK。SDK升级以后模拟器镜像又需要重新下载下载到一半网络中断整个环境就处于一个半新不旧的状态各种匪夷所思的报错轮番出现。这个问题整整折腾了我两天最后怎么解决的把所有工具链卸载干净固定一个官方推荐的稳定版本重新装一遍然后所有依赖版本一律锁死不追新。经过这一遭我养成了一个习惯每新建一个项目第一时间把依赖版本固定下来并且把完整的安装环境写到项目说明里。环境问题看似是小事但它消耗起时间来的效率比写代码高多了。3.2 列表和状态第一个性能瓶颈在这里我第一版用了一套比较基础的跨平台UI框架自带的状态管理方式本来以为数据量很小应该不需要管性能。结果第一个可运行版本出来以后打卡记录列表只有不到一百条数据滚动的时候居然明显掉帧。我当时很困惑一百条数据能卡成这样排查后发现问题根本不在数据量而在列表项本身。我每一条记录都在构建的时候做了一次日期格式化这个格式化操作特别重而且每条记录的笔记内容都直接塞进列表长文本渲染也会拖慢速度。解决方式也简单把格式化好的日期缓存起来列表项里只展示摘要文本完整内容放到详情页。改完以后一百条数据的列表滚动变得非常丝滑。这个坑给我的教训是新手写代码往往会忽略构建函数的开销总觉得这点数据量没事实际上每帧渲染都重建列表项积少成多就成了性能问题。第一次做App一定要记得看一眼列表这种高频渲染组件用能缓存就缓存能拆分就拆分的思路去处理。3.3 真机适配上最容易忽略的三个细节模拟器上看着一切正常的界面换到真机上就会出现各种意外。我遇到最典型的三个问题新手可以重点关注。第一个是屏幕顶部和底部的安全区域。模拟器默认尺寸里看不出问题但真机上有摄像头挖孔、有圆角、有底部手势条如果界面没有做安全区域适配内容就会被直接遮挡。我第一版有个页面底部的保存按钮在模拟器里好端端的真机上就有一截被系统手势条压住了点起来特别难受。第二个是键盘弹出遮挡输入框。在模拟器上键盘弹出往往不会真正模拟出遮挡效果但真机上输入阅读心得时键盘会直接挡住提交按钮用户得先收起键盘才能继续操作体验很割裂。这个问题需要监听键盘弹出事件把输入区域推上去或者让页面滚动到可视区域。第三个是系统字体缩放。用户可以把系统字体调到很大如果布局没有针对动态字体做适配文字就会溢出卡片边界造成整页布局错乱。这三个问题在模拟器上都很难暴露所以我后来的习惯是每完成一个页面立刻做一轮真机适配检查宁可多花一小时也不要攒到上线前一起爆发。3.4 日期、深色模式小问题也能磨死人日期处理是我第一版里最隐蔽的坑。当时我用系统时间直接读取当天日期存到数据库表面上没问题但实际上DateTime在跨时区场景下可能会因为日期格式化的差异出现往前或往后偏移一天的情况。我后来干脆统一用年月日三个字段单独存储所有日期基于本地时区生成彻底避开字符串截取和隐式转换的问题。深色模式也是我开始完全没考虑过的点。用户手机切到深色模式以后我有些页面用的是硬编码的白色背景看过去就是白底白字或者黑底白字交替出现非常刺眼。后来我学着用主题色变量来控制背景和文字颜色做了两套配色方案。做完以后再切深色模式整个App的观感才算正常。4. 上线前的最后一公里从能跑到能发布成品在本地能跑和它能顺利出现在应用商店里中间还隔着一条不小的河。我本来以为代码写完就大功告成了结果上线前的收尾工作每一项都有讲究。4.1 包体优化与启动速度第一版编译出来的安装包体积是28MB这个数字对大型商业App来说不算什么但对我这个只有几个页面的小工具来说实在太臃肿了。我花了一个晚上把没有用到的调试依赖和示例图片全部清掉压缩了所有位图资源重新打包以后体积降到了19MB左右。瘦身的意义不只是省流量更直接影响用户下载意愿一个小工具如果装包太大很多人看到体积就放弃了。启动速度方面我遇到的是首屏白屏问题。App启动以后首帧渲染之前要完成数据库初始化和一些默认配置加载我一开始把这些都放在启动流程里导致冷启动的时候白屏时间特别长。解决办法是把任何不属于首屏渲染的初始化操作延后等首页真正画出来再慢慢做。改完之后启动时间大概缩短了小半秒这个体感差异在真机上很明显。4.2 隐私合规与应用商店审核材料这可能是第一次上架的人最容易低估的部分。应用商店审核不只是看功能好不好用更在意你有没有把该说明的事情说清楚。我提前准备了几样东西用户协议、隐私政策、软件著作权证书、应用图标、展示截图和功能描述。隐私政策不需要写得多华丽但必须把关键信息写明白你的App收集哪些数据、数据用在哪里、用户怎么注销和删除数据。因为我第一版没有后端所有数据都存在本地隐私政策反而特别好写。软件著作权证书要单独说一句它的申请周期比想象中长需要提前规划好时间别等要提审了才去办。我就是在开发后期发现这个事情来不及差点把整体上线时间又拖了一个月后来提前并行处理才赶上。提审过程中我踩过一个具体坑应用截图的分辨率不达标。预览图在后台看是正常的审核环节却直接被驳回理由是截图尺寸不符合要求。我后来去查了应用商店的规范文档逐一对齐了截图要求重新提交以后才通过。这个错误现在回想起来挺冤但确实是自己没仔细读规范。4.3 发布前的自测清单临到提交前我整理了一张发布自测清单一条一条打钩不允许自己用感觉没问题来带过。这张清单不一定适合所有人但对第一次上架的人来说是个有效的兜底手段。类别检查项我的结果功能流程新增书籍、编辑信息、删除记录是否正常通过功能流程日历打卡在不同月份之间切换是否异常通过适配检查小屏、大屏、深色模式、系统字体放大通过体验细节键盘遮挡、按钮点击区域、空状态提示第一次未通过后来修复合规信息隐私政策链接能正常打开、版本号正确通过包名检查包名唯一、签名配置正确通过自测不是为了走形式而是把所有你能控制的风险提前消灭掉。我记得当时自查出两个问题一个是空状态没引导用户第一次打开后完全不知道该做什么另一个是某个按钮的点击区域太小不符合触控规范。这些问题如果在发布后被用户发现就会变成一条条差评但在发布前发现就只是我给自己改几个样式的事。5. 发布后的真实反馈与我的复盘App上架不是结束真正的学习和反馈循环是从上架那一刻才开始的。5.1 上线第一周的数据给了我什么信号我的第一版App上线第一周下载量非常平凡只有不到两百次但这里面有一个数据让我觉得方向是对的次日留存接近三成。对一个没有任何推广资源、也没有社交传播功能的工具类App来说下载量低是常态真正值得关心的是下载了的人愿不愿意第二天再打开。我把下载用户的路径完整看了一遍发现一个明显规律前三天进入App的人完成一次完整打卡的比例很高但很多人第三天之后就消失了。这说明不是核心功能不满意而是没有形成每天打开App的习惯惯性。这让我明确了下一版改进的核心方向不是加功能而是让坚持打卡这个动作更轻、更有正反馈。5.2 用户反馈中最有价值的三类问题第一版上线以后我陆陆续续收到了一些用户反馈虽然数量不多但信息量非常大。我把问题分成三类来看第一类是功能性Bug比如快速连续点击打卡按钮会导致数据重复写入这是个典型的问题说明我在交互上没有做防重复提交。这类问题必须第一时间修它直接影响产品可靠性。第二类是体验性问题有用户反馈说某天忘记打卡只能补一次补完就再也改不了还有人说打卡流程要三个页面有点繁琐。这类问题不致命但决定用户愿不愿意长期使用。第三类是功能建议集中在希望有阅读统计图表和希望支持数据导出上。对我来说这类建议反而不能急着做。反馈的人只是想要这个能力不代表所有人都需要一听到建议就开做很容易被个别用户带着走。问题类型例子处理原则功能性Bug快速点击导致重复记录无条件优先修复体验性问题补卡流程繁琐、入口太深尽早优化但先设计后动手功能建议统计图表、数据导出分析需求样本不急于全做5.3 下一个版本的优先级排序基于上面的判断我给第二版排了一个明确优先级。第一优先是修掉所有已知Bug包括重复提交和个别机型的布局错乱这是信任问题。第二优先是优化打卡路径把补卡操作从三步缩短到一步并且加一个简单的连续阅读天数展示让坚持有了直观反馈。第三优先才是统计图表因为已经有几个用户明确提了而图表的实现难度对于当前的数据量来说其实是可控的。我没有加的第一优先级功能是云端同步和消息推送。原因很简单目前没有足够的用户数据证明他们强烈需要这个能力而一旦上了云端我就要开始处理账号安全、服务成本、数据备份等一系列问题这会彻底改变我更新维护的节奏。在小试牛刀这个阶段保持产品的单纯性反而是一种竞争力。如果你也准备做自己的第一个App我最想说的不是你要选什么技术而是先上架一个最小可用的版本。完成永远比完美重要第一个版本功能少一点也不丢人它能跑通从开发到发布再到用户的完整链路就已经完成了它的历史任务。我当时做第一个App的时候最受益的一个习惯是每次改完代码都把我踩过的最大的坑记到文档里两个月下来这份文档的参考价值比任何教程都高。等你有了一批真实用户之后再回头看会发现那会儿天天纠结的字体、颜色、包体大小都没有用户愿不愿意第二次打开来得重要。

相关新闻

SeaTunnel + Elasticsearch 数据入仓实战:从批量导入到 CDC 的 4 个同步场景完整指南

SeaTunnel + Elasticsearch 数据入仓实战:从批量导入到 CDC 的 4 个同步场景完整指南

SeaTunnel Elasticsearch 数据入仓实战:从批量导入到 CDC 的 4 个同步场景完整指南 【免费下载链接】seatunnel SeaTunnel is a multimodal, high-performance, distributed, massive data integration tool. 项目地址: https://gitcode.com/GitHub_Trending/se/…

2026/10/18 16:13:26 阅读更多 →
DeepSeek本地部署与微调实战:从零到生产级应用

DeepSeek本地部署与微调实战:从零到生产级应用

最近大模型圈子里,DeepSeek的热度一直居高不下。从我自己的实际体验来说,它确实是目前少有的,既能让人在普通消费级显卡上跑起来,又能用API低成本接入到业务里的开源模型。很多朋友问我,网上那么多“从入门到精通”的教…

2026/10/18 16:13:26 阅读更多 →
Mac原生AWQ量化实战:从零手写大模型量化全流程

Mac原生AWQ量化实战:从零手写大模型量化全流程

1. 项目概述:为什么在Mac上“亲手量化”大模型这件事,比你想象中更值得深挖最近在几个技术社区里频繁看到“Mac量化大模型”这个组合词被反复提起——不是“用Mac跑大模型”,也不是“在Mac上部署模型”,而是亲手量化。这个词背后藏…

2026/10/18 16:13:26 阅读更多 →

最新新闻

uview-plus密码切换失效的根因排查与正确修复方案

uview-plus密码切换失效的根因排查与正确修复方案

上周给小程序做登录页,密码框要求支持明文密文切换。组件用的uview-plus,照着文档写了几行代码,结果右上角那个小眼睛点了完全没反应,真机上试了好几次,要么纹丝不动,要么闪一下又弹回密文状态。在项目群里…

2026/10/18 17:04:56 阅读更多 →
多传感器融合三条路线深度对比:前融合、特征级与决策级的信息损耗与工程实践

多传感器融合三条路线深度对比:前融合、特征级与决策级的信息损耗与工程实践

我先把话说在前面:多传感器融合这个主题,市面上讲“算法公式”的教程很多,但真正把前融合、特征级融合、决策级融合这三条路线放在同一个项目里拉通对比、还跑过实车数据的人,不多。这篇文章我不会从教科书定义开始,而…

2026/10/18 17:04:56 阅读更多 →
USB不只是采集画面还能输出显示:从UVC到DP Alt Mode的方案与避坑指南

USB不只是采集画面还能输出显示:从UVC到DP Alt Mode的方案与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:04:56 阅读更多 →
数字IC社招UVM面试高频题拆解与工程实践回答策略

数字IC社招UVM面试高频题拆解与工程实践回答策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:04:56 阅读更多 →
开发板待机功耗超标排查:从芯片睡眠到系统级漏电归因

开发板待机功耗超标排查:从芯片睡眠到系统级漏电归因

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:04:56 阅读更多 →
ROS2小车网页遥控:WebSocket桥接实现低延迟物理控制

ROS2小车网页遥控:WebSocket桥接实现低延迟物理控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:03:56 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →