Android分区体系全解析:从启动流程到动态分区与刷机实战
1. 项目概述为什么你需要了解Android分区如果你是一名Android开发者、ROM爱好者或者只是对手机系统底层感到好奇那么“Android系统的分区”这个话题绝对是你绕不开的基石。很多人刷机变砖、升级失败或者想给手机“瘦身”却无从下手根源往往是对手机内部这套精密的“文件系统布局”一无所知。这就像你买了一栋精装修的房子却不知道承重墙在哪、水管电路怎么走一旦想自己动手改造风险可想而知。Android分区简单说就是你的手机存储空间包括内置eMMC/UFS闪存被划分成的一个个独立区域。每个分区都有其特定的使命、格式和权限共同构成了Android系统启动、运行和存储数据的骨架。理解它你就能明白为什么系统更新需要重启、为什么双清能解决大部分软件故障、为什么有些文件删不掉以及如何安全地进行深度定制。今天我就结合自己多年折腾手机和开发的经验带你彻底搞懂Android分区体系从A/B分区到动态分区从刷机原理到数据安全让你从“知其然”到“知其所以然”。2. 核心分区详解从Boot到UserdataAndroid的分区体系随着版本迭代不断进化但其核心逻辑一直很清晰各司其职相互隔离确保系统从加电到开机的每一步都可靠。我们从一个经典的、非A/B分区的传统布局开始拆解。2.1 启动相关分区系统生命的起点手机的启动是一个精密的多阶段接力赛每个分区负责一个赛段。boot分区这是整个启动流程的“第一棒”。它包含了Linux内核kernel和一个最小的根文件系统镜像ramdisk。当你按下电源键引导加载程序Bootloader解锁后首先加载的就是boot分区。ramdisk里包含了挂载其他分区所必需的最初驱动和工具比如init进程。你可以把它想象成电脑的“Windows PE”微型系统它的唯一任务就是为启动真正的系统做准备。注意boot分区是刷机时最常操作的分区之一。刷入一个不兼容的boot.img例如内核版本不匹配会导致手机卡在开机第一屏Fastboot模式或Bootloop这是最常见的“变砖”原因之一。recovery分区这是一个独立的、迷你版的Android系统它有自己的内核和简易UI。它的核心功能是系统维护和更新。当你在系统设置里点击“系统更新”或者手动进入Recovery模式通常是音量上电源键系统就会引导至这个分区。官方的Recovery通常只支持安装经过签名的OTA包、清除缓存和数据。而第三方Recovery如TWRP功能则强大得多支持备份整个系统、安装任意ZIP包、文件管理等是玩机爱好者的必备工具。vbmeta分区这是Android Verified BootAVB 2.0的关键。它包含了用于验证其他分区如boot、system、vendor完整性的公钥和描述符。在启动时Bootloader会校验vbmeta的签名然后根据其中的信息去验证后续分区的哈希值或签名。如果校验失败设备会提示“系统损坏”并阻止启动这是防止系统被恶意篡改的重要安全机制。对于想要解锁Bootloader和刷机的用户通常需要禁用或替换vbmeta的验证密钥。2.2 系统与供应商分区Android的“身躯”启动流程完成后就需要加载主要的系统文件了。system分区这是传统Android系统的核心所在包含了Android框架、系统应用如设置、拨号盘、库文件等所有只读的系统组件。在Android 10以前它通常是一个巨大的ext4格式镜像。因为它是只读的所以保证了系统核心的纯净与稳定用户无法直接修改病毒也难以侵入。系统更新OTA本质上就是下载一个新的system镜像来替换旧的。vendor分区这是硬件抽象层HAL和芯片厂商驱动、固件的大本营。由于Android设备硬件碎片化严重高通、联发科、三星等芯片厂商提供的底层驱动和硬件适配代码都放在这里。将vendor从system中分离出来是“Project Treble”项目的重要成果它使得芯片厂商的更新可以独立于Android系统版本进行大大加快了设备获得新系统版本的速度。product、system_ext分区这是Android 10之后引入的进一步模块化设计。product分区用于存放设备制造商OEM或运营商特定的应用和定制内容。system_ext则用于存放一些介于核心系统(system)和厂商(vendor)之间的扩展组件。这种设计让系统层次更清晰更新更灵活。2.3 数据与缓存分区用户的“自留地”系统准备好了就该为用户的数据和应用提供空间了。userdata分区这是手机上最大、也是最重要的一个分区格式通常是f2fs或ext4。所有用户的个人数据都存储于此你安装的每一个应用/data/app、应用产生的所有数据/data/data、你的照片、音乐、下载的文件/data/media/0即内部存储的根目录等等。在Recovery中执行“清除数据/恢复出厂设置”就是格式化这个分区但通常会保留内部存储/media目录。正因如此它也是加密的重点区域现代Android设备默认都会对userdata进行全盘加密或文件级加密。cache分区顾名思义这是一个缓存区。用于存放系统OTA升级包、应用运行时产生的临时缓存等。它的内容在重启或需要空间时可以被自动清理。在Recovery中“清除缓存”操作就是清空这个分区常用于解决一些升级后或应用运行时的诡异问题而且通常不会丢失个人数据是安全的问题排查第一步。misc分区一个小而关键的分区用于在Bootloader、Recovery和主系统之间传递一些简单的状态信息。例如当你选择“重启到Recovery模式”时系统会向misc分区写入一个指令然后重启Bootloader读取到这个指令后就会直接引导至recovery分区而不是boot分区。3. 现代分区方案演进A/B分区与动态分区随着用户对系统无缝更新和安全性要求的提高传统的分区布局暴露出一些问题OTA更新时设备会有一段时间不可用“正在优化应用”更新失败可能导致无法启动。于是更先进的方案应运而生。3.1 A/B无缝分区机制详解A/B分区也叫无缝更新是Android自7.0开始引入并逐步普及的方案。它的核心思想是“冗余备份”和“原子切换”。工作原理关键分区主要是boot、system、vendor有时包括radio等都拥有两份完全相同的拷贝A槽slot_a和B槽slot_b。你的设备当前只从其中一个槽位比如A槽启动和运行。当系统下载OTA更新包后会在后台悄悄地更新另一个未使用的槽位B槽中的所有镜像。这个过程在系统运行时进行用户完全无感。更新完成后重启时Bootloader会根据misc分区或特定指令的引导切换到已经更新好的新槽位B槽启动。如果启动成功那么B槽就变为活动槽位如果启动失败比如卡在开机动画设备会自动回滚到之前正常的A槽启动从而保证设备始终可用。这极大地提高了更新的成功率和用户体验。实操影响对用户更新速度更快重启后几乎无需等待“优化应用”更新失败风险极低。对开发者/玩机者操作变得更复杂。刷机时需要指定目标槽位--slotall或--slota/b。在Fastboot模式下bootloader、radio等分区名后会自动附带_a或_b后缀如boot_a。如果你只刷了一个槽位重启后务必确保从正确的槽位启动否则会回滚。实操心得在已经启用A/B分区的设备上刷入第三方Recovery如TWRP时传统方法可能失效因为Recovery镜像现在被集成在boot分区里称为recovery ramdisk。你需要刷入特定的、支持A/B分区的TWRP镜像或者使用fastboot flash boot twrp.img命令这会替换掉当前槽位的boot分区包含Recovery操作前务必查清你设备的确切情况。3.2 动态分区打破分区墙的灵活性革新在Android 10之前每个分区的大小是在出厂时就静态烧写在分区表里的。这导致了很多问题system分区给大了浪费空间给小了又可能装不下后续的大版本更新vendor和product分区的大小也很难预先精确规划。动态分区Dynamic Partitions从Android 10开始引入它彻底改变了这一局面。它基于Linux内核的dm-linear和dm-bow设备映射器驱动在底层创建一个叫做super的分区在分区表中可见。这个super分区是一个巨大的、连续的逻辑容器。核心机制逻辑分区在super分区内部system、vendor、product、system_ext等不再是以往独立的物理分区而是变成了“逻辑分区”。它们共享super分区的总空间池。动态调整在OTA更新时更新工具可以动态地调整这些逻辑分区的大小和布局无需改变底层物理分区表。例如新版本可能需要更大的system空间但vendor可以缩小一点工具会在super内部重新划分边界。只读快照为了确保更新的原子性和安全性动态分区使用了用户空间快照。在更新过程中它会为逻辑分区创建快照所有写入操作先发生在快照上只有在验证整个更新包无误后才会提交更改切换快照指针。这类似于数据库的事务机制保证了即使更新中断原有系统依然完好。对用户和开发者的意义空间利用率高减少了因分区大小固定造成的空间浪费。更新更灵活OEM可以更自由地分配系统组件所需空间。操作变化在Fastboot模式下你不能再直接使用fastboot flash system system.img这样的命令因为物理的system分区已经不存在了。取而代之的是你需要刷入完整的super镜像或者使用fastboot的新命令如fastboot flash或fastboot update配合动态分区感知的刷机工具包。第三方Recovery也需要特别适配才能正确读写super分区内的逻辑卷。4. 分区操作实战查看、备份与刷写指南了解了理论知识我们来看看如何实际操作这些分区。请务必注意以下操作有一定风险特别是写操作可能导致数据丢失或设备变砖操作前请备份重要数据并确认操作步骤。4.1 如何查看设备的分区信息在已Root的Android设备上最直接的方式是查看分区表。# 通过ADB Shell连接设备后 su # 获取Root权限 ls -l /dev/block/by-name/ # 查看所有按名称链接的分区 cat /proc/partitions # 查看内核识别的分区信息块设备大小 ls -l /dev/block/platform/*/by-name/ # 有些设备路径略有不同你会看到一长串类似boot、system、userdata、vendor的符号链接它们指向/dev/block/sda1、sda2这样的实际块设备。对于A/B分区设备你通常会看到boot_a、boot_b、system_a、system_b这样的命名。要查看当前活动的槽位可以getprop ro.boot.slot_suffix # 返回 _a 或 _b在Fastboot模式下手机重启到bootloader你可以使用电脑端的fastboot命令来获取信息fastboot getvar all # 获取所有变量其中会包含 current-slot:a/b 等信息 fastboot devices # 确认设备连接4.2 分区的备份与恢复备份分区是玩机前最重要的保险措施。我们通常备份最关键的分区。1. 备份boot分区boot分区包含了内核和初始内存盘备份它等于备份了当前系统的启动能力。# 在已Root的设备ADB Shell中 dd if/dev/block/by-name/boot of/sdcard/boot_backup.img # 对于A/B设备备份当前槽位例如A槽 dd if/dev/block/by-name/boot_a of/sdcard/boot_a_backup.img2. 备份recovery分区如果你想保留当前的Recovery环境。dd if/dev/block/by-name/recovery of/sdcard/recovery_backup.img3. 备份vbmeta分区如果你想彻底禁用验证启动可能需要先备份原版。dd if/dev/block/by-name/vbmeta of/sdcard/vbmeta_backup.img重要警告userdata分区通常非常大几十GB到几百GB直接用dd备份到内部存储是不现实的而且会包含大量私人数据。备份个人数据应该使用同步工具、云服务或Recovery模式下的数据备份功能如TWRP的Backup它可以选择性备份Data分区且通常能排除媒体文件。恢复分区就是将备份的镜像文件写回去使用dd命令时只需将if输入文件和of输出文件参数对调即可但务必确保目标分区名称绝对正确写错分区会导致设备无法启动。dd if/sdcard/boot_backup.img of/dev/block/by-name/boot4.3 使用Fastboot刷写分区这是最常用、最底层的刷机方式需要解锁Bootloader。刷写单个分区fastboot flash boot boot.img # 刷入boot镜像 fastboot flash system system.img # 刷入system镜像非动态分区设备 fastboot flash recovery twrp.img # 刷入第三方Recovery fastboot flash vbmeta vbmeta.img # 刷入vbmeta镜像如禁用验证对于A/B设备如果你想同时更新两个槽位可以fastboot flash boot_a boot.img fastboot flash boot_b boot.img # 或者使用 --slotall 参数取决于fastboot版本和设备支持 fastboot flash boot --slotall boot.img刷写动态分区设备对于使用动态分区的设备刷写system、vendor等需要刷入完整的super镜像或者使用包含dynamic_partitions_op_list的OTA包。# 刷入完整的super分区镜像通常很大几GB fastboot flash super super.img # 或者更常见的使用厂家提供的完整线刷包里面包含flash-all.sh/bat脚本清除分区在刷入新系统前有时需要清除分区。fastboot erase userdata # 清除用户数据恢复出厂设置 fastboot erase cache # 清除缓存分区 fastboot format:ext4 userdata # 格式化userdata分区为ext4格式如果分区损坏5. 常见问题与深度排查指南在操作分区时你几乎一定会遇到各种问题。这里我整理了一份从易到难的排查清单很多都是我自己踩过的坑。5.1 基础问题速查表问题现象可能原因排查与解决思路刷机后卡在Fastboot界面1.boot分区镜像损坏或不兼容。2. 设备启用了AVB验证刷入了未签名的镜像。3. A/B设备刷错了槽位。1. 重新下载或提取正确的boot.img并刷入。2. 尝试刷入一个禁用了验证的vbmeta.img命令fastboot flash vbmeta vbmeta.img注意此镜像可能需单独寻找或生成。3. 在Fastboot模式下切换槽位尝试启动fastboot set_active other然后fastboot reboot。刷机后卡在开机动画Bootloop1.system、vendor等系统分区镜像与boot分区内核不匹配。2. 动态分区设备刷写super镜像不完整或错误。3. Magisk模块冲突或系统级修改导致。1. 确保刷入的boot.img、system.img等来自同一个完整的ROM包。2. 重新刷写完整的线刷包。3. 如果能进入Recovery尝试清除/data分区或卸载最近安装的Magisk模块。无法进入Recovery模式1.recovery分区被损坏或覆盖在A/B设备上Recovery可能集成在boot中。2. 按键组合不对或时机不对。3. 设备启用了“OEM解锁”或Bootloader被重新上锁。1. 重新刷入正确的Recovery镜像。对于A/B设备使用fastboot flash boot twrp.img。2. 查阅设备特定按键组合通常是音量上电源多尝试几次。3. 在开发者选项中确认“OEM解锁”已开启。在Fastboot模式用fastboot flashing unlock解锁会清除数据。设备存储空间显示异常1.userdata分区文件系统错误f2fs/ext4损坏。2. 分区表混乱或super分区动态分区错误。1. 尝试在Recovery中格式化/data分区会丢失所有数据。2. 使用厂家官方线刷工具如小米的MiFlash、三星的Odin重刷完整固件这会重建整个分区表。OTA更新失败1. 系统分区被修改Root、Magisk、自定义Recovery。2. 当前系统版本与OTA包基线版本不匹配。3.cache分区空间不足。1. 恢复原版boot.img和recovery.img。使用Magisk的“卸载-恢复原厂镜像”功能。2. 下载完整包而非增量OTA包进行更新。3. 在Recovery中清除cache分区。5.2 高级故障排查分区表损坏与救砖当出现“无法识别分区”、“分区大小为0”等极端情况时可能涉及分区表损坏。1. 使用官方深刷工具这是最有效、最安全的方法。各大厂商华为的eRecovery/Hisuite、小米的MiFlash、三星的Odin、一加的MSM工具都提供了强制恢复模式的深刷工具。这些工具通过特定的端口如9008 EDL模式直接与设备底层通信可以无视当前系统状态重新写入包括分区表在内的所有原始固件。操作前务必下载与设备型号完全一致的官方固件包。2. 手动修复分区表高风险仅限高手在某些MTK或高通设备上如果知道原始分区表布局可以通过fastboot或MTK Client等工具手动创建分区。例如使用fastboot命令fastboot create-logical-partition product 0x1000000 # 创建一个名为product大小为16M的逻辑分区示例但这需要极其精确的分区名称、大小和顺序信息通常从同型号设备的/proc/partitions或官方刷机包的分区文本文件中获取一步出错就可能彻底变砖。3. 关于“9008模式”高通芯片的设备在分区表严重损坏时往往能进入9008 EDL紧急下载模式。在此模式下电脑上的深刷工具可以将设备识别为一个纯粹的存储端口直接写入整个闪存镜像。进入方法因设备而异通常是关机状态下长按特定的按键组合如音量上音量下插入USB。终极建议对于99%的用户当遇到无法通过常规Recovery或Fastboot解决的分区级问题时立即停止任何猜测性操作。第一时间去设备官方论坛、XDA Developers论坛寻找对应型号的官方线刷包和救砖教程严格按照教程操作。盲目尝试网上不针对型号的“通用救砖命令”是让手机从“半砖”变成“全砖”的最快途径。

相关新闻

m4s转mp4零失败自查手册:m4s-converter把B站缓存还原成通用视频

m4s转mp4零失败自查手册:m4s-converter把B站缓存还原成通用视频

m4s转mp4零失败自查手册:m4s-converter把B站缓存还原成通用视频 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter 是一个…

2026/10/2 14:55:00 阅读更多 →
# 如何把 AI 驯成靠谱的「开发同事」?|AI 游戏开发(三):原子任务 + RED/GREEN + 协作记录

# 如何把 AI 驯成靠谱的「开发同事」?|AI 游戏开发(三):原子任务 + RED/GREEN + 协作记录

如何把 AI 驯成靠谱的「开发同事」?|AI 游戏开发(三):原子任务 RED/GREEN 协作记录📚 系列第 3 篇 / 共 6 篇 | 项目:《全职炒股》| 技术栈:C# Unity 6000…

2026/10/5 17:44:38 阅读更多 →
编码智能体CV任务实测:从图像处理到运动检测的代码生成能力评估

编码智能体CV任务实测:从图像处理到运动检测的代码生成能力评估

1. 从“写代码”到“看世界”:编码智能体的视觉任务能力边界实测 最近几个月,编码智能体(Coding Agent)这个概念在开发者圈子里火得不行。从Cursor到Claude Code,再到各种开源方案,大家都在讨论AI能不能真正…

2026/10/8 19:09:54 阅读更多 →

最新新闻

风电水电联合调度优化算法与工程实践

风电水电联合调度优化算法与工程实践

1. 项目背景与核心价值去年参与某省级电网清洁能源消纳项目时,我第一次接触到风-水联合调度这个课题。当时面对风电出力的强随机性和水电调节的滞后性,团队在制定优化运行方案时遇到了不少挑战。这个经历让我深刻认识到:在双碳目标下&#xf…

2026/10/14 2:21:24 阅读更多 →
从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

1. 为什么我最终把数据库建模从商业软件迁到了PDMan做后端开发时间长了,数据库建模这件事几乎绕不开。早些年团队里清一色用PowerDesigner,画物理模型、生成DDL、导出字段文档,一套流程走下来确实顺手。但问题也很明显:正版授权费…

2026/10/14 2:21:24 阅读更多 →
微信小程序仿智行火车票开发实战:云开发+数据离线化方案

微信小程序仿智行火车票开发实战:云开发+数据离线化方案

简介:本资源是一套完整的微信小程序仿智行火车票12306系统实战项目,面向Java后端与小程序前端初学者及全栈学习者,聚焦铁路订票核心业务场景,涵盖用户查询、车次管理、订单生成等全流程功能实现。项目采用SSM(SpringSp…

2026/10/14 2:21:23 阅读更多 →
RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

简介:这份资源是面向需要在网页中播放RTMP流媒体的开发者与运维人员的一套Flash播放插件实现方案,核心解决旧系统或特定场景下通过Flash技术播放RTMP直播、点播流的问题。压缩包共5个文件,约1.15MB,包含2个swf播放器与安装检测组件…

2026/10/14 2:21:23 阅读更多 →
AI编程助手代码质量救星:TypeScript静态类型约束实战

AI编程助手代码质量救星:TypeScript静态类型约束实战

AI 编程助手越帮越乱,这个话题我最近真的是感同身受。我们团队接入 AI 编程助手之后,合并请求里的代码量倒是上去了,可编译期错误非但没减少,反而冒出来一批"语法完全合法、类型对不上、一跑就崩"的代码。后来大家坐下来…

2026/10/14 2:21:23 阅读更多 →
LaTeX 2025环境配置:texlive + TeXstudio

LaTeX 2025环境配置:texlive + TeXstudio

文章目录Latex2025环境配置一、LaTeX 简介1.1 什么是 LaTeX?1.2 为什么使用 LaTeX?1.3 如何开始使用 LaTeX?二、texlive下载安装2.1 texlive下载2.2 texlive安装2.3 常见问题2.3.1 用管理员权限打开install-tl-windows.bat 报错2.3.2 Latex安…

2026/10/14 2:20:23 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →