<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>KFACBT 的博客</title><description>Anyway, keep learning.</description><link>https://blog.gytxtx.top/</link><language>zh-CN</language><item><title>从 MkDocs 到 Astro</title><link>https://blog.gytxtx.top/article/2026/10/mkdocs-astro/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/10/mkdocs-astro/</guid><description>聊聊 Material for MkDocs 的维护现状、RSS 与文章摘要的使用痛点，以及我为什么决定摆脱现有主题的设计限制，重新打造自己的个人博客。</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本站之前一直使用 MkDocs 框架和 Material for MkDocs 主题搭建。&lt;/p&gt;
&lt;p&gt;说实话，这套组合的体验并不差。Material for MkDocs 提供了丰富的功能，包括导航、搜索、代码高亮、博客、Markdown 扩展等。几乎不需要编写什么前端代码，就能搭建出一个美观且功能完善的网站。&lt;/p&gt;
&lt;p&gt;但是，&lt;strong&gt;MkDocs 本质上是一个面向技术文档的静态网站生成器，而我想要的是一个更加自由的个人博客。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;随着时间的推移，这套方案也渐渐暴露出了一些问题。&lt;/p&gt;
&lt;h2 id=&quot;为什么离开-mkdocs&quot;&gt;为什么离开 MkDocs&lt;/h2&gt;
&lt;h3 id=&quot;项目的维护状况&quot;&gt;项目的维护状况&lt;/h3&gt;
&lt;p&gt;首先是项目本身的维护问题。&lt;/p&gt;
&lt;p&gt;MkDocs 1.x 已经很长时间没有正式更新。虽然 MkDocs 2.0 已进入预发布阶段，但由于架构上的调整，它并不能直接兼容现有的 Material for MkDocs。&lt;/p&gt;
&lt;p&gt;而 Material for MkDocs 自 2025 年 11 月发布 9.7.0 版本后，也正式进入了维护模式，不再开发新功能，仅继续提供关键错误修复和安全更新，并计划于 2027 年 5 月 5 日结束上游维护。&lt;/p&gt;
&lt;p&gt;后来，我又看到了 &lt;a href=&quot;https://github.com/mkdocs/mkdocs/discussions/4077&quot;&gt;MkDocs 2.0 的讨论&lt;/a&gt;，以及 &lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/blog/2026/02/18/mkdocs-2.0/&quot;&gt;Material for MkDocs 团队对此发表的文章&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;说实话，这让我对 MkDocs 的未来更加担忧。&lt;/p&gt;
&lt;p&gt;MkDocs 2.0 选择彻底重写现有架构，并计划移除原有的插件系统。虽然这样能够降低框架本身的复杂度，但也意味着大量依赖插件和主题扩展的功能无法直接延续。&lt;/p&gt;
&lt;p&gt;在讨论区中，有贡献者认为，正是 Material for MkDocs、PyMdown Extensions 以及不断发展的插件生态，才让 MkDocs 从一个基础的文档生成工具成长为功能完善的平台。如今新版本却选择放弃其中的重要部分，多少有些令人惋惜。&lt;/p&gt;
&lt;p&gt;我并不反对重构，也能够理解维护者希望摆脱历史技术债的想法。但我更希望看到的是对现有扩展机制的改进，而不是直接将其移除。&lt;/p&gt;
&lt;p&gt;再加上新版本的开发过程和社区贡献政策引发的争议，我对这个项目的长期发展方向也失去了一些信心。&lt;/p&gt;
&lt;p&gt;尤其是对于我这样希望自由扩展功能、尝试不同 UI 设计的开发者来说，MkDocs 2.0 的发展方向显然与我的需求并不一致。&lt;/p&gt;
&lt;p&gt;当然，这不意味着已经搭建的网站会突然无法使用。但对于一个准备长期维护的个人博客来说，我还是希望能使用一个持续发展、具备较好扩展前景的框架。&lt;/p&gt;
&lt;h3 id=&quot;不太理想的-rss-体验&quot;&gt;不太理想的 RSS 体验&lt;/h3&gt;
&lt;p&gt;这是我之前使用 MkDocs 时比较头疼的问题之一。&lt;/p&gt;
&lt;p&gt;我希望博客能够提供 RSS 订阅，让读者直接在自己习惯的阅读器中查看新文章，最好还能阅读完整正文，而不必每次都跳转到网站。&lt;/p&gt;
&lt;p&gt;MkDocs 本身没有内置 RSS，需要借助 &lt;code&gt;mkdocs-rss-plugin&lt;/code&gt; 实现。&lt;/p&gt;
&lt;p&gt;但之前配置时，我遇到了两个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;非文章页面被收录。&lt;/strong&gt; RSS 阅读器不仅能看到文章，还会把网站的顶层页面也作为订阅条目收进去。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只能阅读文章节选。&lt;/strong&gt; 在 RSS 阅读器中打开文章时，只能看到一小段内容，想阅读完整文章还需要跳转到网站。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后来查阅文档才发现，插件默认会匹配所有页面，而文章内容也默认以摘要的形式输出。这些行为可以通过 &lt;code&gt;match_path&lt;/code&gt; 和 &lt;code&gt;abstract_chars_count&lt;/code&gt; 等参数调整。&lt;/p&gt;
&lt;p&gt;问题并不是插件完全不支持这些功能，而是实际效果与我预期的博客订阅体验有些差距，还需要额外研究和调试配置。&lt;/p&gt;
&lt;p&gt;考虑到这只是个个人博客，我也懒得继续折腾，索性就没有再配置 RSS。&lt;/p&gt;
&lt;h3 id=&quot;文章摘要与正文耦合&quot;&gt;文章摘要与正文耦合&lt;/h3&gt;
&lt;p&gt;还有一个让我不太满意的地方，就是 Material for MkDocs 博客插件生成文章摘要的方式。&lt;/p&gt;
&lt;p&gt;按照官方提供的用法，需要在 Markdown 正文中插入 &lt;code&gt;&amp;#x3C;!-- more --&gt;&lt;/code&gt; 分隔符，插件会提取分隔符之前的内容作为文章概述。&lt;/p&gt;
&lt;p&gt;这个功能本身没有什么问题，但它意味着：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我为了文章列表编写的概述，同时也会成为文章正文的一部分。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而我更希望文章概述和正文是两个独立的部分。&lt;/p&gt;
&lt;p&gt;例如，一篇文章的摘要可能只是为了让读者快速了解它的主要内容，不一定适合作为文章开头。&lt;/p&gt;
&lt;p&gt;如果使用独立的元数据字段存储摘要，就可以让文章列表、RSS 和 SEO 描述复用这段内容，同时不影响文章正文的组织。&lt;/p&gt;
&lt;p&gt;这并不是什么严重的问题，但对我来说，独立管理摘要的方式更符合自己的写作习惯。&lt;/p&gt;
&lt;h3 id=&quot;ui-定制的局限性&quot;&gt;UI 定制的局限性&lt;/h3&gt;
&lt;p&gt;相比前面的问题，这才是促使我迁移的主要原因。&lt;/p&gt;
&lt;p&gt;Material for MkDocs 的默认设计基于 Material Design，整体视觉风格偏向 Material 2。&lt;/p&gt;
&lt;p&gt;它的设计确实不错，配色、字体、导航、布局等也都支持自定义，但整套主题的组件结构和设计思路依然是围绕文档网站建立的。&lt;/p&gt;
&lt;p&gt;如果只是修改颜色、字体或者调整部分布局，这些功能已经足够。&lt;/p&gt;
&lt;p&gt;但我并不希望自己的博客始终局限于 Material 2。&lt;/p&gt;
&lt;p&gt;我想尝试其他的设计语言，例如 Material Design 3、Fluent Design，以及一些更简洁、偏向现代 Web 应用的设计风格。&lt;/p&gt;
&lt;p&gt;甚至有时候，我可能根本不想遵循某一套完整的设计规范，只是想按照自己的想法制作几个组件。&lt;/p&gt;
&lt;p&gt;而在 Material for MkDocs 中，要实现这些效果，往往需要覆盖原有模板、大量修改 CSS，或者绕过主题本身的组件结构。&lt;/p&gt;
&lt;p&gt;这样做当然可行，但随着定制内容越来越多，维护成本也会随之增加。&lt;/p&gt;
&lt;p&gt;与其在现有主题上不断修改，不如直接选择一个更适合自行构建 UI 的框架。&lt;/p&gt;
&lt;h3 id=&quot;其他问题&quot;&gt;其他问题&lt;/h3&gt;
&lt;p&gt;此外，还有一些使用过程中的小问题。&lt;/p&gt;
&lt;p&gt;例如，部分 Markdown 格式在特定文本环境下无法按照预期解析，需要手动添加空格或者调整语法。&lt;/p&gt;
&lt;p&gt;这不一定是 MkDocs 本身的错误，也可能与 Python-Markdown 的语法规则或启用的扩展有关，但多少还是影响了一些写作体验。&lt;/p&gt;
&lt;p&gt;这些问题单独来看都不算严重，也有对应的解决办法。&lt;/p&gt;
&lt;p&gt;只是当它们逐渐积累起来，我开始意识到：&lt;strong&gt;我花在适应现有框架和主题上的精力，已经越来越多了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;于是最近，我决定尝试将博客迁移到其他框架。&lt;/p&gt;
&lt;h2 id=&quot;为什么还是静态网站&quot;&gt;为什么还是静态网站&lt;/h2&gt;
&lt;p&gt;一开始，我就排除了 WordPress、Typecho 等需要服务器运行环境的博客系统。&lt;/p&gt;
&lt;p&gt;原因很简单。&lt;/p&gt;
&lt;p&gt;首先是维护成本。动态博客通常需要维护应用程序、数据库、运行环境以及服务器配置，还需要定期安装更新、修复安全漏洞和备份数据。&lt;/p&gt;
&lt;p&gt;如果服务器到期被释放，或者发生配置错误，在没有可靠备份的情况下，恢复数据可能会非常麻烦。&lt;/p&gt;
&lt;p&gt;其次是安全问题。&lt;/p&gt;
&lt;p&gt;动态博客通常会引入更多需要维护的服务端组件，攻击面也相对更大。尤其是一些长期缺乏维护的插件或依赖，可能成为安全隐患。&lt;/p&gt;
&lt;p&gt;当然，静态网站不代表绝对安全，只是对于以展示文章为主的博客而言，我实在没有必要引入那么多额外的复杂度。&lt;/p&gt;
&lt;p&gt;最后还有一个很现实的原因：&lt;/p&gt;
&lt;p&gt;我是学生，&lt;del&gt;（我没有钱）&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;虽然我有自己的服务器，但并不想为了一个博客专门分配计算和存储资源。&lt;/p&gt;
&lt;p&gt;使用 GitHub Pages、Cloudflare Pages 等服务托管静态网站，通常在免费额度内就能满足我的需求。&lt;/p&gt;
&lt;p&gt;而且文章可以保存在 Git 仓库中，进行版本管理和备份。即使托管平台出现问题，也可以重新构建并部署网站。&lt;/p&gt;
&lt;p&gt;所以，我仍然希望使用静态网站生成器。&lt;/p&gt;
&lt;h2 id=&quot;为什么是-astro&quot;&gt;为什么是 Astro&lt;/h2&gt;
&lt;p&gt;静态网站生成器其实有很多选择。&lt;/p&gt;
&lt;p&gt;例如 Hugo、Hexo、Jekyll、Eleventy，以及之前使用的 MkDocs。&lt;/p&gt;
&lt;p&gt;其中 Hugo 拥有非常成熟的博客功能，构建速度快，而且原生支持 RSS。&lt;/p&gt;
&lt;p&gt;Eleventy 则提供了很高的自由度，允许开发者使用多种模板语言来构建网站。&lt;/p&gt;
&lt;p&gt;这些框架都有自己的优势，也完全能够满足普通博客的需求。&lt;/p&gt;
&lt;p&gt;但对我来说，个人博客并不只是一个发布文章的地方。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;它同时也是一个可以自由尝试前端技术、UI 设计和交互效果的项目。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我本身就对前端开发比较感兴趣，也愿意花时间去实现自己喜欢的界面。&lt;/p&gt;
&lt;p&gt;相比寻找一套足够完善的博客主题，我更希望从底层开始决定网站的结构与设计。&lt;/p&gt;
&lt;p&gt;因此，我最终选择了 Astro。&lt;/p&gt;
&lt;h3 id=&quot;不再受限于某种设计语言&quot;&gt;不再受限于某种设计语言&lt;/h3&gt;
&lt;p&gt;这是我选择 Astro 最重要的原因。&lt;/p&gt;
&lt;p&gt;Astro 不会强制网站采用某一套 UI 组件库或设计语言。&lt;/p&gt;
&lt;p&gt;页面的结构、布局、颜色、交互和组件，都可以由自己决定。&lt;/p&gt;
&lt;p&gt;想尝试 Material Design 3，就使用它的设计规范；想尝试 Fluent Design，就按照 Fluent 的视觉语言实现；如果只是想做一个非常简洁的界面，也完全没有问题。&lt;/p&gt;
&lt;p&gt;Astro 采用组件化的开发方式，可以将导航栏、文章卡片、页脚等界面元素拆分为独立组件，再根据需要进行组合和复用。&lt;/p&gt;
&lt;p&gt;同时，它也支持 React、Vue、Svelte 等前端框架，可以按需引入交互组件。&lt;/p&gt;
&lt;p&gt;这让我不再需要围绕某个现成主题的内部结构进行修改，而是能够直接用熟悉的前端技术实现自己的想法。&lt;/p&gt;
&lt;h3 id=&quot;更灵活的内容组织&quot;&gt;更灵活的内容组织&lt;/h3&gt;
&lt;p&gt;Astro 原生支持 Markdown，并提供了 Content Collections（内容集合）来管理文章和元数据。&lt;/p&gt;
&lt;p&gt;例如，可以将文章的标题、发布日期、标签、描述等信息放在 Frontmatter 中。&lt;/p&gt;
&lt;p&gt;这样，文章摘要就不必再依赖 &lt;code&gt;&amp;#x3C;!-- more --&gt;&lt;/code&gt; 分隔符。&lt;/p&gt;
&lt;p&gt;我可以单独编写 &lt;code&gt;description&lt;/code&gt;，让它用于文章列表、RSS 或搜索引擎描述，而正文则完全按照自己的想法组织。&lt;/p&gt;
&lt;p&gt;此外，Astro 还支持 remark、rehype 等 Markdown 处理插件，并可以通过官方集成使用 MDX。&lt;/p&gt;
&lt;p&gt;如果以后需要一些特殊的 Markdown 语法、文章组件或者排版效果，也有比较灵活的扩展方式。&lt;/p&gt;
&lt;h3 id=&quot;rss-终于可以按自己的想法实现&quot;&gt;RSS 终于可以按自己的想法实现&lt;/h3&gt;
&lt;p&gt;对于 RSS，Astro 提供了官方的 &lt;code&gt;@astrojs/rss&lt;/code&gt; 包。&lt;/p&gt;
&lt;p&gt;与之前主要依赖插件配置的方式不同，Astro 可以通过 JavaScript 获取文章集合，自行决定哪些内容应该进入订阅源。&lt;/p&gt;
&lt;p&gt;例如，我可以只收录正式发布的博客文章，不包含首页、关于页面以及其他无关内容。&lt;/p&gt;
&lt;p&gt;也可以根据文章的分类、标签和发布日期进行筛选与排序。&lt;/p&gt;
&lt;p&gt;更重要的是，我可以分别控制文章摘要和全文内容。&lt;/p&gt;
&lt;p&gt;如果希望读者在 RSS 阅读器中直接阅读完整文章，可以通过额外的内容渲染逻辑输出全文 HTML，而不是只能看到一段节选。&lt;/p&gt;
&lt;p&gt;当然，全文 RSS 仍然需要处理图片路径、内部链接和特殊组件等问题，并不是安装一个包就能自动解决。&lt;/p&gt;
&lt;p&gt;但至少，这些行为都可以由我自己控制。&lt;/p&gt;
&lt;h3 id=&quot;现代前端的开发体验&quot;&gt;现代前端的开发体验&lt;/h3&gt;
&lt;p&gt;Astro 基于 JavaScript / TypeScript 生态，并使用 Vite 作为构建工具。&lt;/p&gt;
&lt;p&gt;对于已经接触过现代前端开发的人来说，这些工具都比较熟悉。&lt;/p&gt;
&lt;p&gt;需要额外功能时，也可以直接利用 npm 生态中的库和工具，而不必完全依赖某个静态网站生成器专属的插件系统。&lt;/p&gt;
&lt;p&gt;另外，Astro 默认采用静态 HTML 输出，普通 Astro 组件不会自动向浏览器发送客户端 JavaScript。&lt;/p&gt;
&lt;p&gt;只有确实需要交互的部分，才需要额外加载相关脚本或者使用 Islands Architecture（群岛架构）。&lt;/p&gt;
&lt;p&gt;对于主要用来阅读文章的博客而言，这种设计很合适。&lt;/p&gt;
&lt;p&gt;当然，这不代表使用 Astro 就一定能获得优秀的性能。网站的最终表现，依然取决于具体的实现方式。&lt;/p&gt;
&lt;p&gt;但在保留静态网站优势的同时，还能获得现代前端框架的开发体验，确实很有吸引力。&lt;/p&gt;
&lt;h2 id=&quot;迁移的代价&quot;&gt;迁移的代价&lt;/h2&gt;
&lt;p&gt;当然，迁移到 Astro 并不意味着所有问题都会自动解决。&lt;/p&gt;
&lt;p&gt;MkDocs 和 Material for MkDocs 原本提供的导航、搜索、文章列表、归档等功能，在 Astro 中可能需要自行开发，或者使用现有的集成方案。&lt;/p&gt;
&lt;p&gt;原有文章也需要进行一定的调整，包括 Frontmatter 字段、Markdown 扩展语法、图片路径等。&lt;/p&gt;
&lt;p&gt;此外，还需要考虑旧文章 URL 的兼容性，避免因为更换框架而导致原有链接失效。&lt;/p&gt;
&lt;p&gt;从工作量来看，这未必比继续使用 MkDocs 更轻松。&lt;/p&gt;
&lt;p&gt;但区别在于，以前我是在适应一个已经存在的主题，而现在我可以按照自己的需求来组织整个项目。&lt;/p&gt;
&lt;p&gt;对我来说，这种自由度值得付出一定的迁移成本。&lt;/p&gt;
&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;
&lt;p&gt;写这篇文章，并不是想说 MkDocs 或 Material for MkDocs 不好。&lt;/p&gt;
&lt;p&gt;事实上，它们依然是相当优秀的文档工具，尤其适合需要快速搭建技术文档站、又不想投入太多前端开发精力的场景。&lt;/p&gt;
&lt;p&gt;只不过，随着自己的需求不断变化，原本适合的方案也不一定能够一直满足需求。&lt;/p&gt;
&lt;p&gt;从 MkDocs 迁移到 Astro，与其说是一次技术升级，不如说是一次开发思路的转变。&lt;/p&gt;
&lt;p&gt;以前，我希望找一个足够完善的主题，尽量减少自己需要编写的代码。&lt;/p&gt;
&lt;p&gt;现在，我更希望能够亲手决定这个网站应该是什么样子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;毕竟，这是我的个人博客。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;既然如此，为什么不让它更有一点自己的风格呢？&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/changelog/&quot;&gt;Material for MkDocs 更新日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/plugins/blog/&quot;&gt;Material for MkDocs 博客插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://guts.github.io/mkdocs-rss-plugin/configuration/&quot;&gt;MkDocs RSS Plugin 配置文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/en/recipes/rss/&quot;&gt;Astro RSS 指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>建站</category></item><item><title>猫</title><link>https://blog.gytxtx.top/article/2026/09/cat/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/09/cat/</guid><description>记录中秋假期在桥下遇见一只小猫、带它回家，以及为它寻找收养去处的经历。</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;中秋假期的第二天（09-26）,女朋友和我一起去市内各处玩&lt;/p&gt;
&lt;p&gt;到了下午，途径一处桥下，看到一只小猫&lt;/p&gt;
&lt;p&gt;——只有一只小猫，旁边也没有其他的猫，但有两条狗&lt;/p&gt;
&lt;p&gt;我女朋友看到了它，并且一直抚摸着它&lt;/p&gt;
&lt;p&gt;它一直喵喵叫，身体也略微颤抖着&lt;/p&gt;
&lt;p&gt;我和女朋友商议过后，决定把它带到家中喂养（我家里有一只猫，且有猫粮）&lt;/p&gt;
&lt;p&gt;在将它带到家的过程中 它也有些惧怕&lt;/p&gt;
&lt;p&gt;从我来的车上跑下来，并且在开车的过程中尝试逃离（虽然隔着一层玻璃，它也逃不掉就是了）并一直大声叫着&lt;/p&gt;
&lt;p&gt;我有点后悔，并说能不能给它送回去&lt;/p&gt;
&lt;p&gt;但她说 都开到这了那还咋送了&lt;/p&gt;
&lt;p&gt;于是 我和她将它装到一个纸袋内，并捏住袋口防止它逃离&lt;/p&gt;
&lt;p&gt;到家之后，她将猫放了出来，它跑向了院内的水盆，并喝盆内的水 也不叫了&lt;/p&gt;
&lt;p&gt;随后的问题就是关于它的去处&lt;/p&gt;
&lt;p&gt;她的家里也有一只猫 如果要收养它的话她家里人不会同意&lt;/p&gt;
&lt;p&gt;而我的母亲也不同意 理由是养两只猫太费钱 诸如此类&lt;/p&gt;
&lt;p&gt;随后 我妈出去找了一圈 打听谁愿意收养它&lt;/p&gt;
&lt;p&gt;过了一段时间 她回来了&lt;/p&gt;
&lt;p&gt;之前她买猫粮的那家宠物店愿意收养 但等她真正有时间开始抓它的时候，它却一直缩在人手够不到的地方 且宠物店也要关门了&lt;/p&gt;
&lt;p&gt;没办法 等明天吧&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;到了晚上 我妈做饭时提起这件事 说我为什么这么善良 要把它收养回来 家里也没有钱养它 并带有言语侮辱&lt;/p&gt;
&lt;p&gt;但随后 我提出用我每周 20 元的饭费用来买它的猫粮 也被她拒绝了&lt;/p&gt;
&lt;p&gt;随后就是不断地翻旧账 说我的不好&lt;/p&gt;
&lt;p&gt;甚至开始说我的女朋友&lt;/p&gt;
&lt;p&gt;这些我都已经习惯了 因此情绪并没有太大波动&lt;/p&gt;
&lt;p&gt;随后 她让我把它抓到笼子里 明天把它带到宠物店处理&lt;/p&gt;
&lt;p&gt;就这些&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>Pixel 5 的 VoLTE 又坏了：一次 IMS 故障排查记录</title><link>https://blog.gytxtx.top/article/2026/08/pixel-5-volte-troubleshooting/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/08/pixel-5-volte-troubleshooting/</guid><description>去年我写过一篇 Google Pixel 5 开启 VoLTE 实录，记录了自己给 Pixel 5 开启国内 VoLTE 的过程。 最近重置手机之后，我又重新配置了一遍 Root 环境。 本来以为把以前用的模块重新装回去就完事了，结果重启之后却发现： VoLTE 又寄了。 进入 *#*#4636#*#* 查看状态，IMS 一直没有注册。 问题是——我之前同样用过 APatch，同样装这个 VoLTE 模块，当时明明一点问题都没有。 于是就有了这次折腾。</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;去年我写过一篇 &lt;a href=&quot;https://blog.gytxtx.top/article/2025/10/google-pixel-5-volte/&quot;&gt;Google Pixel 5 开启 VoLTE 实录&lt;/a&gt;，记录了自己给 Pixel 5 开启国内 VoLTE 的过程。&lt;/p&gt;
&lt;p&gt;最近重置手机之后，我又重新配置了一遍 Root 环境。&lt;/p&gt;
&lt;p&gt;本来以为把以前用的模块重新装回去就完事了，结果重启之后却发现：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VoLTE 又寄了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;进入 &lt;code&gt;*#*#4636#*#*&lt;/code&gt; 查看状态，IMS 一直没有注册。&lt;/p&gt;
&lt;p&gt;问题是——我之前同样用过 APatch，同样装这个 VoLTE 模块，当时明明一点问题都没有。&lt;/p&gt;
&lt;p&gt;于是就有了这次折腾。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;一开始我以为只是-ims-配置坏了&quot;&gt;一开始，我以为只是 IMS 配置坏了&lt;/h2&gt;
&lt;p&gt;我的设备还是那台 Pixel 5，运营商是中国移动。&lt;/p&gt;
&lt;p&gt;手机本身可以正常连接 LTE，移动数据也完全正常，所以显然不是 SIM 卡没识别或者基站没信号。&lt;/p&gt;
&lt;p&gt;先看了一下 CarrierConfig：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://blog.gytxtx.top/_astro/ec.gaqjt.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;https://blog.gytxtx.top/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;dumpsys&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;carrier_config&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;-i&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;volte&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;dumpsys carrier_config | grep -i volte&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;结果里面有：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;carrier_volte_available_bool = false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;carrier_volte_provisioned_bool = false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;carrier_volte_available_bool = falsecarrier_volte_provisioned_bool = false&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;第一眼看到这里，我还挺激动：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;抓到了，不就是 CarrierConfig 没加载对吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;但继续排查之后，事情没这么简单。&lt;/p&gt;
&lt;p&gt;系统里的 Qualcomm IMS 服务其实正常存在：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;pm&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;packages&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;-i&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;ims&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;pm list packages | grep -i ims&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;能找到：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;org.codeaurora.ims&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;com.android.service.ims&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;org.codeaurora.imscom.android.service.ims...&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;正在运行的服务里也能看到：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;org.codeaurora.ims/.ImsService&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;org.codeaurora.ims/.ImsService&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;所以 IMS 组件并没有丢。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;真正有用的线索来自-radio-log&quot;&gt;真正有用的线索来自 Radio Log&lt;/h2&gt;
&lt;p&gt;既然 Android 这一层看不出明显问题，那就继续往 modem 方向查。&lt;/p&gt;
&lt;p&gt;抓取 Radio Log：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;logcat&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;-b&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;radio&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;-d&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;-iE&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&quot;ims|volte|mbn&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;logcat -b radio -d | grep -iE &amp;#x22;ims|volte|mbn&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;其中有一段让我开始觉得不对劲：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;GRIL-Q : MODEM: [GRPT][IMS Config] EFS-Ver.:0, VoLTE:Y, VT:Y, VoWiFi:WFC Disabled, CallPref:Cellular preferred, RTT:NA.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;GRIL-Q : MODEM: [GRPT][IMS Config] OMA-DMServiceMask: 0x0, SERVICE_ENABLE:N, VOLTE_ENABLE:N, VT_ENABLE:N, PRESENCE_ENABLE:N, VOWIFI_ENABLE:N&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;GRIL-Q : MODEM: [GRPT][IMS Config] EFS-Ver.:0, VoLTE:Y, VT:Y, VoWiFi:WFC Disabled, CallPref:Cellular preferred, RTT:NA.GRIL-Q : MODEM: [GRPT][IMS Config] OMA-DMServiceMask: 0x0, SERVICE_ENABLE:N, VOLTE_ENABLE:N, VT_ENABLE:N, PRESENCE_ENABLE:N, VOWIFI_ENABLE:N&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;意思很直接：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;modem 支持 VoLTE，但当前配置并没有把 VoLTE 打开。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;接着又看到了：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;GRIL-Q : MODEM: [GRPT][MBN] WildCard, sub[0]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;GRIL-Q : MODEM: [GRPT][MBN] SW_DEFAULT, sub[1]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;GRIL-Q : MODEM: [GRPT][MBN] WildCard, sub[0]GRIL-Q : MODEM: [GRPT][MBN] SW_DEFAULT, sub[1]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;MBN 可以简单理解为高通 modem 针对不同地区、运营商准备的一套配置。&lt;/p&gt;
&lt;p&gt;而这里加载的是 &lt;code&gt;WildCard&lt;/code&gt;，也就是通用配置。&lt;/p&gt;
&lt;p&gt;这就奇怪了。&lt;/p&gt;
&lt;p&gt;因为我安装的 VoLTE 模块明明就是靠补充 MBN 配置来支持国内运营商的。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;模块里明明有-china系统里却没有&quot;&gt;模块里明明有 China，系统里却没有&lt;/h2&gt;
&lt;p&gt;于是我去看了一下手机当前真正能看到的 MBN：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;/vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ls /vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;结果：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;APAC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;AUNZ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;EU&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;MEA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;NA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;PTCRB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;SEA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;TestSIM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;common&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;APACAUNZEUMEANAPTCRBSEATestSIMcommon&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;没有：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;China&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;China&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;再看看 VoLTE 模块里面：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;/data/adb/modules/Pixel5VolteVoWiFi/vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ls /data/adb/modules/Pixel5VolteVoWiFi/vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;结果却是：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;AF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;APAC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;AUNZ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;China&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;EU&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Korea&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;LATAM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;MEA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;NA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Russia&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;SA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;SEA&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;common&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;AFAPACAUNZChinaEUKoreaLATAMMEANARussiaSASEATestcommon&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;这下就有意思了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;模块里有 China，真正的 &lt;code&gt;/vendor&lt;/code&gt; 里却没有。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;也就是说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;模块装上了，但里面最关键的文件根本没有被挂载进去。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;到这里，问题突然从“IMS 为什么注册失败”变成了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root 模块到底有没有正常挂载？&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;手动挂一下试试&quot;&gt;手动挂一下试试&lt;/h2&gt;
&lt;p&gt;为了验证自己的猜测，我直接把模块里的 MBN 目录 Bind Mount 到系统：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;mount&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;--bind&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;/data/adb/modules/Pixel5VolteVoWiFi/vendor/rfs/msm/mpss/readonly/vendor/mbn &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;/vendor/rfs/msm/mpss/readonly/vendor/mbn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;mount --bind \/data/adb/modules/Pixel5VolteVoWiFi/vendor/rfs/msm/mpss/readonly/vendor/mbn \/vendor/rfs/msm/mpss/readonly/vendor/mbn&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;然后再次查看：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;/vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ls /vendor/rfs/msm/mpss/readonly/vendor/mbn/mcfg_sw/generic/Pixel&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;这次：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;China&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;China&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;出现了。&lt;/p&gt;
&lt;p&gt;接着重新启动 IMS 相关服务，再打开 &lt;code&gt;*#*#4636#*#*&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;结果：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IMS 注册：已注册&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;LTE 语音通话：可用&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;视频通话：可用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;看到这里的时候，问题其实已经实锤了。&lt;/p&gt;
&lt;p&gt;不是运营商问题。&lt;/p&gt;
&lt;p&gt;不是 SIM 卡问题。&lt;/p&gt;
&lt;p&gt;不是 Qualcomm IMS 服务坏了。&lt;/p&gt;
&lt;p&gt;甚至 VoLTE 模块本身也没有问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;纯粹就是模块没有正确挂载到 &lt;code&gt;/vendor&lt;/code&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;那为什么以前可以现在不行&quot;&gt;那为什么以前可以，现在不行？&lt;/h2&gt;
&lt;p&gt;这个问题一开始最让我困惑。&lt;/p&gt;
&lt;p&gt;因为我以前确实也是 APatch，而且 VoLTE 一直正常。&lt;/p&gt;
&lt;p&gt;后来去翻 APatch 的更新记录，才发现中间发生过一个很重要的变化。&lt;/p&gt;
&lt;p&gt;2026 年 1 月，APatch 加入了 MetaModule 机制，并明确表示：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此后 APatch 本身不再负责模块挂载，挂载工作交给 MetaModule。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;换句话说，以前大概是：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;APatch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;直接处理模块挂载&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;VoLTE 模块正常进入 /vendor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;APatch  ↓直接处理模块挂载  ↓VoLTE 模块正常进入 /vendor&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;现在则变成了：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;APatch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;MetaModule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;由具体挂载实现决定模块怎么进入系统&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;APatch  ↓MetaModule  ↓由具体挂载实现决定模块怎么进入系统&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;而我这次使用的是：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;meta-overlayfs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;meta-overlayfs&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;所以真正改变的并不是 VoLTE 模块，而是 &lt;strong&gt;APatch 的模块挂载机制&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;最后抓到了-overlayfs-的报错&quot;&gt;最后抓到了 OverlayFS 的报错&lt;/h2&gt;
&lt;p&gt;继续看 &lt;code&gt;meta-overlayfs&lt;/code&gt; 自己的输出：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;/data/adb/modules/meta-overlayfs/meta-overlayfs&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;--help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/data/adb/modules/meta-overlayfs/meta-overlayfs --help&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;它其实已经正确识别到了 VoLTE 模块：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Processing module: Pixel5VolteVoWiFi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;+ system/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;+ vendor/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;Processing module: Pixel5VolteVoWiFi  + system/  + vendor/&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;/system&lt;/code&gt; 也成功挂上了。&lt;/p&gt;
&lt;p&gt;但到 &lt;code&gt;/vendor&lt;/code&gt; 时：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;mount overlay for /vendor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;mount overlay for /vendor&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;随后出现：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;bind mount ./firmware_mnt -&gt; /vendor/firmware_mnt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;failed to mount overlay for child /vendor/firmware_mnt:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Function not implemented&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;mount vendor failed:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Function not implemented&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;bind mount ./firmware_mnt -&gt; /vendor/firmware_mntfailed to mount overlay for child /vendor/firmware_mnt:Function not implementedmount vendor failed:Function not implemented&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Pixel 5 的 &lt;code&gt;/vendor&lt;/code&gt; 下面还有一个独立挂载的：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;/vendor/firmware_mnt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/vendor/firmware_mnt&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;meta-overlayfs&lt;/code&gt; 在处理整个 &lt;code&gt;/vendor&lt;/code&gt; Overlay 时，碰到这个子挂载失败，最后把整个 Vendor Overlay 回滚了。&lt;/p&gt;
&lt;p&gt;结果就是一种非常迷惑的状态：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/system&lt;/code&gt; 模块内容：正常&lt;br&gt;
&lt;code&gt;/vendor&lt;/code&gt; 模块内容：没挂上&lt;/p&gt;
&lt;p&gt;平时可能根本察觉不到。&lt;/p&gt;
&lt;p&gt;但偏偏这个 VoLTE 模块最重要的 MBN 就在 &lt;code&gt;/vendor&lt;/code&gt; 里面。&lt;/p&gt;
&lt;p&gt;于是 IMS 就没了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;换成-magic-mount问题消失&quot;&gt;换成 Magic Mount，问题消失&lt;/h2&gt;
&lt;p&gt;既然已经确定是 OverlayFS 的问题，我最后没有继续折腾它，而是换成了：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Hybrid-Mount/meta-hybrid_mount&quot;&gt;Hybrid Mount&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后把挂载方式改成：&lt;strong&gt;Magic Mount&lt;/strong&gt;，之后重启。&lt;/p&gt;
&lt;p&gt;再次打开 IMS 状态：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;IMS 注册：已注册&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;LTE 语音通话：可用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;视频通话：可用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;IMS 注册：已注册LTE 语音通话：可用视频通话：可用&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;彻底恢复。&lt;/p&gt;
&lt;p&gt;Magic Mount 没有走之前那条会在 &lt;code&gt;/vendor/firmware_mnt&lt;/code&gt; 上失败的 OverlayFS 路径，于是模块里的 MBN 终于能够正常出现在 &lt;code&gt;/vendor&lt;/code&gt; 里。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;所以这次到底发生了什么&quot;&gt;所以这次到底发生了什么？&lt;/h2&gt;
&lt;p&gt;简单总结一下就是：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;以前的 APatch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;模块可以正常挂载&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;China MBN 生效&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;IMS 正常&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;以前的 APatch    ↓模块可以正常挂载    ↓China MBN 生效    ↓IMS 正常&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;后来：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;APatch 的模块挂载交给 MetaModule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;我用了 meta-overlayfs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;/vendor Overlay 因 firmware_mnt 失败&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;VoLTE 模块里的 China MBN 没挂进去&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;modem 加载 WildCard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;VOLTE_ENABLE=N&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;IMS 不注册&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;APatch 的模块挂载交给 MetaModule    ↓我用了 meta-overlayfs    ↓/vendor Overlay 因 firmware_mnt 失败    ↓VoLTE 模块里的 China MBN 没挂进去    ↓modem 加载 WildCard    ↓VOLTE_ENABLE=N    ↓IMS 不注册&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;最后：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;换 Hybrid Mount&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;使用 Magic Mount&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;MBN 正确挂载&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;IMS 注册成功&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;换 Hybrid Mount    ↓使用 Magic Mount    ↓MBN 正确挂载    ↓IMS 注册成功&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id=&quot;一点感想&quot;&gt;一点感想&lt;/h2&gt;
&lt;p&gt;这次最折磨人的地方，是问题表面上看起来完全像 IMS 或运营商配置出了问题。&lt;/p&gt;
&lt;p&gt;CarrierConfig 是 &lt;code&gt;false&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;IMS 没注册。&lt;/p&gt;
&lt;p&gt;modem 里 &lt;code&gt;VOLTE_ENABLE=N&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;MBN 又是 &lt;code&gt;WildCard&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;每一条看起来都能单独让人研究半天。&lt;/p&gt;
&lt;p&gt;结果一路查到底，真正的问题却只是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;模块里的文件压根没挂上去。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更坑的是，APatch 管理器里模块始终显示为正常启用，&lt;code&gt;/system&lt;/code&gt; 下的模块内容也确实生效了。&lt;/p&gt;
&lt;p&gt;所以从表面上看，完全没有理由怀疑“模块其实只挂上了一半”。&lt;/p&gt;
&lt;p&gt;以后如果再遇到升级 Root 方案之后某个模块突然失效，我大概会先去确认一件事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;模块里的文件，真的出现在它应该出现的位置了吗？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有时候比研究半天配置有效得多。&lt;/p&gt;
&lt;p&gt;总之，折腾了一下午。&lt;/p&gt;
&lt;p&gt;最后看到：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;IMS 注册：已注册&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;IMS 注册：已注册&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;只能说——&lt;/p&gt;
&lt;p&gt;舒服了。&lt;/p&gt;</content:encoded><category>玩机</category></item><item><title>记录我的 Android Root 方案</title><link>https://blog.gytxtx.top/article/2026/08/android-root/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/08/android-root/</guid><description>最近重置了我的 Pixel 5，顺便将所用的模块 / App 记录下来，以便后续使用和供他人参考。</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近重置了我的 Pixel 5，顺便将所用的模块 / App 记录下来，以便后续使用和供他人参考。&lt;/p&gt;
&lt;h2 id=&quot;root-管理器&quot;&gt;Root 管理器&lt;/h2&gt;
&lt;p&gt;APatch&lt;/p&gt;
&lt;h2 id=&quot;模块&quot;&gt;模块&lt;/h2&gt;
&lt;h3 id=&quot;内核模块&quot;&gt;内核模块&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;cherish_peekaboo_1.5.kpm&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;magisk-模块&quot;&gt;Magisk 模块&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/YuzakiKokuban/meta-hybrid_mount&quot;&gt;&lt;strong&gt;hybrid mount&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stanislawrogasik/Pixel5-VoLTE-VoWiFi&quot;&gt;https://github.com/stanislawrogasik/Pixel5-VoLTE-VoWiFi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Zygisk Next&lt;/li&gt;
&lt;li&gt;LSPosed&lt;/li&gt;
&lt;li&gt;HMA-OSS&lt;/li&gt;
&lt;li&gt;Tricky-Store&lt;/li&gt;
&lt;li&gt;TrickyAddonModule&lt;/li&gt;
&lt;li&gt;Nohello&lt;/li&gt;
&lt;li&gt;Sui&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;root-软件&quot;&gt;Root 软件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Thanox&lt;/li&gt;
&lt;li&gt;InstallerX-Revived&lt;/li&gt;
&lt;li&gt;MMRL / WebUI X&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;root-检测软件&quot;&gt;Root 检测软件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;native-root-detector-v7.7.0&lt;/li&gt;
&lt;li&gt;密钥认证&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;应用市场&quot;&gt;应用市场&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Play（自带）&lt;/li&gt;
&lt;li&gt;酷安&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>玩机</category></item><item><title>停更的这几个月，我在做什么</title><link>https://blog.gytxtx.top/article/2026/05/monthly-summary/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/05/monthly-summary/</guid><description>各位好久不见。 已经有好几个月没更新博客了。期间其实有好几次想写点什么，但总感觉不知道该从哪里开始。 这篇文章就当作一次近况总结吧，和大家聊聊这段时间我折腾过的一些事情。</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;各位好久不见。&lt;/p&gt;
&lt;p&gt;已经有好几个月没更新博客了。期间其实有好几次想写点什么，但总感觉不知道该从哪里开始。&lt;/p&gt;
&lt;p&gt;这篇文章就当作一次近况总结吧，和大家聊聊这段时间我折腾过的一些事情。&lt;/p&gt;
&lt;p&gt;写得比较仓促，如有表述错误，还请多多包涵。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;关键词：&lt;strong&gt;办卡后续&lt;/strong&gt;、&lt;strong&gt;搭建网盘&lt;/strong&gt;、&lt;strong&gt;网站性能优化&lt;/strong&gt;、&lt;strong&gt;软件开发&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;办卡后续&quot;&gt;办卡后续&lt;/h2&gt;
&lt;p&gt;上文参见 &lt;a href=&quot;https://blog.gytxtx.top/article/2025/12/weekly-diary_3/&quot;&gt;琐事记 #3：训练日常、烫伤、长春一日游&lt;/a&gt; 这篇文章。&lt;/p&gt;
&lt;p&gt;放假后的 2026 年 1 月 22 日，我带着身份证、户口簿和出生证明，又去了一趟长春领取之前预约的银行卡。&lt;/p&gt;
&lt;p&gt;办理过程倒是比我想象中顺利不少。工作人员带我到柜员机前填写了一些资料，因为手机号实名是我母亲的，还额外登记了手机号注册人的身份信息。&lt;/p&gt;
&lt;p&gt;之后，她从卡库里取出了我预约的那张卡。整个过程大概用了二十分钟。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;搭建网盘&quot;&gt;搭建网盘&lt;/h2&gt;
&lt;p&gt;我最近喜欢玩的游戏 Enter The Nyangeon 发布了新版本，但作者提供的下载方式只有 QQ 群和百度网盘。&lt;/p&gt;
&lt;p&gt;问题在于，这两个平台都需要登录账号、绑定手机号，很多时候还得安装客户端才能正常下载。&lt;/p&gt;
&lt;p&gt;对于手机不在身边、或者人在学校机房的用户（比如我）来说，这种体验实在算不上友好。&lt;/p&gt;
&lt;p&gt;于是我就在想：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;既然现有下载方式不好用，那我能不能自己搭建一个下载站？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;说干就干。我最开始部署的是 Cloudreve，并直接使用服务器硬盘存储文件。&lt;/p&gt;
&lt;p&gt;但实际用下来之后，我很快就发现了问题：&lt;/p&gt;
&lt;p&gt;服务器的上行带宽有限，一旦同时下载的人多起来，速度就会明显下降；而我手里的 VPS 硬盘也只有 30 GB 左右，根本放不了太多东西。&lt;/p&gt;
&lt;p&gt;后来有朋友给我提了个建议：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“为什么不用对象存储？”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我之前其实听说过对象存储，但一直没真正研究过。于是我去查了一下，发现它确实很适合我这种场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不需要自己维护大容量磁盘&lt;/li&gt;
&lt;li&gt;可以按需扩展&lt;/li&gt;
&lt;li&gt;文件下载不占用服务器带宽&lt;/li&gt;
&lt;li&gt;成本也相对比较低&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，我选择了 Cloudflare R2。&lt;/p&gt;
&lt;p&gt;我比较看重的一点是：R2 没有出口流量费用（Egress Fee）。&lt;/p&gt;
&lt;p&gt;目前我的 bucket 是 private 类型，每次下载都会由 OpenList 动态生成带签名的临时链接，再由用户直接从 R2 下载。&lt;/p&gt;
&lt;p&gt;这样既不用公开 bucket，也能减少服务器本身的带宽压力。&lt;/p&gt;
&lt;p&gt;另外，R2 的免费额度（A、B 类操作）对我目前这种个人项目来说也完全够用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;网站性能优化&quot;&gt;网站性能优化&lt;/h2&gt;
&lt;p&gt;本站之前托管在 Cloudflare Pages，并开启了 Cloudflare CDN。&lt;/p&gt;
&lt;p&gt;但国内访问体验一直不算理想，尤其是 TTFB 偏高，某些地区甚至能到 1000ms 以上。&lt;/p&gt;
&lt;p&gt;对于博客这种多页面网站来说，这种延迟其实挺影响阅读体验的。&lt;/p&gt;
&lt;p&gt;后来我尝试了 Cloudflare IP 优选方案，通过将域名解析到延迟更低的 Cloudflare 节点，最终明显改善了国内访问速度。&lt;/p&gt;
&lt;p&gt;我参考了下面这篇文章的方法进行优选：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://2x.nz/posts/cf-fastip/&quot;&gt;试试 Cloudflare IP 优选！让 Cloudflare 在国内再也不是减速器！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下是优化前后的测速结果对比：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Cloudflare IP 优选前的测速结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1786&quot; height=&quot;944&quot; src=&quot;https://blog.gytxtx.top/_astro/image_site-before.DTSCQ3xh_Zutl1f.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Cloudflare IP 优选后的测速结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1706&quot; height=&quot;922&quot; src=&quot;https://blog.gytxtx.top/_astro/image_site-after.DMthYNNd_1qMcw8.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;虽然 ITDOG 最近部分检测节点因为攻击问题不可用，但整体趋势还是能明显看出优化效果。&lt;/p&gt;
&lt;p&gt;优化之后，国内大部分地区的平均延迟和首包时间都改善了不少，访问体验也比之前舒服很多。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;软件开发&quot;&gt;软件开发&lt;/h2&gt;
&lt;p&gt;大概是 2025 年冬季，我买了一块使用嘉佰达 BMS 方案的锂电池组。&lt;/p&gt;
&lt;p&gt;但配套的官方 App 用起来实在让我难受：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;动不动就弹登录&lt;/li&gt;
&lt;li&gt;UI 和功能层级一团乱&lt;/li&gt;
&lt;li&gt;某些功能甚至还要联网&lt;/li&gt;
&lt;li&gt;电池参数编辑也被限制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最让我受不了的一点是：&lt;/p&gt;
&lt;p&gt;我明明只是想打开 App 看一眼剩余电量，却还要先登录账号。&lt;/p&gt;
&lt;p&gt;其实我很早之前就有自己开发替代 App 的想法。&lt;/p&gt;
&lt;p&gt;但以前的我完全不会 Java，更别提 Android 开发了，因此这个想法一直停留在“想想而已”的阶段。&lt;/p&gt;
&lt;p&gt;而现在，有了 AI 开发工具之后，情况开始不一样了。&lt;/p&gt;
&lt;p&gt;我先反编译了原厂 APK，分析通信逻辑，然后让 Codex 帮我生成一个最小可运行原型（MVP）。&lt;/p&gt;
&lt;p&gt;第一次在设备上真正跑起来的时候，我整个人都激动坏了。&lt;/p&gt;
&lt;p&gt;之后，我继续让 Codex 协助完善功能、优化 UI 和交互体验。&lt;/p&gt;
&lt;p&gt;到现在，这个 App 对我来说已经完全够用了。&lt;/p&gt;
&lt;p&gt;它只需要蓝牙权限即可工作；在旧版本 Android 上，可能还需要定位权限。&lt;/p&gt;
&lt;p&gt;目前项目已经在 GitHub 开源，欢迎各位提出建议或 Pull Request：&lt;/p&gt;
&lt;github-repo-card class=&quot;github-repo-card&quot; data-repo=&quot;gytxtx/OpenJBD&quot; data-fetch=&quot;true&quot;&gt;
  &lt;a class=&quot;github-repo-card__link custom-card&quot; href=&quot;https://github.com/gytxtx/OpenJBD&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;在 GitHub 上查看 gytxtx/OpenJBD&quot;&gt;
    &lt;span class=&quot;github-repo-card__header&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot;&gt;&lt;g fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot;&gt;&lt;path d=&quot;M10 2v8l3-3l3 3V2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;span class=&quot;github-repo-card__name&quot;&gt;&lt;span&gt;gytxtx / &lt;/span&gt;&lt;strong&gt;OpenJBD&lt;/strong&gt;&lt;/span&gt;&lt;span class=&quot;github-repo-card__arrow&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;M7 7h10v10M7 17L17 7&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;github-repo-card__description&quot; data-description=&quot;&quot;&gt;在 GitHub 上查看项目源码与最新动态。&lt;/span&gt;
    &lt;span class=&quot;github-repo-card__meta&quot; data-pagefind-ignore=&quot;&quot;&gt;
      &lt;span class=&quot;github-repo-card__metric&quot; data-language=&quot;&quot; hidden&gt;&lt;span class=&quot;github-repo-card__dot&quot;&gt;&lt;/span&gt;&lt;span data-value=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;github-repo-card__metric&quot; data-metric=&quot;star&quot; hidden aria-label=&quot; 个星标&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot;&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot; d=&quot;M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span data-value=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;github-repo-card__metric&quot; data-metric=&quot;fork&quot; hidden aria-label=&quot; 个分支&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot;&gt;&lt;g fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;2&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;18&quot; r=&quot;3&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;6&quot; cy=&quot;6&quot; r=&quot;3&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;18&quot; cy=&quot;6&quot; r=&quot;3&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9m6 3v3&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;span data-value=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;github-repo-card__source&quot;&gt;GitHub&lt;/span&gt;
    &lt;/span&gt;
  &lt;/a&gt;
&lt;/github-repo-card&gt;
&lt;hr&gt;
&lt;h2 id=&quot;结尾&quot;&gt;结尾&lt;/h2&gt;
&lt;p&gt;这几个月大概就是这样。&lt;/p&gt;
&lt;p&gt;虽然折腾了不少东西，也踩了不少坑，但至少现在，我终于能逐渐把一些“不好用”的东西替换成自己真正想要的样子了。&lt;/p&gt;
&lt;p&gt;或许这也是折腾技术最有意思的一点吧。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>Blue Archive Spine 立绘提取与自定义导出全流程</title><link>https://blog.gytxtx.top/article/2026/01/blue-srchive-spine/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2026/01/blue-srchive-spine/</guid><description>Yostar 公布了 Blue Archive 5 周年的一些新内容，但官方没有放出新角色的立绘。我想尝试根据游戏资源生成立绘，本篇文章记录了整个过程。</description><pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;起因&quot;&gt;起因&lt;/h2&gt;
&lt;p&gt;Yostar 公布了 Blue Archive 5 周年的一些新内容，但官方没有放出新角色的立绘。我想尝试根据游戏资源生成立绘，本篇文章记录了整个过程。&lt;/p&gt;
&lt;h2 id=&quot;步骤&quot;&gt;步骤&lt;/h2&gt;
&lt;h3 id=&quot;1-获取游戏文件&quot;&gt;1. 获取游戏文件&lt;/h3&gt;
&lt;p&gt;在获取 Blue Archive 日服 Android 端的更新文件后，跳转到 &lt;code&gt;/storage/emulated/0/Android/data/com.YostarJP.BlueArchive/files/AssetBundles/&lt;/code&gt; 文件夹。&lt;/p&gt;
&lt;p&gt;筛选出 &lt;code&gt;assets-_mx-spinecharacters-&lt;/code&gt; 开头的 .bundle 文件。&lt;/p&gt;
&lt;p&gt;这里我筛选出了下列文件：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://blog.gytxtx.top/_astro/ec.gaqjt.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;https://blog.gytxtx.top/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;❯ ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Directory: ...\com.YostarJP.BlueArchive\files\AssetBundles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Mode                 LastWriteTime         Length Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;----                 -------------         ------ ----&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4361 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_4104145137.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_2644861020.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           6203 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_462340494.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         543109 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_220710728.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4057 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_4037417064.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2711 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_3727421082.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           7004 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_2111289520.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         332046 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_2290143979.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4632 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_3431013955.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2741 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_3563143968.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           7671 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_634072618.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         557739 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_2719927046.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4235 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_2770075460.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_547714503.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           5221 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_4293244063.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         464201 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_168606888.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4523 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_3996380481.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2741 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_3474903601.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           6831 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_2623730915.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         613184 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_45363624.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4936 assets-_mx-spinecharacters-np0267_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_838761384.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0267_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_665777451.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           6763 assets-_mx-spinecharacters-np0267_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_3153327340.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         364820 assets-_mx-spinecharacters-np0267_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_2424373075.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4576 assets-_mx-spinecharacters-np0268_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_56689503.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2712 assets-_mx-spinecharacters-np0268_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_1084959363.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           6756 assets-_mx-spinecharacters-np0268_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_600220194.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         363518 assets-_mx-spinecharacters-np0268_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_874481245.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4575 assets-_mx-spinecharacters-np0269_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_2538252456.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0269_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_3587430121.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           6284 assets-_mx-spinecharacters-np0269_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_1288322186.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         434169 assets-_mx-spinecharacters-np0269_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_3828771965.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           4131 assets-_mx-spinecharacters-np0278_spr-_mxdependency-assets-2026-01-09&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;_assets_all_379667446.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0278_spr-_mxdependency-materials-2026-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-09_assets_all_139422215.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10           5262 assets-_mx-spinecharacters-np0278_spr-_mxdependency-textassets-2026-0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;1-09_assets_all_1489539279.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    19:10         461002 assets-_mx-spinecharacters-np0278_spr-_mxdependency-textures-2026-01-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;09_assets_all_3394693095.bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ ls    Directory: ...\com.YostarJP.BlueArchive\files\AssetBundlesMode                 LastWriteTime         Length Name----                 -------------         ------ -----a---           2026/1/18    19:10           4361 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_4104145137.bundle-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_2644861020.bundle-a---           2026/1/18    19:10           6203 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_462340494.bundle-a---           2026/1/18    19:10         543109 assets-_mx-spinecharacters-ch0331_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_220710728.bundle-a---           2026/1/18    19:10           4057 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_4037417064.bundle-a---           2026/1/18    19:10           2711 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_3727421082.bundle-a---           2026/1/18    19:10           7004 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_2111289520.bundle-a---           2026/1/18    19:10         332046 assets-_mx-spinecharacters-ch0333_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_2290143979.bundle-a---           2026/1/18    19:10           4632 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_3431013955.bundle-a---           2026/1/18    19:10           2741 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_3563143968.bundle-a---           2026/1/18    19:10           7671 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_634072618.bundle-a---           2026/1/18    19:10         557739 assets-_mx-spinecharacters-ch0334_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_2719927046.bundle-a---           2026/1/18    19:10           4235 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_2770075460.bundle-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_547714503.bundle-a---           2026/1/18    19:10           5221 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_4293244063.bundle-a---           2026/1/18    19:10         464201 assets-_mx-spinecharacters-ch0336_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_168606888.bundle-a---           2026/1/18    19:10           4523 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_3996380481.bundle-a---           2026/1/18    19:10           2741 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_3474903601.bundle-a---           2026/1/18    19:10           6831 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_2623730915.bundle-a---           2026/1/18    19:10         613184 assets-_mx-spinecharacters-ch0337_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_45363624.bundle-a---           2026/1/18    19:10           4936 assets-_mx-spinecharacters-np0267_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_838761384.bundle-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0267_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_665777451.bundle-a---           2026/1/18    19:10           6763 assets-_mx-spinecharacters-np0267_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_3153327340.bundle-a---           2026/1/18    19:10         364820 assets-_mx-spinecharacters-np0267_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_2424373075.bundle-a---           2026/1/18    19:10           4576 assets-_mx-spinecharacters-np0268_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_56689503.bundle-a---           2026/1/18    19:10           2712 assets-_mx-spinecharacters-np0268_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_1084959363.bundle-a---           2026/1/18    19:10           6756 assets-_mx-spinecharacters-np0268_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_600220194.bundle-a---           2026/1/18    19:10         363518 assets-_mx-spinecharacters-np0268_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_874481245.bundle-a---           2026/1/18    19:10           4575 assets-_mx-spinecharacters-np0269_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_2538252456.bundle-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0269_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_3587430121.bundle-a---           2026/1/18    19:10           6284 assets-_mx-spinecharacters-np0269_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_1288322186.bundle-a---           2026/1/18    19:10         434169 assets-_mx-spinecharacters-np0269_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_3828771965.bundle-a---           2026/1/18    19:10           4131 assets-_mx-spinecharacters-np0278_spr-_mxdependency-assets-2026-01-09                                                  _assets_all_379667446.bundle-a---           2026/1/18    19:10           2742 assets-_mx-spinecharacters-np0278_spr-_mxdependency-materials-2026-01                                                  -09_assets_all_139422215.bundle-a---           2026/1/18    19:10           5262 assets-_mx-spinecharacters-np0278_spr-_mxdependency-textassets-2026-0                                                  1-09_assets_all_1489539279.bundle-a---           2026/1/18    19:10         461002 assets-_mx-spinecharacters-np0278_spr-_mxdependency-textures-2026-01-                                                  09_assets_all_3394693095.bundle&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;将筛选出来的文件放到一个新文件夹中，下个步骤将会使用这些文件。&lt;/p&gt;
&lt;p&gt;筛选完文件之后，是时候从这些 .bundle 文件中提取资源了。&lt;/p&gt;
&lt;h3 id=&quot;2-提取游戏资源&quot;&gt;2. 提取游戏资源&lt;/h3&gt;
&lt;p&gt;因为 Blue Archive 使用 Unity 引擎，因此需要一个提取 Unity 引擎资产文件的工具。&lt;/p&gt;
&lt;p&gt;我这里使用 &lt;a href=&quot;https://github.com/aelurum/AssetStudio&quot;&gt;AssetStudio&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;解压缩最新版本的文件后，打开 &lt;code&gt;AssetStudioModGUI.exe&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;点击 File &gt; Load folder 选项：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;AssetStudio 中的 File 与 Load folder 菜单&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1304&quot; height=&quot;752&quot; src=&quot;https://blog.gytxtx.top/_astro/image-1.DCu0xzSK_2gBGzW.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;在弹出的文件选择窗口中，选择步骤 1 的文件夹，并点击“选择文件夹”按钮。&lt;/p&gt;
&lt;p&gt;此时，软件应该会自动解析这些 .bundle 文件，并将提取的资产显示在 Asset list 页面中：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;AssetStudio 解析 bundle 后的 Asset list 资产列表&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1304&quot; height=&quot;752&quot; src=&quot;https://blog.gytxtx.top/_astro/image-2.DChAAt7i_12dhJ4.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;提取资产之后，接下来保存提取的资产文件 。&lt;/p&gt;
&lt;p&gt;选择 Export &gt; All assets 选项，在弹出的文件选择窗口中选择一个文件夹，以保存提取的资产文件。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;AssetStudio 中的 Export 与 All assets 导出菜单&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1304&quot; height=&quot;752&quot; src=&quot;https://blog.gytxtx.top/_astro/image-3.CnZ_pr2R_2n1A08.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;等待导出完成后，第二步就完成了。&lt;/p&gt;
&lt;h3 id=&quot;3-导入角色立绘文件&quot;&gt;3. 导入角色立绘文件&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;❯ ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Directory: ...\Exported&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Mode                 LastWriteTime         Length Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;----                 -------------         ------ ----&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;d----           2026/1/18    23:24                MonoBehaviour&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;d----           2026/1/18    23:24                TextAsset&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;d----           2026/1/18    23:24                Texture2D&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ ls    Directory: ...\ExportedMode                 LastWriteTime         Length Name----                 -------------         ------ ----d----           2026/1/18    23:24                MonoBehaviourd----           2026/1/18    23:24                TextAssetd----           2026/1/18    23:24                Texture2D&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;TextAsset&lt;/code&gt;  和 &lt;code&gt;Texture2D&lt;/code&gt; 文件夹中，可以看到提取出的角色立绘文件。&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;❯ ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Directory: ...\Exported\TextAsset&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Mode                 LastWriteTime         Length Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;----                 -------------         ------ ----&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1454 CH0331_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           5958 CH0331_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1154 CH0333_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           7183 CH0333_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1712 CH0334_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           7527 CH0334_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24            983 CH0336_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           5035 CH0336_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1480 CH0337_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           6843 CH0337_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           2008 NP0267_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           6758 NP0267_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1602 NP0268_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           6686 NP0268_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           1582 NP0269_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           5542 NP0269_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24            926 NP0278_spr.atlas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24           5024 NP0278_spr.skel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ ls    Directory: ...\Exported\TextAssetMode                 LastWriteTime         Length Name----                 -------------         ------ -----a---           2026/1/18    23:24           1454 CH0331_spr.atlas-a---           2026/1/18    23:24           5958 CH0331_spr.skel-a---           2026/1/18    23:24           1154 CH0333_spr.atlas-a---           2026/1/18    23:24           7183 CH0333_spr.skel-a---           2026/1/18    23:24           1712 CH0334_spr.atlas-a---           2026/1/18    23:24           7527 CH0334_spr.skel-a---           2026/1/18    23:24            983 CH0336_spr.atlas-a---           2026/1/18    23:24           5035 CH0336_spr.skel-a---           2026/1/18    23:24           1480 CH0337_spr.atlas-a---           2026/1/18    23:24           6843 CH0337_spr.skel-a---           2026/1/18    23:24           2008 NP0267_spr.atlas-a---           2026/1/18    23:24           6758 NP0267_spr.skel-a---           2026/1/18    23:24           1602 NP0268_spr.atlas-a---           2026/1/18    23:24           6686 NP0268_spr.skel-a---           2026/1/18    23:24           1582 NP0269_spr.atlas-a---           2026/1/18    23:24           5542 NP0269_spr.skel-a---           2026/1/18    23:24            926 NP0278_spr.atlas-a---           2026/1/18    23:24           5024 NP0278_spr.skel&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;❯ ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Directory: ...\Exported\Texture2D&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;Mode                 LastWriteTime         Length Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;----                 -------------         ------ ----&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         771136 CH0331_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         702766 CH0333_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         935904 CH0334_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         740377 CH0336_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         955903 CH0337_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         818096 NP0267_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         816195 NP0268_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         656341 NP0269_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;-a---           2026/1/18    23:24         688814 NP0278_spr.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;❯ ls    Directory: ...\Exported\Texture2DMode                 LastWriteTime         Length Name----                 -------------         ------ -----a---           2026/1/18    23:24         771136 CH0331_spr.png-a---           2026/1/18    23:24         702766 CH0333_spr.png-a---           2026/1/18    23:24         935904 CH0334_spr.png-a---           2026/1/18    23:24         740377 CH0336_spr.png-a---           2026/1/18    23:24         955903 CH0337_spr.png-a---           2026/1/18    23:24         818096 NP0267_spr.png-a---           2026/1/18    23:24         816195 NP0268_spr.png-a---           2026/1/18    23:24         656341 NP0269_spr.png-a---           2026/1/18    23:24         688814 NP0278_spr.png&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;观察文件扩展名不难发现，&lt;code&gt;.skel&lt;/code&gt; 文件是 Spine 的骨骼文件；&lt;code&gt;.atlas&lt;/code&gt; 则是 Spine 图集数据文件。&lt;/p&gt;
&lt;p&gt;因此，我们需要一个可以解析并导出最终立绘的 Spine Viewer。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;一开始，我选择了 Spine 官方的编辑软件，但我没有正版 Spine，而免费试用版无法保存和导出任何数据，无奈只能作罢。&lt;/p&gt;
&lt;p&gt;之后，我在 GitHub 上搜索可以导出 Spine 立绘的项目，虽然找到了几款，但其导出功能是根据立绘在软件中的位置与缩放决定的，达不到理想效果。&lt;/p&gt;
&lt;p&gt;最后，我突然想起，Blue Archive 的粉丝 Wiki——&lt;a href=&quot;https://kivo.wiki/&quot;&gt;基沃托斯古书馆&lt;/a&gt; 有预览 Spine 立绘并导出的功能，何不试试呢？&lt;/p&gt;
&lt;p&gt;但网站的立绘浏览与导出功能仅限于网站已有的资源，不支持用户自行上传相关文件并导出。&lt;/p&gt;
&lt;p&gt;有没有一种方法，可以自行选择本地的 Spine 文件，但又具有基沃托斯古书馆的导出功能？&lt;/p&gt;
&lt;p&gt;于是，我开始了尝试。&lt;/p&gt;
&lt;p&gt;在询问了 ChatGPT 之后，我了解到可以通过 Chrome 的 DevTools 完成这项操作。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;首先，按 &lt;code&gt;F12&lt;/code&gt; 打开 DevTools，跳转到“源代码/来源”页面。&lt;/p&gt;
&lt;p&gt;点击“替换”选项卡，单击“选择放置替换项的文件夹”，并在弹出的对话框中允许开发者工具修改文件。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome DevTools 中选择本地替换文件夹并授予权限&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1268&quot; height=&quot;812&quot; src=&quot;https://blog.gytxtx.top/_astro/image-4.DOl0_tb8_2w2Noc.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;此时，跳转到“网络”页面，按 &lt;code&gt;Chrl + R&lt;/code&gt; 重新加载页面后，找到 &lt;code&gt;.skel&lt;/code&gt; 和 &lt;code&gt;.atlas&lt;/code&gt; 文件。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome DevTools 网络面板中的 skel 与 atlas 请求&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1268&quot; height=&quot;812&quot; src=&quot;https://blog.gytxtx.top/_astro/image-5.BBFn63oS_ZUlXSX.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;分别右击这两个文件，选择“替换内容”选项。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome DevTools 请求右键菜单中的替换内容选项&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1272&quot; height=&quot;815&quot; src=&quot;https://blog.gytxtx.top/_astro/image-6.xg6mHQ41_HCs55.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;此时，在“源代码/来源”页面应该显示要被替换的文件：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome DevTools 来源面板中的本地替换文件&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1268&quot; height=&quot;812&quot; src=&quot;https://blog.gytxtx.top/_astro/image-7.C6RZ26tU_11yBwF.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;将在之前步骤中提取出的 &lt;code&gt;.skel&lt;/code&gt; 和 &lt;code&gt;.atlas&lt;/code&gt; 文件放置到你在 DevTools 中替换的文件夹。&lt;/p&gt;
&lt;p&gt;然而，正当我想要替换立绘图片时，“替换内容”选项不可用。&lt;/p&gt;
&lt;p&gt;查看了一下获取此资源的代码，发现图片是在 Web Worker 里用 &lt;code&gt;fetch -&gt; blob -&gt; createImageBitmap&lt;/code&gt; 加载的，DevTools 无法覆盖。&lt;/p&gt;
&lt;p&gt;如果要覆盖，只能劫持并向 &lt;code&gt;window.Worker&lt;/code&gt; 注入代码。&lt;/p&gt;
&lt;p&gt;由于我在这方面不太熟练，因此使用 ChatGPT 生成了一段 Tampermonkey 脚本代码：&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// ==UserScript==&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @name         Spine Worker Image Override&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @namespace    spine-override&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @version      1.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @match        https://kivo.wiki/*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @run-at       document-start&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// @grant        none&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#616972;--1:#99A0A6&quot;&gt;// ==/UserScript==&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;use strict&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;TARGET_MAP&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;NP0268_spr.png&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;https://example.com/override/NP0268_spr.png&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;OriginalWorker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; window.Worker;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;Worker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#FFAB70&quot;&gt;scriptURL&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#FFAB70&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; scriptURL &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;string&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;createHookedWorker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(scriptURL, options);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;OriginalWorker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(scriptURL, options);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;createHookedWorker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#FFAB70&quot;&gt;scriptURL&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#FFAB70&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;injectedCode&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;(function () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;const MAP = ${&lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;TARGET_MAP&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;const originalFetch = self.fetch;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;self.fetch = async function (input, init) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;let url = typeof input === &apos;string&apos; ? input : input &amp;#x26;&amp;#x26; input.url;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;if (url) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;for (const key in MAP) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;if (url.includes(key)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;console.warn(&apos;[Spine Override]&apos;, url, &apos;→&apos;, MAP[key]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;return originalFetch(MAP[key], init);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;return originalFetch(input, init);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;})();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;blob&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;Blob&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;injectedCode,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;importScripts(&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(scriptURL) &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;);&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;{ type: &lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#9ECBFF&quot;&gt;&apos;application/javascript&apos;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;blobURL&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#005CC5;--1:#79B8FF&quot;&gt;URL&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;createObjectURL&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(blob);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#B392F0&quot;&gt;OriginalWorker&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;(blobURL, options);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#E1E4E8&quot;&gt;})();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;// ==UserScript==// @name         Spine Worker Image Override// @namespace    spine-override// @version      1.1// @match        https://kivo.wiki/*// @run-at       document-start// @grant        none// ==/UserScript==(function () {  &amp;#x27;use strict&amp;#x27;;  const TARGET_MAP = {    &amp;#x27;NP0268_spr.png&amp;#x27;: &amp;#x27;https://example.com/override/NP0268_spr.png&amp;#x27;,  };  const OriginalWorker = window.Worker;  window.Worker = function (scriptURL, options) {    if (typeof scriptURL === &amp;#x27;string&amp;#x27;) {      return createHookedWorker(scriptURL, options);    }    return new OriginalWorker(scriptURL, options);  };  function createHookedWorker(scriptURL, options) {    const injectedCode =      &amp;#x60;      (function () {        const MAP = ${JSON.stringify(TARGET_MAP)};        const originalFetch = self.fetch;        self.fetch = async function (input, init) {          let url = typeof input === &amp;#x27;string&amp;#x27; ? input : input &amp;#x26;&amp;#x26; input.url;          if (url) {            for (const key in MAP) {              if (url.includes(key)) {                console.warn(&amp;#x27;[Spine Override]&amp;#x27;, url, &amp;#x27;→&amp;#x27;, MAP[key]);                return originalFetch(MAP[key], init);              }            }          }          return originalFetch(input, init);        };      })();      &amp;#x60;;    const blob = new Blob(      [        injectedCode,        &amp;#x27;\nimportScripts(&amp;#x27; + JSON.stringify(scriptURL) + &amp;#x27;);&amp;#x27;,      ],      { type: &amp;#x27;application/javascript&amp;#x27; }    );    const blobURL = URL.createObjectURL(blob);    return new OriginalWorker(blobURL, options);  }})();&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;于是，我将立绘图片上传到了我的服务器，并修改了域名。&lt;/p&gt;
&lt;p&gt;但刷新页面之后，Spine 立绘无法加载，DevTools Console 报错：&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;[Spine Override] https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png → http://xxx.xxx.xx.xx/NP0268_spr.png self.fetch @ 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:11 loadImageBitmap @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:5 self.onmessage @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:14 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:12 Mixed Content: The page at &apos;blob:https://kivo.wiki/7d7eac1e-8b80-4015-8514-c017ba6c7ca2&apos; was loaded over HTTPS, but requested an insecure resource &apos;http://xxx.xxx.xx.xx/NP0268_spr.png&apos;. This request has been blocked; the content must be served over HTTPS. self.fetch @ 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:12 loadImageBitmap @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:5 self.onmessage @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:14 sentry-D4D12I93.js:17 Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/CH0202_spr.atlas. Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[Spine Override] https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png → http://xxx.xxx.xx.xx/NP0268_spr.png self.fetch @ 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:11 loadImageBitmap @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:5 self.onmessage @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:14 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:12 Mixed Content: The page at &amp;#x27;blob:https://kivo.wiki/7d7eac1e-8b80-4015-8514-c017ba6c7ca2&amp;#x27; was loaded over HTTPS, but requested an insecure resource &amp;#x27;http://xxx.xxx.xx.xx/NP0268_spr.png&amp;#x27;. This request has been blocked; the content must be served over HTTPS. self.fetch @ 7d7eac1e-8b80-4015-8514-c017ba6c7ca2:12 loadImageBitmap @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:5 self.onmessage @ 8f00bb13-cd26-4779-bde6-1977f548b5b7:14 sentry-D4D12I93.js:17 Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/CH0202_spr.atlas. Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;换成了 HTTPS 之后，报错变了：&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292e;--1:#e1e4e8&quot;&gt;[Spine Override] https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png → https://example.com/NP0268_spr.png self.fetch @ bcefff58-2983-41a1-a59f-4d328348b06f:11 loadImageBitmap @ 837f676f-50bc-48a9-975e-801a053a76da:5 self.onmessage @ 837f676f-50bc-48a9-975e-801a053a76da:14Understand this warning Access to fetch at &apos;https://example.com/NP0268_spr.png&apos; from origin &apos;https://kivo.wiki&apos; has been blocked by CORS policy: No &apos;Access-Control-Allow-Origin&apos; header is present on the requested resource.Understand this error 31?mode=appreciation:1 Access to fetch at &apos;https://example.com/NP0268_spr.png&apos; from origin &apos;https://kivo.wiki&apos; has been blocked by CORS policy: No &apos;Access-Control-Allow-Origin&apos; header is present on the requested resource.Understand this error sentry-D4D12I93.js:17 Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/CH0202_spr.atlas. Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[Spine Override] https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png → https://example.com/NP0268_spr.png self.fetch @ bcefff58-2983-41a1-a59f-4d328348b06f:11 loadImageBitmap @ 837f676f-50bc-48a9-975e-801a053a76da:5 self.onmessage @ 837f676f-50bc-48a9-975e-801a053a76da:14Understand this warning Access to fetch at &amp;#x27;https://example.com/NP0268_spr.png&amp;#x27; from origin &amp;#x27;https://kivo.wiki&amp;#x27; has been blocked by CORS policy: No &amp;#x27;Access-Control-Allow-Origin&amp;#x27; header is present on the requested resource.Understand this error 31?mode=appreciation:1 Access to fetch at &amp;#x27;https://example.com/NP0268_spr.png&amp;#x27; from origin &amp;#x27;https://kivo.wiki&amp;#x27; has been blocked by CORS policy: No &amp;#x27;Access-Control-Allow-Origin&amp;#x27; header is present on the requested resource.Understand this error sentry-D4D12I93.js:17 Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/CH0202_spr.atlas. Error: [Loader.load] Failed to load https://static.kivo.wiki/spines/CH0202_spr/NP0268_spr.png.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;问了下 GPT 之后，是因为网站没有开启 CORS 导致的，在服务器开启了 CORS 后问题消失。&lt;/p&gt;
&lt;p&gt;之后，你就可以在 kivo.wiki 使用自己的 Spine 文件了。&lt;/p&gt;
&lt;h2 id=&quot;结尾&quot;&gt;结尾&lt;/h2&gt;
&lt;p&gt;我在执行了上述步骤之后才发现，kivo.wiki 网站本身已经有我想要的立绘文件了…&lt;/p&gt;
&lt;p&gt;那就把我的方法分享出来，万一别人用得上呢…&lt;/p&gt;
&lt;p&gt;总之，感谢阅读这篇文章。&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;em&gt;*部分日志经过脱敏处理&lt;/em&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1-2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>技术</category></item><item><title>琐事记 #3：训练日常、烫伤、长春一日游</title><link>https://blog.gytxtx.top/article/2025/12/weekly-diary_3/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/12/weekly-diary_3/</guid><description>欢迎回来。 还有几天就是 2026 年了，提前祝各位新年快乐。</description><pubDate>Sun, 28 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;欢迎回来。&lt;/p&gt;
&lt;p&gt;还有几天就是 2026 年了，提前祝各位新年快乐。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;时间范围：&lt;code&gt;2025-12-22&lt;/code&gt; ~ &lt;code&gt;2025-12-27&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;关键词：&lt;code&gt;训练日常&lt;/code&gt;、&lt;code&gt;烫伤&lt;/code&gt;、&lt;code&gt;长春一日游&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;训练日常&quot;&gt;训练日常&lt;/h2&gt;
&lt;p&gt;书接上文。&lt;/p&gt;
&lt;p&gt;星期三上午的大课间，我被班主任叫了过去，说有位老师找我。问清楚办公室位置后，我便直接过去了。&lt;/p&gt;
&lt;p&gt;那位老师简单向我说明了训练的时间和地点，又和我讨论了一些技能大赛的选材问题。临走前，她递给我几张本次大赛的赛项规程，并让我晚自习再来找她，届时会带我和其他几位同学一起去训练地点。当天下午的训练由另一位男老师负责组织。&lt;/p&gt;
&lt;p&gt;回到班级后，我仔细翻看了那份“赛项规程”，其中有一段内容让我颇为困惑：（节选）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;四、参赛要求&lt;/strong&gt;&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;比赛内容。&lt;u&gt;参赛队伍依据赛道和赛项设置，结合所学专业和教育教学实际，围绕生产、管理、服务一线真问题、真场景，自主确定参赛项目名称，自主设计参赛项目内容，自主选择参赛设备，展示真技能。&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;这段表述看起来宏大，却并没有给出任何可操作的指引。我随后去询问了那位老师，结果她同样被这一要求困住了——具体的项目内容和训练方案，她也一时没有头绪。最后只说了一句：“等我再和**（之前那位男老师）研究一下，再决定吧。”便让我先回去了。&lt;/p&gt;
&lt;p&gt;没办法，只能等到晚自习。&lt;/p&gt;
&lt;p&gt;晚自习时，我去了她所管理的班级。她见到我后，便带着我和班里的几名同学一起前往四楼的训练教室。所谓训练教室，其实也只是平时上课用的计算机教室而已。&lt;/p&gt;
&lt;p&gt;到了之后才发现门还锁着，幸好那位男老师随后赶到，打开了教室。&lt;/p&gt;
&lt;p&gt;那时我还不知道，这次训练的内容，会和我对“人工智能”的理解产生不小的偏差。&lt;/p&gt;
&lt;p&gt;由于训练内容尚未明确，老师便让我使用他之前提到的 &lt;a href=&quot;https://www.coze.cn/space-preview&quot;&gt;coze&lt;/a&gt; 平台进行编程。但该平台必须使用手机号登录，而我的手机恰好留在了教室里，只好卡在了登录这一步。&lt;/p&gt;
&lt;p&gt;向老师说明情况后，他用自己的手机号登录了平台。说是编程，实际上只是用 coze 搭建一个电商抽奖程序。&lt;/p&gt;
&lt;p&gt;只是，我始终不太明白，这样的内容和赛项名称中的“人工智能”究竟有什么关系。在我看来，这更像是一个普通的业务逻辑程序。若要称得上“人工智能”，至少应该是利用 AI 去解决某个实际问题——例如基于图像识别的物品分拣——并且最终成品本身应当与 AI 强相关，而不是仅仅在制作过程中“用到”了 AI。&lt;/p&gt;
&lt;p&gt;当时我并没有提出这些疑问，只是按老师的要求完成了程序。但这些困惑，还是在之后慢慢浮现出来。&lt;/p&gt;
&lt;p&gt;很快，晚自习结束，放学如期而至。我带着这些尚未理清的问题，走在回家的路上。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;星期四是训练的第二天，这次由那位女老师负责。&lt;/p&gt;
&lt;p&gt;她先是询问了前一天男老师的训练情况，但我当时有些紧张，再加上作息混乱带来的记忆力问题，并没能给出一个完整的描述。于是，这一天的训练内容又变成了“制作 AI 客服”。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实，这两个训练内容之间确实存在一些联系，比如都和学校的电子商务专业有关，但也仅止于此。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其他同学用 coze 做出了一个勉强成形的半成品，却始终无法正常运行。我尝试在本地使用 Python 环境复现，但由于缺少 coze 平台的专有依赖，最终只能作罢。&lt;/p&gt;
&lt;p&gt;很快，星期四的晚自习也结束了。&lt;/p&gt;
&lt;p&gt;直到现在，这个问题仍旧在我的脑海中挥之不去。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;烫伤&quot;&gt;烫伤&lt;/h2&gt;
&lt;p&gt;事情发生在星期五上午的第一节课，当时我们在计算机室上课。&lt;/p&gt;
&lt;p&gt;由于课程分组的缘故，我的座位斜对角坐着一名班内出了名爱惹事的同学。平时他言行冲动，喜欢用夸张和挑衅的方式引人注意，班里的大多数人都不太愿意和他接触。&lt;/p&gt;
&lt;p&gt;上课期间，他一直把玩着手里的防风打火机，时不时点火。我注意到了，但并没有放在心上。期间他几次叫我看他点火，我都没有回应。&lt;/p&gt;
&lt;p&gt;直到后来，他叫了我，用椅子塑料扶手托着一枚一元硬币，说要给我。&lt;/p&gt;
&lt;p&gt;我没有多想，伸手接了过来。下一秒，手指传来一阵灼痛——那枚硬币是烫的，随即掉在了地上。&lt;/p&gt;
&lt;p&gt;我立刻反应过来，他先用打火机将硬币加热，再递给了我。&lt;/p&gt;
&lt;p&gt;我愣了几秒，随后大声骂了他几句。老师注意到了情况，让我立刻去洗手间用冷水冲洗手指。我照做后回到了教室。&lt;/p&gt;
&lt;p&gt;起初，被烫伤的部位只是颜色与正常皮肤不同，并没有明显痛感。但等上午的课程结束后，伤处开始起泡，并伴随着刺痛感。我随即将情况向班主任说明。&lt;/p&gt;
&lt;p&gt;班主任核实情况后，联系了他的家长，并没收了打火机，当场对他进行了批评。随后，我请了假。等家长到校后，对方带我前往医院检查。&lt;/p&gt;
&lt;p&gt;医生表示伤情并不严重，只需要按时涂抹药膏即可。&lt;/p&gt;
&lt;p&gt;事情大致就是这样，不想再多说什么。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;长春一日游&quot;&gt;长春一日游&lt;/h2&gt;
&lt;p&gt;汲取了上一次“办卡受阻”的经验，这周我决定换一种策略。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;星期一，我以“技能大赛老师需要身份证录入参赛选手信息”和“奖金需要打到银行卡”为由，拿回了身份证和银行卡；&lt;/li&gt;
&lt;li&gt;星期四，又用“老师要带我去长春观摩技能大赛经验”为理由，说服母亲同意这次出行；&lt;/li&gt;
&lt;li&gt;星期五，提前买好了充电宝，避免途中手机没电。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;万事俱备，只欠东风。&lt;/p&gt;
&lt;p&gt;星期六一早，闹钟准时响起。我收拾好随身物品，踏上了前往长春的行程。&lt;/p&gt;
&lt;p&gt;由于没有直达车票，我选择了中转路线：先从舒兰市乘坐 K7426 次列车到吉林市，再换乘高铁前往长春，返程亦然。&lt;/p&gt;
&lt;p&gt;上午 9:40，我顺利抵达长春。&lt;/p&gt;
&lt;p&gt;出站后，我乘坐地铁 1 号线从长春站前往庆丰路站，步行几百米来到招商银行（宽城支行）。向工作人员说明来意后，对方询问我手机号是否为本人实名。&lt;/p&gt;
&lt;p&gt;遗憾的是，我并没有本人实名的手机号。她表示问题不大，但需要提供能够证明我与实名人关系的材料，例如户口簿或出生证明。&lt;/p&gt;
&lt;p&gt;由于我和母亲并不在同一户籍，户口簿无法使用。我询问出生证明是否可以，对方给予肯定答复，并表示照片同样有效。于是我联系了母亲，请她回家拍摄出生证明。&lt;/p&gt;
&lt;p&gt;等待期间，我又向工作人员了解了该卡的具体限制条件。得知若无法提供学生身份证明（如学生证），可能只能开立二类账户，且外汇结算会受到一定限制。&lt;/p&gt;
&lt;p&gt;考虑到还需要等待材料，我决定先离开银行，顺路在附近转了转，去了几家二次元周边店，但并没有找到特别想要的角色。为了不让这一趟显得太“空”，还是买了些其他周边，顺便吃了个麦当劳。&lt;/p&gt;
&lt;p&gt;随后，我又前往了附近的另一家招商银行（人民广场支行）咨询相关事项。工作人员帮我完成了卡片预约，并告知制卡成功后即可到网点领取。&lt;/p&gt;
&lt;p&gt;在等待期间，我去了伪满皇宫博物院参观。票价七十多元，但未成年人可以免费入馆，我简单转了一圈。正准备离开时，手机提示可以前往领取卡片，但此时距离银行下班时间已经所剩无几，只能作罢。&lt;/p&gt;
&lt;p&gt;最终，我没有在当天把卡拿到手。&lt;/p&gt;
&lt;p&gt;傍晚，我按原计划返程。行程比预想中顺利，晚上六点左右，我回到了舒兰市。&lt;/p&gt;
&lt;p&gt;这趟长春之行并不算圆满，卡没当场办下来，也跑了几趟网点。但至少，我真的自己规划了一次出行路线，独立完成了一次跨城办事。&lt;/p&gt;
&lt;p&gt;事情还没结束，但至少，我已经开始自己往前走了。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>琐事记 #2：被打、大赛后续、办卡</title><link>https://blog.gytxtx.top/article/2025/12/weekly-diary_2/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/12/weekly-diary_2/</guid><description>各位好。 这个周末心情并不算好，但还是决定把这一周记下来。写的时候情绪可能有些激动，如有不妥之处，还请见谅。</description><pubDate>Sun, 21 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;各位好。&lt;/p&gt;
&lt;p&gt;这个周末心情并不算好，但还是决定把这一周记下来。写的时候情绪可能有些激动，如有不妥之处，还请见谅。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;时间范围：&lt;code&gt;2025-12-15&lt;/code&gt; ~ &lt;code&gt;2025-12-21&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;关键词：&lt;code&gt;被打&lt;/code&gt;、&lt;code&gt;大赛后续&lt;/code&gt;、&lt;code&gt;办卡&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;被打&quot;&gt;被打&lt;/h2&gt;
&lt;p&gt;那是周二的数学课，教室里异常喧闹。数学老师多次组织纪律都没什么效果。我们的主角，这里简称他为 &lt;strong&gt;A&lt;/strong&gt;，显然有些忍不住了，突然在教室里大喊了一声“别说话了”。&lt;/p&gt;
&lt;p&gt;然而这一举动并没有起到任何作用，反而引来了一阵阵笑声。&lt;/p&gt;
&lt;p&gt;下课后，我站在教室里的电子白板前浏览网页。A 突然冲进教室，在我毫无预兆的情况下说了几句话（具体内容我已经记不清了），随后用拳头在我胸口捶了好几下。&lt;/p&gt;
&lt;p&gt;那一瞬间我整个人愣住了，甚至没来得及反应疼不疼。几秒之后，我才反应过来，大声骂了他几句。他随即冲出教室，在走廊里大喊大叫，并做出了一些怪异的举动。&lt;/p&gt;
&lt;p&gt;很快，走廊站岗的老师注意到了情况，联系了年级主任和班主任，并把我叫了出去。&lt;/p&gt;
&lt;p&gt;班主任先询问了我被打的经过，又问我需不需要去医院。我当时觉得问题不大，便拒绝了。&lt;/p&gt;
&lt;p&gt;之后，A 向我道了歉，年级主任也简单安抚了几句。在再次确认我“没什么事”后，他便离开了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;补充说明一下：A 平时的行为就与常人相比显得有些怪异，&lt;br&gt;
经常会做出一些让全班同学哄堂大笑的举动。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;到了中午，我逐渐感觉胸口被打的部位开始隐隐作痛，便向班主任请假。班主任拒绝了，理由我已经记不太清，大致是这种情况下请假容易出问题。不过，他表示可以联系 A 的家长，带我去医院做一次检查。&lt;/p&gt;
&lt;p&gt;我同意了。&lt;/p&gt;
&lt;p&gt;双方家长到校后，A 的家长第一时间向我道了歉，并陪同我前往医院。检查结果显示并无大碍，只是有轻微炎症。&lt;/p&gt;
&lt;p&gt;医生给我开了消炎药，并叮嘱按时服用。临走时，A 的父亲为了表示歉意，给了我 500 元，并开车把我送回了家。&lt;/p&gt;
&lt;p&gt;说实话，我其实能理解 A 的家长。A 平时的状态，想必也让他们操了不少心。听说他们带 A 去过不少医院，但始终没什么明显效果。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;大赛后续&quot;&gt;大赛后续&lt;/h2&gt;
&lt;p&gt;星期四晚自习时，走廊正好又是那位老师站岗。我趁机向他询问了上次没有来的原因，并顺便聊了聊技能大赛的事情。&lt;/p&gt;
&lt;p&gt;他解释说，上次确实是临时有事耽搁了。随后，他让我第二天带上电脑，在学校文艺演出结束后去找他。&lt;/p&gt;
&lt;p&gt;第二天上午，文艺演出结束后，我在原地等了一会儿，他却一直没有出现。等得有些着急了，我便主动去了他的办公室。&lt;/p&gt;
&lt;p&gt;他说正准备上楼找我，只是被论文的事情耽误了时间。简单聊了几句后，由于要上课，他让我先回教室，晚自习再去找他。&lt;/p&gt;
&lt;p&gt;晚饭后，我带着笔记本电脑再次去了他的办公室。他看了我做过的一些作品，也和我交流了技能大赛相关的内容。最后，他让我下周一到办公室来，说要给我分配一台电脑。&lt;/p&gt;
&lt;p&gt;所以说……我这是被选上了？&lt;/p&gt;
&lt;p&gt;如果真是这样，那确实是个好消息。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;办卡受阻&quot;&gt;办卡受阻&lt;/h2&gt;
&lt;p&gt;由于我有境外支付的需求，而国内银联发行的银行卡在部分境外网站上无法使用，因此我打算办理一张支持境外支付的银行卡。&lt;/p&gt;
&lt;p&gt;在查资料的过程中，我读到了这篇文章：&lt;a href=&quot;https://www.yuanzj.top/posts/6296b3fa.html&quot;&gt;16 岁可办理的招行万事达借记卡&lt;/a&gt;。但很快发现，我所在的地区并没有招商银行的线下网点。如果要办理，只能前往有分行的城市。&lt;/p&gt;
&lt;p&gt;经过查询，吉林和长春都有相应网点。综合考虑往返行程后，我决定周六前往长春办理。&lt;/p&gt;
&lt;p&gt;从条件上看，我的年龄符合要求，也可以在没有监护人陪同的情况下乘坐火车出行，因此我原本并不觉得这件事会有什么问题。&lt;/p&gt;
&lt;p&gt;然而，周五突然下起了雨。虽然雨势不算大，但需要考虑路面结冰的情况。就在这时，母亲明确表示反对我周六出行，理由是“周六是初一，出门不吉利”。&lt;/p&gt;
&lt;p&gt;我坚持要去，她则表示：“你要是周六去，那以后也别想去了。”无奈之下，我只好妥协，改为周日出行，她也暂时默许了。&lt;/p&gt;
&lt;p&gt;周六晚上，我设置好闹钟，准备第二天一早出发。&lt;/p&gt;
&lt;p&gt;可周日一睁眼，已经是八点多了。我再一找，发现身份证不见了。&lt;/p&gt;
&lt;p&gt;我立刻去找母亲理论，她给出的理由变成了：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;“我昨晚没做什么好梦”&lt;/li&gt;
&lt;li&gt;“路面结冰不安全”&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;第二个理由我还能理解，但第一个理由实在让我无话可说。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;就因为“昨晚做了噩梦”，这次出行就被否定了吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那一刻，我几乎立刻和母亲吵了起来，但争执了很久，也没有任何结果。&lt;/p&gt;
&lt;p&gt;而当我追问“为什么做噩梦就去不了了”的时候，她给出的回答是：“因为是神的提示”。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;她随后举了一个例子，说有人因为“神的提示”没上车，结果那趟车后来出了事。&lt;/p&gt;
&lt;p&gt;我甚至不知道这个故事是否真实，也不知道该从哪里去反驳。那一刻我意识到，我们已经不在讨论同一件事情了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;现在回头看，这件事本身或许算不上什么大事，但当时那种被完全否定、无法掌控自己计划的无力感，却是真实存在的。&lt;/p&gt;
&lt;p&gt;总之，只能下周再找机会了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这一周大致就是这样。&lt;/p&gt;
&lt;p&gt;有些事情当下很难消化，只能先记下来，等时间过去再回头看吧。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>琐事记 #1：生日、入团、技能大赛</title><link>https://blog.gytxtx.top/article/2025/12/weekly-diary/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/12/weekly-diary/</guid><description>好久不见。 最近难得清闲，索性写一篇记录来填补周末的空白。形式上参考了几位朋友的博客，但内容依旧随意而松散。 之所以没有把标题定为“周记”，而是叫作“琐事记”，主要还是因为更新并不规律。既然做不到每周一篇，那不如索性坦诚一些，记录些零碎的小事就好。</description><pubDate>Sun, 14 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;好久不见。&lt;/p&gt;
&lt;p&gt;最近难得清闲，索性写一篇记录来填补周末的空白。形式上参考了几位朋友的博客，但内容依旧随意而松散。&lt;/p&gt;
&lt;p&gt;之所以没有把标题定为“周记”，而是叫作“琐事记”，主要还是因为更新并不规律。既然做不到每周一篇，那不如索性坦诚一些，记录些零碎的小事就好。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文记录的时间范围为：&lt;code&gt;2025-12-08&lt;/code&gt; ~ &lt;code&gt;2025-12-12&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;关键词：&lt;code&gt;生日&lt;/code&gt;、&lt;code&gt;入团&lt;/code&gt;、&lt;code&gt;技能大赛&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;小绿生日&quot;&gt;小绿生日&lt;/h2&gt;
&lt;p&gt;12 月 8 日是才羽绿（以下简称“小绿”）的生日。&lt;/p&gt;
&lt;p&gt;其实在 12 月 7 日时，我就已经冒出了做一个网页小游戏的想法，但真正动手还是拖到了生日当天的早上。时间仓促，不过整体效果还算令自己满意。&lt;/p&gt;
&lt;p&gt;顺带一提，这个小游戏已经开源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;游玩地址：&lt;a href=&quot;https://clicker.saibamidori.moe/&quot;&gt;https://clicker.saibamidori.moe/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;开源仓库：&lt;a href=&quot;https://github.com/Saiba-Midori-Projects/Midori-Clicker/&quot;&gt;https://github.com/Saiba-Midori-Projects/Midori-Clicker/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之，祝小绿生日快乐。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;加入共青团&quot;&gt;加入共青团&lt;/h2&gt;
&lt;p&gt;这周之前的一天，下课时老师把我和几位同学叫到讲台前，分别发了一份入团积极分子考试题。&lt;/p&gt;
&lt;p&gt;除了试题本身，还附带了一份答案。老师让我们尽快背熟，下午第一节课参加考试。&lt;/p&gt;
&lt;p&gt;然而，当我和几位同学去询问走廊站岗老师具体考试时间时，却得到了完全不同的答复——她说考试安排在上午大课间，而下午第一节课是班主任会议时间。可那时，大课间已经过去了将近一半。&lt;/p&gt;
&lt;p&gt;无奈之下，只能等班主任回来再商量。最终，他决定中午带我们参加补考。&lt;/p&gt;
&lt;p&gt;过程出乎意料地顺利，考试通过了。但由于通知不及时，我直到上周才知道自己已经通过，甚至一度以为是没过。&lt;/p&gt;
&lt;p&gt;直到团支书亲口告诉我结果，那一刻才真正松了口气，也高兴得不行。&lt;/p&gt;
&lt;p&gt;不过，事情并没有完全结束。入团仪式结束后的几天，我又被告知：由于我们这一批次的编号出现问题，暂时无法正式入团，需要等到下一届再统一办理。&lt;/p&gt;
&lt;p&gt;也就是说，只能等到明年了。&lt;/p&gt;
&lt;p&gt;另外，入团仪式当天，学校公众号也发布了一篇&lt;a href=&quot;https://mp.weixin.qq.com/s/l3CONMz8vqJ87CEtCyTNUQ&quot;&gt;相关文章&lt;/a&gt;，感兴趣的话可以看看。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;技能大赛&quot;&gt;技能大赛&lt;/h2&gt;
&lt;p&gt;大概是周三、临近晚自习的时候，一位电商专业的老师找到我（我是计算机专业的）。他听说我在计算机方面比较擅长，便询问我是否有兴趣参加技能大赛。&lt;/p&gt;
&lt;p&gt;他问了我一些问题，包括：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;一些计算机相关的基础问题&lt;/li&gt;
&lt;li&gt;是否做过软件或项目&lt;/li&gt;
&lt;li&gt;有没有参加技能大赛的想法&lt;/li&gt;
&lt;li&gt;是否会使用翻墙软件&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单交流后，他让我第二天带着笔记本电脑到学校，向他展示我做过的软件。&lt;/p&gt;
&lt;p&gt;于是第二天我带着电脑去了学校，但那位老师并没有出现。周五也是如此。&lt;/p&gt;
&lt;p&gt;起初我还以为是班主任没有转达消息，便特地去了电商专业老师的办公室询问。结果得知，他只是临时有事。&lt;/p&gt;
&lt;p&gt;目前也只能等到下周，再看看是否还有后续了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这周大致就是这样。虽然都是些零碎的小事，但回头一看，倒也还算充实。希望下次记录时，能有更多值得写下来的内容。&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>Google Pixel 5 开启 VoLTE 实录</title><link>https://blog.gytxtx.top/article/2025/10/google-pixel-5-volte/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/10/google-pixel-5-volte/</guid><description>我之前一直在用的 Vivo X9 Plus，因为性能老旧、系统卡顿等原因，使用体验越来越差。于是我开始考虑更换一部能解锁、能折腾的手机。 本来打算买小米，但近几年小米对 Bootloader 解锁限制越来越严格，最终我把目标转向了朋友推荐的 Google Pixel 系列 。 在预算范围内，Pixel 5 的配置和手感都不错，于是我入手了它。 本文记录我在使用 Pixel 5 时，开启 VoLTE 功能 的过程与体验。</description><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我之前一直在用的 Vivo X9 Plus，因为性能老旧、系统卡顿等原因，使用体验越来越差。于是我开始考虑更换一部能解锁、能折腾的手机。&lt;/p&gt;
&lt;p&gt;本来打算买小米，但近几年小米对 Bootloader 解锁限制越来越严格，最终我把目标转向了朋友推荐的 &lt;strong&gt;Google Pixel 系列&lt;/strong&gt;。&lt;br&gt;
在预算范围内，Pixel 5 的配置和手感都不错，于是我入手了它。&lt;/p&gt;
&lt;p&gt;本文记录我在使用 Pixel 5 时，开启 &lt;strong&gt;VoLTE 功能&lt;/strong&gt; 的过程与体验。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;硬件配置与日常体验&quot;&gt;硬件配置与日常体验&lt;/h2&gt;
&lt;p&gt;Pixel 5 搭载 Snapdragon 765G 处理器，配备 8 GB 内存与 128 GB 存储。&lt;br&gt;
虽然这颗芯片发布于 2019 年，但对比我之前的 Snapdragon 653 来说，性能提升相当明显。&lt;/p&gt;
&lt;p&gt;屏幕是一块 1080 × 2340 的 OLED 面板，支持 90 Hz 刷新率。&lt;br&gt;
系统操作流畅，日常使用微信、支付宝、哔哩哔哩等国产应用也不会明显卡顿。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;通话与网络问题&quot;&gt;通话与网络问题&lt;/h2&gt;
&lt;p&gt;由于 Pixel 系列未在中国大陆发售，Google 默认 &lt;strong&gt;禁用了中国地区的 VoLTE 和 5G 功能&lt;/strong&gt;。&lt;br&gt;
插入中国移动 SIM 卡后，可以上网与通话，但不支持 VoLTE，通话时会自动切换到 EDGE 网络，质量较差。&lt;br&gt;
而在使用中国联通 SIM 卡时，由于部分地区已停用 3G 基站，甚至无法拨号。&lt;/p&gt;
&lt;p&gt;因此，要正常使用通话功能，&lt;strong&gt;开启 VoLTE 就显得十分必要。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;开启-volte-的过程&quot;&gt;开启 VoLTE 的过程&lt;/h2&gt;
&lt;p&gt;我最初尝试了 &lt;a href=&quot;https://github.com/kyujin-cho/pixel-volte-patch&quot;&gt;Pixel IMS&lt;/a&gt; 项目，但文档中明确说明 &lt;strong&gt;不支持 Pixel 5&lt;/strong&gt;，尝试后也未成功。&lt;/p&gt;
&lt;p&gt;后来参考了这篇教程：&lt;a href=&quot;https://blog.youth2009.org/pixel-5-flash-root-enable-volte/&quot;&gt;在 Pixel 5 上开启 VoLTE 的解决方案&lt;/a&gt;，&lt;br&gt;
按照步骤刷入 Magisk 模块并修改配置后，VoLTE 功能成功恢复。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;该方法需解锁 Bootloader 并 Root 设备，可能导致系统不稳定或无法接收 OTA 更新。&lt;/li&gt;
&lt;li&gt;操作前务必备份数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;Pixel 5 虽然已是一款老设备，但在系统优化和整体体验上依旧出色。&lt;br&gt;
解决 VoLTE 问题后，作为主力机完全够用。&lt;br&gt;
如果你也喜欢干净纯粹的 Android 系统，并不介意折腾，这款设备依然值得一试。&lt;/p&gt;</content:encoded><category>玩机</category></item><item><title>使用 Cloudflare DNS 轻松实现域名重定向</title><link>https://blog.gytxtx.top/article/2025/10/cloudflare-redirect/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/10/cloudflare-redirect/</guid><description>喜迎国庆假期，可算有时间了，那就写一篇博客吧 （水） 我之前也有重定向域名的需求，但不想消耗服务器资源 （说到底还是没有钱） ，当时的我采取了用静态网页托管 + JavaScript 重定向的方式。这篇文章将会记录使用 Cloudflare DNS 实现域名重定向的方法。</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;喜迎国庆假期，可算有时间了，那就写一篇博客吧 &lt;del&gt;（水）&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;我之前也有重定向域名的需求，但不想消耗服务器资源 &lt;del&gt;（说到底还是没有钱）&lt;/del&gt;，当时的我采取了用静态网页托管 + JavaScript 重定向的方式。这篇文章将会记录使用 Cloudflare DNS 实现域名重定向的方法。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;准备工作&quot;&gt;准备工作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cloudflare 账号&lt;/li&gt;
&lt;li&gt;要重定向的域名（需提前绑定在 Cloudflare）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里用我的域名 &lt;code&gt;gytxtx.xyz&lt;/code&gt; 作为示例，演示从根域名 &lt;code&gt;gytxtx.xyz&lt;/code&gt; 重定向为 &lt;code&gt;www.gytxtx.xyz&lt;/code&gt; 的方法。&lt;/p&gt;
&lt;h2 id=&quot;1-添加-dns-记录&quot;&gt;1. 添加 DNS 记录&lt;/h2&gt;
&lt;p&gt;进入 Cloudflare -&gt; 点击需要重定向的主域名 -&gt; DNS&lt;/p&gt;
&lt;p&gt;之后，为你的根域名 &lt;code&gt;@&lt;/code&gt; 添加一条 A 记录，指向任意 dummy IP（比如 &lt;code&gt;192.0.2.1&lt;/code&gt;），并确保开启 Proxy（代理）：&lt;br&gt;
&lt;img alt=&quot;Cloudflare 根域名 A 记录与代理状态设置&quot; title=&quot;就像这样&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;619&quot; src=&quot;https://blog.gytxtx.top/_astro/Image-1.C1xvgD-N_q3FE2.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-创建重定向规则&quot;&gt;2. 创建重定向规则&lt;/h2&gt;
&lt;p&gt;进入 Cloudflare -&gt; 点击需要重定向的主域名 -&gt; 规则 -&gt; 创建规则 -&gt; 重定向规则&lt;/p&gt;
&lt;p&gt;选择模板 &lt;strong&gt;从根重定向到 WWW&lt;/strong&gt;：&lt;br&gt;
&lt;img alt=&quot;Cloudflare 从根域名重定向到 WWW 的规则模板&quot; title=&quot;示意&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;953&quot; src=&quot;https://blog.gytxtx.top/_astro/Image-2.BWHSg2Un_qvmLH.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;当然，也可以这样：&lt;br&gt;
&lt;img alt=&quot;Cloudflare 重定向规则的另一种配置方式&quot; title=&quot;示意&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;953&quot; src=&quot;https://blog.gytxtx.top/_astro/Image-3.g_QOwGaS_1pjcaz.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;此时，模板应该是这个样子：&lt;br&gt;
&lt;img alt=&quot;配置完成的 Cloudflare 域名重定向模板&quot; title=&quot;模板示意&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;937&quot; height=&quot;829&quot; src=&quot;https://blog.gytxtx.top/_astro/Image-4.Du28e-sL_1Kk0Nx.webp&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;&lt;br&gt;
此处的 &lt;code&gt;gytxtx.xyz&lt;/code&gt; 可替换为您自己的域名。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3-保存并部署&quot;&gt;3. 保存并部署&lt;/h2&gt;
&lt;p&gt;点击 &lt;strong&gt;部署&lt;/strong&gt;，稍等几分钟规则即可生效。&lt;/p&gt;
&lt;p&gt;此时，访问 &lt;code&gt;https://gytxtx.xyz/example?foo=bar&lt;/code&gt; 将会重定向到 &lt;code&gt;https://www.gytxtx.xyz/example?foo=bar&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小提示&lt;/strong&gt;&lt;br&gt;
可自行探索 Cloudflare 规则模板，实现其他操作。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><category>建站</category></item><item><title>本站域名已更改</title><link>https://blog.gytxtx.top/article/2025/08/domain-changed/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/08/domain-changed/</guid><description>由于域名 https://gytxtx.xyz/ 将在 2025-10-07 到期，为避免潜在的不良影响，现将本站域名迁移至 https://gytxtx.top/ 下。</description><pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;由于域名 &lt;a href=&quot;https://gytxtx.xyz/&quot;&gt;https://gytxtx.xyz/&lt;/a&gt; 将在 2025-10-07 到期，为避免潜在的不良影响，现将本站域名迁移至 &lt;a href=&quot;https://gytxtx.top/&quot;&gt;https://gytxtx.top/&lt;/a&gt; 下。&lt;/p&gt;
&lt;h2 id=&quot;域名示意&quot;&gt;域名示意&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;旧域名：&lt;a href=&quot;https://blog.gytxtx.xyz/&quot;&gt;https://blog.gytxtx.xyz/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;新域名：&lt;a href=&quot;https://blog.gytxtx.top/&quot;&gt;https://blog.gytxtx.top/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;感谢您的理解。&lt;/p&gt;</content:encoded><category>建站</category></item><item><title>中考必胜</title><link>https://blog.gytxtx.top/article/2025/06/zhongkao/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/06/zhongkao/</guid><description>明日(2025-06-27) 中考，祝所有考生都能考上自己的第一志愿，金榜题名！</description><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;明日(&lt;code&gt;2025-06-27&lt;/code&gt;) 中考，祝所有考生都能考上自己的第一志愿，金榜题名！&lt;/p&gt;</content:encoded><category>生活</category></item><item><title>停更三年项目后，一个中学生亲历的易语言消亡史</title><link>https://blog.gytxtx.top/article/2025/06/eyuyan/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/06/eyuyan/</guid><description>最近，我停止维护了我开发了 3 年的项目，总感觉不写点什么说不过去，于是就有了这篇文章。</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近，我停止维护了我开发了 3 年的项目，总感觉不写点什么说不过去，于是就有了这篇文章。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;最近将大部分精力都忙于开发 &lt;strong&gt;蓝屏工具箱新 UI&lt;/strong&gt; 了，也渐渐发现了易语言的一些问题（其实早就发现了），且 KFACBT’s Toolkit 项目代码结构过于复杂，实在无力维护。于是，我在 &lt;code&gt;2025-05-30&lt;/code&gt; 宣布项目永久停止维护并解散了相关用户交流群，有感而发，撰写此文。&lt;/p&gt;
&lt;h2 id=&quot;情怀&quot;&gt;情怀&lt;/h2&gt;
&lt;p&gt;在 2022 年，那时我还在上初一（下半学期），那时我几乎是刚接触易语言，我就用易语言写了一个测试项目，（当时也不知道是脑子抽了还是怎么，就开始往这个项目内加一些有用 &lt;del&gt;但没用&lt;/del&gt; 的功能，于是就发展成了今天这个样子。以至于别人也说我这个项目没什么用）&lt;/p&gt;
&lt;p&gt;&lt;del&gt;我现在就很好奇，究竟是什么支撑着我写一个项目写了 3 年（&lt;code&gt;2022 - 2025&lt;/code&gt;）。因为热爱？还是对这个项目有感情了？目前我也不知道。&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;抄袭风波&quot;&gt;抄袭风波&lt;/h2&gt;
&lt;p&gt;应该是在 2023 年，我偶然在 B 站上刷到了 &lt;a href=&quot;https://www.bilibili.com/video/BV1Xc411y7Mn/&quot;&gt;蓝云工具箱 4.7 版本的宣传片&lt;/a&gt;，当时看这个工具箱的一部分功能和我项目的一个功能非常相像，于是我就像个傻*一样去找这个项目的开发者理论，要求标明原作者，并且根据我项目的 &lt;code&gt;GPLv3&lt;/code&gt; 许可证（之前是）的条款进行开源。&lt;/p&gt;
&lt;p&gt;但是他一直没有这么做，反而他的一个朋友不乐意了，开始人身攻击、辱骂、并且在 B 站 上挂我 &lt;del&gt;（好在挂我的那个视频没有几个人看）&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;就这么多了，关于这段往事我也不想再提，我觉得我写的这一小段这些可以很好的叙述事情的经过了。&lt;/p&gt;
&lt;p&gt;我也是个傻逼，非要招惹他干什么…&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;屡屡失败的项目迁移&quot;&gt;屡屡失败的项目迁移&lt;/h2&gt;
&lt;p&gt;我 23 年也意识到了易语言的局限性，于是我在我项目的首页加了一个迁移通知，通知项目从易语言迁移到 &lt;code&gt;VB.NET&lt;/code&gt; 语言开发。但是后来一直没有学 &lt;code&gt;VB.NET&lt;/code&gt;，这件事情也就不了了之了。&lt;/p&gt;
&lt;p&gt;然后，有意思的来了：我是在 24 年? 又搞了一个类似的迁移通知，但是编程语言换成了 C#，你应该可以猜到，又不了了之了…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;笑点解析：两次都是因为想尝试学新编程语言，但是很快又放弃了…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;最近&quot;&gt;最近&lt;/h2&gt;
&lt;p&gt;然后就是最近，我经常发帖的论坛，国内最大的易语言交流论坛 &lt;a href=&quot;https://bbs.125.la/&quot;&gt;精易论坛&lt;/a&gt; 因为黑灰产原因，关闭了程序定制区 &lt;strong&gt;匠迹众包&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2025-4-30 15:34:25&lt;/p&gt;
&lt;p&gt;各位易友，由于公司发展方向上的决策，即日起，将关闭匠迹众包的需求帖发布，5月底将关闭威客大厅（已经在担保的帖子可以正常修改进度、提现，威客可正常申请退回保证金并提现），特此说明。 &lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;联想到此前论坛转型一事，我就知道，易语言命不久矣了：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2023-9-16 16:35:43&lt;/p&gt;
&lt;p&gt;    各位易友，论坛即将迎来15周年，15年来我们一起见证了PC互联网的发展和移动互联网的兴起，论坛在这些年为推动中文编程做了极大的努力，未能推动中文编程大范围的普及，我们深表遗憾，同时也感到力不从心。&lt;/p&gt;
&lt;p&gt;    精易论坛已经完成了它的历史使命，由于公司发展方向的决策，论坛决定不再开设编程技术相关的商业培训班及周边产品，精易论坛未来会是一个公益性编程学习交流社区，同时也不仅限于易语言中文编程的交流，希望大家能跟上时代的发展脚步，根据市场需求，学习更多新的技术。&lt;/p&gt;
&lt;p&gt;    目前精易的工作人员基本都调到“外卖跑腿系统”项目上，往后论坛的相关产品会逐步放缓更新或停止更新，有在做校园外卖、乡镇外卖、同城跑腿相关业务的，可以关注精易这几年倾心打造的”哪都达外卖跑腿系统“，产品好用，超乎你的想象。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2023-11-23 09:47:18&lt;/p&gt;
&lt;p&gt;现阶段是公司创立以来最艰难的阶段，论坛没有收益，而新项目又属于创业阶段，加密狗代理权也被回收了，目前公司属于节衣缩食的状况。&lt;br&gt;
尽管易语言是非常优秀的开发工具，易官方开发火山及关闭易语言论坛，就意味着易语言已经被正式放弃，易官方没法把易语言带到更深的高度，没法让国内开发公司/企业用易语言作为主要开发工具，没法让易语言开发者找到工作，无论第三方社区做任何的挣扎也是没有意义的，未来几年易语言的相关源码/周边工具/交流用户只会越来越少，大家应该借易语言的开发功底，学习更多适应时代潮流的编程语言。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2023-11-27 17:48:17&lt;/p&gt;
&lt;p&gt;最近有很多易友一直在询问为什么论坛今年不搞开源大赛，以及为什么会被回收加密狗代理权的问题，在这里统一做个答复&lt;/p&gt;
&lt;p&gt;现阶段是公司创立以来最艰难的阶段，论坛入不敷出，而新项目(外卖系统)又属于创业阶段，加密狗代理权也被回收了，目前公司属于节衣缩食的状况。&lt;br&gt;
尽管易语言是非常优秀的开发工具，但易官方开发火山及关闭易语言论坛，就意味着易语言已经被正式放弃，易官方不能把易语言带到更深的高度，无论第三方社区做任何的挣扎也是没有意义的，未来几年易语言新增的相关源码/周边工具/交流用户只会越来越少，大家应该根据现有的编程基础、开发功底，逐渐拓展、学习更多适应时代潮流的编程语言。&lt;br&gt;
精易不跟进火山搞火山周边开发就是预料火山可能会跟易语言一样的结局，在中秋寄语中发布转型公告，是想让大家知道论坛转型的原因，有始有终，给大家有交待。代理权被回收，本质原因就是胁迫论坛在相关产品中继续推广及做周边研发，精易的理念是希望官方继续完善易语言，在易语言的基础上改造增加新功能，甚至能让国内中小企业用易语言作为开发工具，让易友能找到工作，毕竟易语言20多年的用户积累和周边生态积累是非常不容易的，而官方的理念貌似是放弃易语言搞新炉灶，发展理念冲突，转型已经是必然的了，尽管官方回收了代理权但并不能为火山带来更高的销量，易语言用户量逐步下滑势必会影响火山的用户增涨，甚至是唇亡齿寒的结果。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2023-11-28 10:57:26&lt;/p&gt;
&lt;p&gt;精易不跟进火山搞火山周边开发就是预料火山可能会跟易语言一样的结局，在中秋寄语中发布转型公告，是想让大家知道论坛转型的原因，有始有终，给大家有交待。&lt;br&gt;
代理权被回收，本质原因就是胁迫论坛在相关产品中继续推广及做周边研发，精易的理念是希望官方继续完善易语言，在易语言的基础上改造增加新功能，甚至能让国内中小企业用易语言作为开发工具，让易友能找到工作，毕竟易语言20多年的用户积累和周边生态积累是非常不容易的，而官方的理念貌似是放弃易语言搞新炉灶，发展理念冲突，转型已经是必然的了，而加密狗的代销收入其实是微乎其微的，只是这项操作并不能为火山带来更高的销量，易语言用户量逐步下滑势必会影响火山的用户增涨，甚至是唇亡齿寒的结果。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2024-9-28 12:15:30&lt;/p&gt;
&lt;p&gt;论坛在去年中秋踩楼帖上有说明，论坛不仅限于易语言中文编程的交流，同时也欢迎其它编程相关的技术交流。近期关于炫语言在论坛发帖的争论，为给大家更好的体验，论坛已经开设子版块，详见 &lt;a href=&quot;https://bbs.125.la/forum-249-1.html&quot;&gt;https://bbs.125.la/forum-249-1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现阶段，易语言的更新基本停滞了，用户量也在逐渐下滑，尽管这几年有很多新的中文编程横空出世，但用户的接受程度普遍较低，关于中文编程，个人也有一些观点，不一定对，仅作大家互相交流探讨。&lt;/p&gt;
&lt;p&gt;一、易语言所取得较大用户认可的原因分析&lt;br&gt;
    2000年前后，易语言1.0发布，当时的时代背景还是PC互联网刚刚起步的时候，而易语言刚好是开发PC端软件而且是中文的，2000年在国内的教育水平远远不如当下，中文编程让国人眼前一亮，加上易语言易学易用，很多用户通过易语言开发各类软件盈利，使得用户不断给易语言添砖加瓦，各类源码、模块、周边产品不断增加，这使得易语言在过去20年稳坐中文编程第一把交椅。&lt;br&gt;
而当下的社会背景，易语言开发的PC软件的需求及盈利水平已经远不如前，当下的需求主要是云端、App、小程序、Web，易语言不进则退。&lt;/p&gt;
&lt;p&gt;    近几年新出的火山、炫语言等PC端开发，虽然解决了x64、unicode编码及其它细节优化，但在生态，特别是源码/类库这一块是远远不足的，如果官方没法投入大量的人力、财力，让用户再等20年来完善生态是不现实的。&lt;/p&gt;
&lt;p&gt;二、对于新PC中文编程IDE的看法&lt;br&gt;
    排除易语言外，新的中文编程IDE要取得发展，主要体现在易学易用及有非富的类库、源码等生态，要么可以兼容或通过小修改后，可以继续使用易语言20年来积累的源码/生态圈，要么花大量的精力财力完成类库/源码等生态建设，在发展前期，小众/生态不完善，要让大量用户选择使用是非常艰巨的。&lt;/p&gt;
&lt;p&gt;三、中文编程的延续发展&lt;br&gt;
    当下移动端的市场需求已经超过PC端，与PC开发形成差异化，像E2EE、e4a、蓝鸟、微鸟，都是不错的产品，由于市场空间问题，很难找到投资人，更多是靠自给自足，开发者在对产品投入大量的研发精力后，如果产品没法获得收益，是很难坚持下去的。&lt;br&gt;
但如果能坚持打磨完善产品、听取用户的改进意见、充分的做资源整合，实现自给自足是没问题的，这也许是一个延续方向。&lt;/p&gt;
&lt;p&gt;最后，随着时代的发展，教育水平的提高，英文已经不是特别大的困扰，如果中文编程没有大的资本投资方进入的话，注定只能在小圈子里面使用，只有让企业认可、让企业使用，让用户能找到工作，才能普及起来，但这任重道远，遥遥无期。接受/学习英文编程，提高开发能力，也许也是一个出路。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;发表于 2025-1-5 12:50:50&lt;/p&gt;
&lt;p&gt;早年也没有发家致富，现在饭都快吃不上了，论坛能继续运营下去就不错了，还怎么收购。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;精易论坛2023中秋国节踩楼活动&lt;br&gt;
&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14796329&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14796329&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;2023开源大赛是认真的么&lt;br&gt;
&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804157&amp;#x26;page=3&amp;#x26;ordertype=1#pid27072748&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804157&amp;#x26;page=3&amp;#x26;ordertype=1#pid27072748&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;关于其它中文编程在论坛发帖的相关说明&lt;br&gt;
&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14835863&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14835863&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;    可以看下往期的发言观点，精易论坛做了15年，这十几年是很努力也很希望中文编程发展得更好的，易语言周边的生态已经搞得非常不错了，甚至还组织过易语言支持库重写计划，如果易官方给力的话，何必花大力气重写，在原有代码上修改升级不香吗，何必有易语言助手的存在， 易语言官方论坛的关闭基本代表易语言已经被正式放弃，官方不给力，第三方社区做再多的挣扎也是没用的。&lt;br&gt;
    近期发现火山递归公司被注销了，火山官方论坛属于个体户备案了，这可能也意味着火山并没有很好的组建发展开发团队，没有团队的话，产品及市场都会受限，很难接力中文编程的持续发展。&lt;br&gt;
    中文编程IDE的研发周期长、投入较大，没有资本投入的话，精易论坛就算推出自己的IDE，用十年20年缓慢开发完善产品、发展生态和用户，团队很难坚持得了，用户也等不起，就像E4A、蓝鸟、微鸟、炫彩 已经纠纷对外出售，易语言拥有25年的生态积累，早期也顺利拿到原始投资款，一手好牌，本应该持续升级，注重用户反馈和体验，并快速推出或整合E4A/蓝鸟/微鸟/E2EE这类产品，将盈收继续投入到产品研发和团队建设上，逐步拓展企业用户，易友能找到工作就不会去做擦边，但官方对这一切好像都没有太上心，另外，时代在发展，产品跟不上市场需求就会逐步走向没落。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-7&quot; id=&quot;user-content-fnref-7&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;借用一位网友的话说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;确实，与其花时间去学另一个中文编程不如花时间在学习主流语言上，现在有ai，学习成本很低，而且难保炫会成为下一个易&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;我觉得他说的很对，中文编程终究是不入流的&lt;/p&gt;
&lt;p&gt;连相对而言最热门的易语言都是这个样子的话，很难想象其他中文编程语言都是什么样子…&lt;/p&gt;
&lt;p&gt;之后易语言会越来越走向没落的吧…&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;唉，不想多说了，毕竟说再多也没有用…&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14854986&quot;&gt;关于关闭“匠迹众包”的公告&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14796329&quot;&gt;精易论坛2023中秋国节踩楼活动&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14803581&amp;#x26;page=1&amp;#x26;ordertype=1#pid27043497&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14803581&amp;#x26;page=1&amp;#x26;ordertype=1#pid27043497&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804157&amp;#x26;page=3&amp;#x26;ordertype=1#pid27072748&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804157&amp;#x26;page=3&amp;#x26;ordertype=1#pid27072748&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804210&amp;#x26;page=1&amp;#x26;ordertype=1#pid27077226&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14804210&amp;#x26;page=1&amp;#x26;ordertype=1#pid27077226&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14835863&quot;&gt;关于其它中文编程在论坛发帖的相关说明&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-7&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14845220&amp;#x26;page=1&amp;#x26;ordertype=1#pid29595317&quot;&gt;https://bbs.125.la/forum.php?mod=viewthread&amp;#x26;tid=14845220&amp;#x26;page=1&amp;#x26;ordertype=1#pid29595317&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-7&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 7&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>技术</category><category>易语言</category></item><item><title>GitHub 暂时取消未登录用户从中国访问的限制</title><link>https://blog.gytxtx.top/article/2025/04/github-unblock-cn/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/04/github-unblock-cn/</guid><description>2025 年 4 月 13 日 4:01(UTC+8) 左右，GitHub 因配置变更导致未登录用户从中国访问 GitHub.com 时出现访问限制。已登录用户仍可正常访问。该问题于 2025 年 4 月 13 日 22:55(UTC+8) 得到解决。</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;摘要&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;2025 年 4 月 13 日 4:01(UTC+8)&lt;/strong&gt; 左右，GitHub 因配置变更导致未登录用户从中国访问 GitHub.com 时出现访问限制。已登录用户仍可正常访问。该问题于 &lt;strong&gt;2025 年 4 月 13 日 22:55(UTC+8)&lt;/strong&gt; 得到解决。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;官方事件报告译文&quot;&gt;官方事件报告（译文）&lt;/h2&gt;
&lt;h3 id=&quot;事后报告-暂时取消-禁止未登录的中国用户访问-github-的限制-1&quot;&gt;[事后报告] 暂时取消 &lt;code&gt;禁止未登录的中国用户访问 GitHub&lt;/code&gt; 的限制 &lt;sup&gt;&lt;a href=&quot;#user-content-fn-original-link&quot; id=&quot;user-content-fnref-original-link&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;GitHub 事件报告&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于一次配置更改产生了意外影响，中国地区未登录用户在尝试访问 GitHub.com 时曾遭遇暂时性访问中断。已登录用户可正常继续访问网站。影响于 &lt;code&gt;2025/04/12 20:01(UTC)&lt;/code&gt; 开始。影响已于 &lt;code&gt;2025/04/13 14:55(UTC)&lt;/code&gt; 缓解。&lt;/p&gt;
&lt;p&gt;现已撤销导致此问题的相关配置更改，用户在尝试访问 GitHub.com 时不应再遇到访问问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;发布于 1 天前 - 2025 年 4 月 12 日 20:00 UTC&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;官方原始报告&quot;&gt;官方原始报告&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;内容来源于 &lt;a href=&quot;https://www.githubstatus.com/incidents/jfvgcls9swln&quot;&gt;GitHub Status 页面&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&quot;retroactive-access-from-china-temporarily-blocked-for-users-that-were-not-logged-in&quot;&gt;[Retroactive] Access from China temporarily blocked for users that were not logged in&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Incident Report for GitHub&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;resolved&quot;&gt;Resolved&lt;/h4&gt;
&lt;p&gt;Due to a configuration change with unintended impact, users that were not logged in who tried to visit GitHub.com from China were temporarily unable to access the site. For users already logged in, they could continue to access the site successfully. Impact started 2025/04/12 at 20:01 UTC. Impact was mitigated 2025/04/13 at 14:55 UTC.&lt;/p&gt;
&lt;p&gt;The configuration changes that caused this impact have been reversed and users should no longer see problems when trying to access GitHub.com.&lt;/p&gt;
&lt;h6 id=&quot;posted-1-day-ago-apr-12-2025---2000-utc&quot;&gt;Posted 1 day ago. Apr 12, 2025 - 20:00 UTC&lt;/h6&gt;
&lt;/blockquote&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-original-link&quot;&gt;
&lt;p&gt;原始报告：&lt;a href=&quot;https://www.githubstatus.com/incidents/jfvgcls9swln&quot;&gt;https://www.githubstatus.com/incidents/jfvgcls9swln&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-original-link&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>技术</category><category>GitHub</category><category>技术</category></item><item><title>GitHub 屏蔽中国地区访问的解决方案</title><link>https://blog.gytxtx.top/article/2025/04/github-block-cn-ip/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/04/github-block-cn-ip/</guid><description>4 月 13 日 13:00 左右，GitHub 屏蔽了中国地区的访问，未登录用户访问时会触发 HTTP 403 Forbidden 错误，提示 “Access to this site has been restricted.” 。已登录用户也可能会受到限制。 以下是我验证的一些解决方案：</description><pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;4 月 13 日 13:00 左右，GitHub 屏蔽了中国地区的访问，未登录用户访问时会触发 &lt;code&gt;HTTP 403 Forbidden&lt;/code&gt; 错误，提示 &lt;strong&gt;“Access to this site has been restricted.”&lt;/strong&gt;。已登录用户也可能会受到限制。&lt;/p&gt;
&lt;p&gt;以下是我验证的一些解决方案：&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;1-使用代理服务器推荐&quot;&gt;1. 使用代理服务器（推荐）&lt;/h2&gt;
&lt;p&gt;使用代理客户端（如 Clash、V2Ray），连接非中国节点（美国、日本、新加坡等），并开启系统代理即可绕过 IP 封锁。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;由于众所周知的原因，不提供代理服务器提供商，请自行查找。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-利用-bug-绕过限制此方法已不可用&quot;&gt;&lt;del&gt;2. 利用 Bug 绕过限制（此方法已不可用）&lt;/del&gt;&lt;/h2&gt;
&lt;p&gt;使用被封禁的节点（例如中国大陆网络）访问 &lt;a href=&quot;https://github.com/login/&quot;&gt;https://github.com/login/&lt;/a&gt; 后， GitHub 会存储一个 Cookie ，这时只要这个 Cookie 不被删除，再用被 GitHub 封禁的节点访问 GitHub 就不会被 403 禁止访问，无需登录 GitHub 。如果这个 Cookie 被删除， GitHub 还会 403 禁止访问。&lt;/p&gt;
&lt;p&gt;说人话就是：裸连 GitHub 并访问 &lt;a href=&quot;https://github.com/login/&quot;&gt;https://github.com/login/&lt;/a&gt;，无需理会 &lt;code&gt;Access to this site has been restricted.&lt;/code&gt;，之后直接访问 &lt;code&gt;github.com&lt;/code&gt; 即可解除限制。&lt;/p&gt;
&lt;h2 id=&quot;3-使用镜像站&quot;&gt;3. 使用镜像站&lt;/h2&gt;
&lt;p&gt;使用类似于 &lt;a href=&quot;https://kkgithub.com/&quot;&gt;KKGitHub&lt;/a&gt; 的 GitHub 镜像服务来解除限制。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;声明：本文仅提供技术讨论，不推荐具体工具或服务商。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;部分方法可能随政策调整失效，如果有其他方法欢迎在评论区补充。&lt;/p&gt;
&lt;p&gt;本文撰写匆忙，如有错误请及时指出。&lt;/p&gt;</content:encoded><category>技术</category><category>GitHub</category><category>技术</category></item><item><title>本站的第一篇文章</title><link>https://blog.gytxtx.top/article/2025/03/first-article/</link><guid isPermaLink="true">https://blog.gytxtx.top/article/2025/03/first-article/</guid><description>最近萌生了搭建个人博客的想法，但手头没有服务器资源，也不想投入过多运维成本——这让我突然想起之前部署过的 Material for MkDocs 文档框架。这个原本用于技术文档的工具，或许正是我需要的极简博客解决方案。</description><pubDate>Sat, 29 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近萌生了搭建个人博客的想法，但手头没有服务器资源，也不想投入过多运维成本——这让我突然想起之前部署过的 &lt;strong&gt;&lt;a href=&quot;https://github.com/squidfunk/mkdocs-material/&quot;&gt;Material for MkDocs&lt;/a&gt;&lt;/strong&gt; 文档框架。这个原本用于技术文档的工具，或许正是我需要的极简博客解决方案。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;为什么选用-material-for-mkdocs&quot;&gt;为什么选用 Material for MkDocs？&lt;/h2&gt;
&lt;h3 id=&quot;1-material-design-的纯粹美感&quot;&gt;1. Material Design 的纯粹美感&lt;/h3&gt;
&lt;p&gt;作为 Google 设计语言的忠实爱好者，&lt;strong&gt;Material for MkDocs&lt;/strong&gt; 天生具备 &lt;strong&gt;沉浸式的视觉层次&lt;/strong&gt;。恰到好处的阴影过渡、丝滑的组件交互，以及自适应暗色模式，让写作体验与内容呈现都充满现代感。&lt;/p&gt;
&lt;h3 id=&quot;2-低代码高定制的平衡术&quot;&gt;2. 低代码高定制的平衡术&lt;/h3&gt;
&lt;p&gt;通过简单的 &lt;code&gt;mkdocs.yml&lt;/code&gt; 配置文件即可实现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/setup/&quot;&gt;自定义导航栏与页脚&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/setup/adding-a-comment-system/&quot;&gt;集成评论系统&lt;/a&gt;（如 Giscus）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/setup/setting-up-tags/&quot;&gt;添加 SEO 优化标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/reference/&quot;&gt;扩展 Markdown 语法支持&lt;/a&gt;（流程图、数学公式等）&lt;/li&gt;
&lt;li&gt;更多扩展 / 自定义功能…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;无需前端知识，却能实现专业级定制，这对技术出身的写作者尤为友好。&lt;/p&gt;
&lt;h3 id=&quot;3-静态网站的优雅哲学&quot;&gt;3. 静态网站的优雅哲学&lt;/h3&gt;
&lt;p&gt;所有内容通过 Markdown 书写，&lt;code&gt;mkdocs build&lt;/code&gt; 命令一键生成纯静态页面，可直接部署至 &lt;code&gt;GitHub Pages&lt;/code&gt; / &lt;code&gt;Vercel&lt;/code&gt; 等免费平台。没有数据库维护压力，没有插件漏洞风险，只有 &lt;strong&gt;「内容即资产」&lt;/strong&gt; 的极简主义。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;为什么不用-wordpress&quot;&gt;为什么不用 WordPress？&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;成本敏感&lt;/strong&gt;：一台 24 小时在线的云服务器年费足够买三本技术书籍，而静态托管方案真正实现零成本运维 &lt;del&gt;（其实主要原因就是：我是学生党）&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;减法原则&lt;/strong&gt;：当 80% 的博客功能只是展示文章时，为何要承受插件更新、后台管理、性能调优的重负？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本控制基因&lt;/strong&gt;：所有文章以 &lt;code&gt;.md&lt;/code&gt; 文件存储于 Git 仓库，天然具备版本回溯、多端同步能力，写作过程本身就是代码提交史&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;关于这个博客的实验性尝试&quot;&gt;关于这个博客的实验性尝试&lt;/h2&gt;
&lt;p&gt;作为技术爱好者，我始终相信 &lt;strong&gt;「输出是最好的输入」&lt;/strong&gt;。这里将主要记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;技术原理分享（WinAPI 实践 / 编程技巧 / 云原生构建 等）&lt;/li&gt;
&lt;li&gt;效率工具链实践&lt;/li&gt;
&lt;li&gt;偶尔跨界的人文思考&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我也同时在实践中学习，这也印证了 「Anyway, keep learning.」 这句话。&lt;/p&gt;
&lt;p&gt;尽管这是首次尝试博客创作，但我更愿意将其视为 &lt;strong&gt;「数字花园」&lt;/strong&gt; 的播种——不追求日更的节奏，只聚焦于持续的知识沉淀与重构。如果您在阅读中发现任何技术谬误，或是有想探讨的话题，欢迎跳转至 &lt;a href=&quot;https://blog.gytxtx.top/about/&quot;&gt;关于我&lt;/a&gt; 页面获取联系方式与我交流。&lt;/p&gt;
&lt;p&gt;静待思想的种子在此生根发芽。🌱&lt;/p&gt;
&lt;hr&gt;
&lt;!-- 保留迁移前的章节锚点，旧分享链接继续有效。 --&gt;
&lt;p&gt;&lt;span id=&quot;感谢-simple-materialformkdocs-material-for-mkdocs&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;感谢-material-for-mkdocs&quot;&gt;感谢 Material for MkDocs&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://squidfunk.github.io/mkdocs-material/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Material_for_MkDocs-526CFE?style=for-the-badge&amp;#x26;logo=MaterialForMkDocs&amp;#x26;logoColor=white&quot; alt=&quot;Built with Material for MkDocs&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后，感谢 &lt;strong&gt;&lt;a href=&quot;https://github.com/squidfunk/mkdocs-material/&quot;&gt;Material for MkDocs&lt;/a&gt;&lt;/strong&gt; 的开发团队提供了简单易用且出色的 &lt;strong&gt;项目文档&lt;/strong&gt; / &lt;strong&gt;博客&lt;/strong&gt; 工具，其开箱即用的配置极大简化了我的部署流程，使我可以专心忙于别的事情中。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;后记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文全程使用 VS Code 编辑，通过 GitHub Actions 自动构建部署，使用 GitHub Pages 托管——这或许就是静态博客的魅力所在。&lt;/p&gt;
&lt;p&gt;使用 &lt;a href=&quot;https://www.deepseek.com/&quot;&gt;&lt;code&gt;DeepSeek R1&lt;/code&gt;&lt;/a&gt; 长思考模型辅助撰写，其对技术细节的精准捕捉与逻辑梳理能力令人印象深刻，太 NB 了。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><category>建站</category><category>MkDocs</category><category>博客</category></item></channel></rss>