Unity 2020.3 AndroidX迁移实战:解决APK闪退的完整配置指南
1. 项目概述当Unity遇上AndroidX一场必须打赢的“兼容之战”如果你是一位Unity开发者最近将项目升级到了Unity 2020.3.0 LTS或更高版本并且满怀期待地打包了一个Android APK结果安装到真机上一打开就瞬间闪退那么恭喜你你大概率是撞上了“AndroidX迁移”这堵墙。这绝不是个例而是Unity引擎在2020.3版本中一个标志性的、影响深远的底层变更。简单来说Unity从这个版本开始正式将Android支持库Android Support Library弃用全面转向了AndroidX。这个变动对于追求稳定性和长期支持的LTS版本使用者而言就像在平坦的开发道路上突然设置了一个需要精准操作的关卡配置不对直接“车毁人亡”——表现为APK启动崩溃。我经历过这个升级过程也帮团队里不少同事填过这个坑。表面上看它只是一个构建配置的问题但深究下去它涉及到Unity构建管线、Gradle脚本、Android SDK组件以及第三方插件生态的连锁反应。网上很多零散的帖子可能只告诉你“要勾选某个选项”或“替换某个文件”但为什么这么做不这么做会怎样遇到更复杂的情况如何处理这些才是真正决定你能否顺利过关的关键。这篇指南的目的就是不仅给你一份“操作清单”更要拆解清楚每一步背后的逻辑让你彻底理解从Unity 2020.3开始构建一个稳定Android APK所需要完成的完整配置流程以及如何系统地排查和解决由此引发的闪退问题。2. 核心问题拆解为什么升级到2020.3.0后APK会闪退要解决问题必须先理解问题的根源。Unity 2020.3.0版本中谷歌和Unity共同推动了一项重要的底层更新强制使用AndroidX并移除了对旧版Android Support Library的默认支持。2.1 AndroidX是什么为什么要迁移你可以把Android Support Library理解为一套谷歌官方提供的“兼容性补丁包”。在早期为了让新系统的特性比如Material Design组件能在旧版本Android上运行谷歌发布了这些库。但随着时间推移这个“补丁包”家族变得异常庞大且混乱命名和版本管理都成了问题。AndroidX就是谷歌为了解决这一团乱麻而推出的全新、标准化、版本统一的Android扩展库。它并非全新的东西而是对Support Library的一次彻底重构和重新打包。迁移到AndroidX对于整个Android生态的长期健康和维护性有巨大好处。对于Unity开发者而言这个迁移意味着什么Unity引擎内部以及我们使用的许多第三方Android插件如广告SDK、支付SDK、社交分享SDK等其底层Java/Kotlin代码都可能依赖这些支持库。在2020.3之前Unity默认使用的是Support Library。从2020.3开始Unity的构建系统Gradle默认模板和内部依赖全部切换到了AndroidX。如果你项目中的任何环节尤其是插件还停留在引用旧版Support Library的状态就会在运行时发生冲突最常见的表现就是java.lang.NoClassDefFoundError或java.lang.RuntimeException直接导致应用在启动阶段崩溃也就是我们看到的“闪退”。2.2 闪退的典型触发场景与错误分析闪退通常发生在应用启动的最初几秒甚至在Unity的启动画面Splash Screen出现之前。通过adb logcat抓取日志你可能会看到以下几种关键错误类找不到错误java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/content/FileProvider;这明确指出了运行时在寻找Android Support库中的FileProvider类但系统中只有AndroidX的对应类androidx.core.content.FileProvider因此找不到定义。元数据冲突错误AndroidRuntime: Caused by: java.lang.IllegalArgumentException: androidx.core.app.CoreComponentFactory或在清单文件AndroidManifest.xml合并时关于provider或meta-data的冲突这通常是因为新旧库的配置同时存在。插件初始化失败 某些第三方插件在初始化时由于其内部依赖不兼容会抛出异常导致整个应用进程终止。核心矛盾点Unity构建出的APK其内部环境已经是AndroidX了但项目中包含的某些.aar或.jar插件文件或者其配置仍然指向旧的Support Library。这就好比新装修的房子AndroidX里硬要安装一个只能用老式水管接口Support Library的热水器一开水龙头系统就崩了。3. 完整配置流程从零开始构建一个兼容AndroidX的APK下面是一套经过验证的、系统的配置流程。请严格按照顺序操作并理解每一步的作用。3.1 前期准备Unity项目与环境的检查在开始任何配置之前先打好基础。确认Unity版本确保你确实使用的是Unity 2020.3.0或更高版本。在Unity Editor中点击Help - About Unity查看。安装必要的Android模块打开Unity Hub在你使用的Unity版本右侧点击“设置”图标选择“添加模块”。确保已安装“Android Build Support”及其下的“OpenJDK”、“Android SDK NDK Tools”和“Gradle”。使用Unity自带的JDK和Gradle能减少很多因环境变量导致的问题。清理旧构建残留在构建前手动删除项目根目录下的Library、Temp、Obj文件夹关闭Unity后操作以及之前构建生成的Build文件夹。这可以避免一些缓存导致的诡异问题。3.2 核心步骤一Player Settings中的关键设置打开File - Build Settings选择Android平台点击Player Settings。Other Settings 区域Minimum API Level建议设置为API Level 21 (Android 5.0)或更高。AndroidX在低版本API上可能需要额外的兼容性组件从21开始更稳定。Target API Level设置为你要测试或发布设备对应的最新API级别如API Level 33。这通常与Google Play的要求有关。Publishing Settings 区域这是重中之重这个区域包含了解决AndroidX兼容性问题的核心选项。你需要勾选以下两个关键选项Custom Main Gradle Template勾选此选项。Unity会在Assets/Plugins/Android目录下生成一个mainTemplate.gradle文件。这个文件允许你自定义项目级的Gradle构建配置是添加依赖、解决冲突的主要入口。Custom Gradle Properties Template勾选此选项。同样会在Assets/Plugins/Android下生成gradleTemplate.properties文件。用于配置Gradle构建的属性例如启用Jetifier。重要提示勾选这两个选项后Unity将不再使用其内置的、封装的Gradle配置转而使用你提供的模板文件。这给了你极大的灵活性但也意味着你需要承担更多的配置责任。3.3 核心步骤二配置Gradle模板以启用Jetifier这是解决兼容性问题的核心操作。Jetifier是一个Gradle插件它的作用是在构建过程中自动将第三方库中对旧版Support Library的依赖引用重写为对AndroidX的等价引用。简单说它就是一个“实时翻译官”。勾选Custom Main Gradle Template后找到生成的Assets/Plugins/Android/mainTemplate.gradle文件。用任何文本编辑器如VSCode、Notepad打开它。在文件顶部或dependencies区块之前添加Jetifier工具的依赖。通常添加在allprojects块内是最稳妥的。找到allprojects块修改如下allprojects { repositories { google() mavenCentral() // 其他仓库... } // 添加以下配置以启用Jetifier configurations.all { resolutionStrategy { force androidx.core:core:1.6.0 // 强制指定一个核心版本避免冲突 force androidx.appcompat:appcompat:1.3.1 force androidx.fragment:fragment:1.3.6 } } }但更常见和推荐的方法是在buildscript的dependencies中添加Android Gradle插件它内置了Jetifier支持。确保你的buildscript部分类似这样buildscript { repositories { google() mavenCentral() } dependencies { // 使用一个较新且稳定的Android Gradle插件版本 classpath com.android.tools.build:gradle:4.2.2 // 注意版本号很关键 // 如果你使用了Firebase或其他特定插件可能还需要添加其他classpath } }配置gradleTemplate.properties。打开Assets/Plugins/Android/gradleTemplate.properties文件在末尾添加以下关键行android.useAndroidXtrue android.enableJetifiertrueandroid.useAndroidXtrue告诉构建系统本项目使用AndroidX。android.enableJetifiertrue启用Jetifier工具自动迁移第三方库的依赖。3.4 核心步骤三处理第三方插件最关键也是最易出错的环节绝大多数闪退问题都源于第三方插件。你需要对项目中的每一个Android插件Assets/Plugins/Android目录下的.aar,.jar, 或包含AndroidManifest.xml的文件夹进行审查。识别插件检查Assets/Plugins/Android目录。常见的插件如Google Play Games, Google Mobile Ads (AdMob), Firebase, Facebook SDK, 各种渠道的SDK等。检查插件版本访问插件的官方文档或发布说明确认其是否明确支持AndroidX。对于Unity Asset Store的插件查看其描述页面或评论区的更新记录。优先使用最新版本的插件。更新或替换插件如果插件提供AndroidX版本直接下载并替换旧版本。删除旧的插件文件导入新的。如果插件未明确支持AndroidX但社区有解决方案有时你需要手动编辑插件内的.aar文件解压后修改其中的AndroidManifest.xml或.pro文件但这需要较高的技巧。更常见的是开发者会提供一个“适配AndroidX”的补丁包或修改版。使用Dependency Resolution (推荐)对于通过Unity Package Manager或一些现代插件导入的依赖如Firebase它们通常会在mainTemplate.gradle中通过implementation语句添加远程依赖。确保这些远程依赖的版本是支持AndroidX的。例如Firebase的BoMBill of Materials版本需要较新的。处理插件冲突当多个插件依赖了AndroidX中同一个库的不同版本时会导致冲突。你需要在mainTemplate.gradle的dependencies块中使用resolutionStrategy来强制指定一个版本。例如如果多个插件对androidx.appcompat:appcompat有版本冲突可以添加configurations.all { resolutionStrategy { force androidx.appcompat:appcompat:1.3.1 // 强制其他有冲突的库版本 } }3.5 核心步骤四构建、测试与日志排查完成以上配置后尝试构建APK。构建APK在Build Settings中点击Build。观察构建过程Console窗口是否有错误或警告。特别注意关于“duplicate classes”或“conflict”的警告。安装与运行将APK安装到真机建议使用Android 9.0或以上的设备进行测试兼容性问题更易暴露。抓取日志如果仍然闪退必须使用adb logcat抓取日志。这是定位问题的唯一可靠方法。连接手机打开命令行终端。输入adb logcat -c清除旧日志。输入adb logcat -v time crash_log.txt开始记录日志到文件。在手机上启动你的应用等待闪退发生。回到命令行按CtrlC停止记录。打开crash_log.txt搜索FATAL EXCEPTION、AndroidRuntime、NoClassDefFoundError、ClassNotFoundException等关键词。错误堆栈会明确指出是哪个类或哪个插件出了问题。4. 常见疑难问题与深度排查技巧即使按照流程操作你可能还是会遇到一些棘手的问题。以下是一些常见场景及解决方案。4.1 构建成功但安装后秒退logcat无明确错误这种情况非常令人头疼。可以尝试以下步骤检查AndroidManifest合并结果在Player Settings - Publishing Settings中勾选Build下的Create symbols.zip调试用。构建后在临时构建目录通常位于项目目录/Temp/gradleOut/找到合并后的AndroidManifest.xml。检查其中是否有重复或冲突的application、activity、provider标签特别是android:name属性指向了不存在的Support库类。启用详细日志在mainTemplate.gradle中于android块内增加调试配置android { ... buildTypes { debug { debuggable true jniDebuggable true // 启用更详细的日志 buildConfigField boolean, ENABLE_DEBUG_LOG, true } release { minifyEnabled false // 首次排查时先关闭代码混淆 ... } } }同时在Unity的C#代码中确保Debug.unityLogger.logEnabled在Android上为true。逐一切除插件这是一个笨办法但极其有效。创建一个干净的新场景只放一个空物体和最简单的脚本。然后将Assets/Plugins/Android目录重命名如改为Android_Backup清空它。逐个将你认为必要的插件文件夹或文件复制回来每复制一个就构建测试一次。直到找到那个导致闪退的“罪魁祸首”。4.2 与特定SDK如Facebook、Adjust的兼容性问题一些大型SDK有自己的初始化流程和深层依赖。Facebook SDK旧版本的Facebook Unity SDK与AndroidX存在严重兼容问题。务必升级到最新版v15.0.0以上通常较好。如果升级后仍有问题检查其提供的AndroidManifest.xml是否包含旧的Support库引用有时需要手动移除或注释掉。Firebase强烈建议通过Unity Package Manager (UPM)或Firebase Unity SDK 的官方安装工具来导入。它会自动处理复杂的Gradle依赖和AndroidX兼容性。手动导入.unitypackage极易出错。其他SDK查阅其官方文档的“AndroidX Migration”或“Unity 2020.3”章节。很多SDK的官网都有专门的说明。4.3 Gradle版本与Android Gradle插件版本不匹配在mainTemplate.gradle中buildscript里定义的com.android.tools.build:gradle版本即Android Gradle插件版本与Gradle发行版Wrapper版本有严格的对应关系。不匹配会导致构建失败或不可预知的行为。查看当前Gradle版本Unity会使用自带的Gradle但你可以在Preferences - External Tools下看到路径。或者查看项目目录/Assets/Plugins/Android/gradleTemplate.properties中是否有org.gradle.java.home设置。匹配版本一个比较稳定的组合是Android Gradle Plugin:4.2.2Gradle Wrapper:6.7.1(在gradle/wrapper/gradle-wrapper.properties中指定distributionUrl) 你可以在mainTemplate.gradle同目录下创建gradle/wrapper/gradle-wrapper.properties文件来指定Wrapper版本但Unity可能优先使用自带的。更稳妥的做法是使用Unity推荐的版本即保持classpath com.android.tools.build:gradle:4.2.2并使用Unity 2020.3自带的Gradle通常是6.7.1或相近版本。4.4 资源文件或Native Code (JNI) 引起的崩溃如果所有Java层面的配置都正确但崩溃发生在原生层C/C错误日志中会出现signal(如SIGSEGV) 或backtrace包含.so库的信息。检查IL2CPP Stripping如果使用了IL2CPP后端在Player Settings - Publishing Settings - Managed Stripping Level尝试将其设置为Low或Minimal。过度的代码裁剪可能会移除Native插件需要的托管代码桥接部分。检查ABI兼容性在Player Settings - Other Settings - Target Architectures中确保你选择的ABI如ARMv7, ARM64与你的所有Native插件.so文件支持的ABI匹配。如果插件只提供了ARMv7的库而你只勾选了ARM64运行在64位设备上就会因找不到库而崩溃。使用Android Studio分析将Unity导出的Gradle项目在Build Settings中勾选Export Project导入Android Studio然后直接使用Android Studio进行编译和调试可以获得更详细的错误信息特别是对于原生代码和资源合并问题。5. 总结与最佳实践建议经过以上流程你应该能解决绝大部分Unity 2020.3的AndroidX兼容性问题。最后分享几条从实战中总结出的经验保持环境干净统一团队开发时尽量统一Unity版本、JDK版本、Android SDK版本以及关键插件的版本。使用版本控制工具如Git管理Assets/Plugins/Android目录和mainTemplate.gradle等配置文件避免成员间配置不一致。插件管理原则如无必要勿增实体。谨慎添加Android插件每个插件都是潜在的兼容性风险源。优先选择官方维护、更新活跃、明确支持AndroidX和最新Unity版本的插件。构建流程标准化考虑使用命令行构建Unity -batchmode -quit -executeMethod并配合CI/CD工具如Jenkins, GitHub Actions。在CI脚本中固定所有环境变量和工具版本确保每次构建的环境一致。分层排查法遇到问题按照“Unity设置 - Gradle配置 - 插件更新 - 代码/资源”的顺序由外向内、由框架向具体逐层排查。善用adb logcat它是你最好的朋友。善用官方资源Unity官方文档的“Android环境配置”和“Android迁移指南”章节时常更新。遇到问题时先去Unity官方论坛和问题追踪器Issue Tracker搜索相关关键词很可能已经有人遇到了同样的问题并提供了解决方案。迁移到AndroidX虽然是初期的一道坎但它是迈向现代Android开发生态的必经之路。一旦配置妥当项目在未来的可维护性和对新Android特性的支持上都会更有保障。这个过程就像给项目做一次“底盘升级”虽然折腾但升级完后跑起来会更稳、更顺。

相关新闻

如何用ComfyUI-KJNodes快速搭建AI图像工作流:新手必看的10个实用技巧

如何用ComfyUI-KJNodes快速搭建AI图像工作流:新手必看的10个实用技巧

如何用ComfyUI-KJNodes快速搭建AI图像工作流:新手必看的10个实用技巧 【免费下载链接】ComfyUI-KJNodes Various custom nodes for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-KJNodes 你是否觉得ComfyUI的节点连接太复杂?想要…

2026/10/17 9:10:41 阅读更多 →
FPGA流水灯设计实战:从Verilog代码到硬件调试全流程解析

FPGA流水灯设计实战:从Verilog代码到硬件调试全流程解析

1. 从闪烁到流动:一个FPGA工程师的LED流水灯实战心路我至今还记得第一次让LED灯在电路板上“流动”起来时的兴奋感。那是在一个深夜,面对着一块Altera Cyclone IV的开发板,当Modelsim里仿真的波形终于和板卡上8颗蓝色LED的跑马灯效果严丝合缝…

2026/10/17 9:10:48 阅读更多 →
从ShaderForge迁移到ASE:在URP/HDRP中构建可视化着色器的完整指南

从ShaderForge迁移到ASE:在URP/HDRP中构建可视化着色器的完整指南

1. 项目概述:为什么是时候告别ShaderForge,拥抱ASE了?如果你还在用ShaderForge捣鼓Unity的材质,尤其是想适配URP或者HDRP,那我得说,兄弟,你该升级你的工具箱了。这感觉就像别人都在用智能手机了…

2026/10/17 9:11:24 阅读更多 →

最新新闻

安全审计实战方法论:从流程设计到配置核查与代码审查

安全审计实战方法论:从流程设计到配置核查与代码审查

1. 项目概述1.1 安全审计技能是什么,解决了什么问题先聊聊我在安全这条路上摸爬滚打多年的一个体会:很多人一听到“安全审计”四个字,脑子里蹦出来的可能是“查日志”“翻漏洞”“写报告”这种零散画面。但真到项目里、真到客户现场&#xff…

2026/10/17 23:18:19 阅读更多 →
AI网关安全整改:日志脱敏、SM4加密与审计追踪实践指南

AI网关安全整改:日志脱敏、SM4加密与审计追踪实践指南

这周我帮一个业务方复盘AI能力上线前的改造,截点就卡在“网关没开”。模型接口早早通了,日志里全是用户明文,链路传输也没有密钥层加密,审计出口更是一片空白。这种事一旦等扫描结果落下来再处理,基本就是业务窗口白等…

2026/10/17 23:18:19 阅读更多 →
基于OpenFHE的运行时同态计算表达式设计与实践

基于OpenFHE的运行时同态计算表达式设计与实践

做隐私计算的朋友,对 OpenFHE 这个名字应该不陌生。它是目前开源社区里维护非常活跃的全同态加密库,覆盖了 BFV、BGV、CKKS、FHEW/TFHE 等多套主流方案。我最早接触它是在一个多方数据协同的试验项目里,要在不可信环境下对加密后的样本做统计…

2026/10/17 23:18:19 阅读更多 →
DRF渲染器全解析:原理、配置与自定义实战

DRF渲染器全解析:原理、配置与自定义实战

第一次接触 Django REST framework 的人,十有八九会被 Renderers 渲染器绕晕。明明视图里写的是return Response({...}),结果浏览器打开是一个可交互的调试页面,用 requests 请求拿到的又是 JSON,同一个接口凭什么能自动切换格式&…

2026/10/17 23:18:19 阅读更多 →
最大连续子序列与最大子段和:动态规划实战与OJ代码详解

最大连续子序列与最大子段和:动态规划实战与OJ代码详解

1. 写在最前:最大连续子序列为什么值得单独写一篇1.1 这道题是什么刷算法题绕不开最大连续子序列,某OJ的1231号题把这个经典问题又加了点佐料:不只是让你求最大连续子段和,还要把最大连续子序列对应的首尾元素输出出来。很多人第一…

2026/10/17 23:18:19 阅读更多 →
查找算法全解析:从顺序查找到B+树,工程选型与避坑指南

查找算法全解析:从顺序查找到B+树,工程选型与避坑指南

很多人在学数据结构的时候,会把"查找"这一章当成一堆零散算法的集合:顺序查找、折半查找、哈希、二叉排序树……背完ASL公式就扔到一边。但我在实际做开发之后回头看,这一章恰恰是全书最容易和工程经验挂钩的地方——你写的每一条S…

2026/10/17 23:17:11 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 14:23:36 阅读更多 →