HarmonyOS应用实战-启示散页-46-文章素材别混进应用包:把 CSDN 图片和运行资源分开管理
HarmonyOS应用实战-启示散页-46-文章素材别混进应用包把 CSDN 图片和运行资源分开管理发布前做包体复查时最容易被忽略的一类问题不是“图片太大”而是“这张图片本来就不该进包”。答案之书这类项目经常同时维护应用源码、商店截图、CSDN 文章封面、流程图和结构图。目录一乱文章用的 PNG 很容易被拷进entry/src/main/resources/base/media最后 HAP 变大资源来源说不清发布复盘也不知道该删哪一个文件。这篇文章只解决一个具体问题CSDN 文章素材如何和 HarmonyOS 运行资源彻底分开。读完后你应该能拿到四个结果判断一张图片到底服务文章、商店发布还是应用运行时。用资源账本解释包体里每个新增文件的 owner。用脚本在提交前拦住文章图片误入resources或rawfile。把检查结果写进发布清单而不是只说“构建通先还原一次真实事故链假设发布前发现 HAP 比上一个版本多了几百 KB。第一反应通常是压缩图片、删日志、查依赖。但继续往下看发现新增文件里有the_book_of_answers_46_cover.png、the_book_of_answers_46_flow.png这类文章图片。它们不是页面图标也不是启动页素材只是为了 CSDN 文章排版准备的说明图。这时问题已经不是压缩率而是资源归属失控现象真实原因后果HAP 包体变大文章 PNG 被复制进运行资源发布包携带无用素材删除图片怕影响页面没有 owner 记录不敢清理资源目录文章换图后应用也变化共用同一张文件内容发布影响应用运行审核截图和运行资源混在一起发布素材没有独立目录复盘时找不到证据边界已核对的当前目录边界是本系列文章图片位于media/the_book_of_answers/46/应用运行资源应由entry、libraryHAR、libraryHSP各自模块管理。本文不声称已经改过应用源码只给出可落地的检查与隔离方法。三类图片先分清 owner资源治理的第一步不是写脚本而是给每类图片命名。只看后缀和尺寸不够文章封面、商店截图、应用图标都可能是 PNG真正能区分它们的是“谁消费它”。类型推荐目录消费方是否进入 HAPCSDN 文章图media/the_book_of_answers/no/Markdown / CSDN 编辑器否商店截图release/screenshots/或发布清单目录AGC 提交材料否应用运行图标entry/src/main/resources/base/media/ArkUI$r(app.media.xxx)是默认题库 rawfileentry/src/main/resources/rawfile/SeedLoader/$rawfile(...)是HSP 自带组件资源libraryHSP/src/main/resources/HSP 页面或组件是这个表的作用很直接如果一张图只是 Markdown 文章里的流程图引用它就不应该出现在entry/src/main/resources。如果一张图被 ArkUI 页面通过$r(app.media.xxx)引用它就不应该放在文章素材目录里。用资源账本记录新增文件轻量项目不一定需要复杂资产平台但至少要有一份可读的资源账本。账本不参与运行时逻辑只服务发布复查谁加了文件、文件服务什么、是否打包、能否删除。typeAssetOwnerarticle|agcScreenshot|entryRuntime|harRuntime|hspRuntime|rawSeed;interfaceResourceLedgerItem{path:string;owner:AssetOwner;purpose:string;packagedInHap:boolean;referencedBy:string;removableAfterPublish:boolean;}这段模型的重点不是字段多而是owner和packagedInHap。文章图的packagedInHap必须是false运行资源的referencedBy必须能指向具体页面、组件或启动服务。只要这两项说不清就不要把文件留进提交。一条合格记录可以长这样{path:media/the_book_of_answers/46/the_book_of_answers_46_flow.png,owner:article,purpose:第46篇CSDN流程图,packagedInHap:false,referencedBy:HarmonyOS应用实战-启示散页-46.md,removableAfterPublish:false}如果同样的文件被复制进entry/src/main/resources/base/media/账本就应该报错而不是让它混进发布包。HarmonyOS 运行资源只认模块目录HarmonyOS 工程里运行资源有明确归属element放字符串、颜色和尺寸media放图标和图片profile放路由或配置rawfile放保留原始格式的资源。文章图片不属于其中任何一类。entry/src/main/resources/ base/ element/ string.json color.json media/ app_icon.png home_empty_deck.png profile/ main_pages.json router_map.json rawfile/ seed/default_deck.json media/the_book_of_answers/46/ the_book_of_answers_46_cover.png the_book_of_answers_46_flow.png the_book_of_answers_46_structure.png这里的分界线很硬home_empty_deck.png如果被首页Image($r(app.media.home_empty_deck))使用就应该在运行资源目录the_book_of_answers_46_flow.png只被 Markdown 引用就应该留在文章目录。不要因为两者都是 PNG 就放到同一个地方。页面引用运行资源时要能说清用途真正需要进入应用包的图片也不能只靠文件名存在。页面应该通过$r引用模块内资源并且文件名能说明业务用途。Componentstruct EmptyDeckPanel{build(){Column({space:12}){Image($r(app.media.home_empty_deck)).width(120).height(120)Text($r(app.string.home_empty_deck_title))Text($r(app.string.home_empty_deck_desc))}}}这段代码的 owner 很清楚home_empty_deck服务首页空题库状态属于运行资源可以进入 HAP。与它相对CSDN 的文章流程图没有任何 ArkUI 引用不应该为了“方便查看”放进base/media。资源配置也要保持同样边界{ module: { name: entry, type: entry, srcEntry: ./ets/Application/AbilityStage.ets, description: $string:module_desc, mainElement: EntryAbility, pages: $profile:main_pages } }module.json5只描述模块运行入口和资源配置不应该引用文章素材目录。文章和发布说明可以描述应用但不能变成应用的构建输入。提交前先跑两组扫描第一个扫描从文章出发确认 Markdown 引用的都是文章目录下的 PNG而且文件存在。$articleC:\Users\ADcaing\Desktop\csdn\HarmonyOS应用实战-启示散页-46-文章素材别混进应用包把 CSDN 图片和运行资源分开管理.md$rootSplit-Path-Parent$article$refsSelect-String-LiteralPath$article-Pattern!\[[^\]]\]\(([^)]\.png)\)-AllMatchesforeach($matchin$refs.Matches){$relative$match.Groups[1].Value$fullJoin-Path$root$relativeif(-not(Test-Path-LiteralPath$full)){throw文章图片不存在$relative}if($relative-notlikemedia/the_book_of_answers/46/*.png){throw第46篇图片路径越界$relative}}第二个扫描从应用工程出发确认运行资源目录里没有文章素材特征词。这里的目标不是证明源码一定正确而是拦住最常见的误复制。$projectD:\ProgramData\huawei\lesson\The_Book_of_Answers$resourceRoots ($project\entry\src\main\resources,$project\libraryHAR\src\main\resources,$project\libraryHSP\src\main\resources)foreach($rootin$resourceRoots){if(Test-Path-LiteralPath$root){$hitGet-ChildItem-LiteralPath$root-Recurse-File|Where-Object{$_.Name-matchthe_book_of_answers|csdn|article|cover_flow|structure}if($hit){$hit|ForEach-Object{Write-Output$_.FullName}throw文章素材疑似进入应用运行资源}}}这两个扫描方向不同一个保证文章能正常发布一个保证应用包不带文章素材。只做其中一个都不完整。包体复查要看“新增资源来源”如果构建后发现包体变大排查顺序建议从新增资源来源开始而不是直接压缩。压缩只能降低体积不能解决不该打包的问题。$beforeGet-Content.\release\resource-list-before.txt$afterGet-Content.\release\resource-list-after.txt$addedCompare-Object$before$after|Where-Object{$_.SideIndicator-eq}$added|ForEach-Object{$path$_.InputObjectif($path-matchthe_book_of_answers|csdn|article){throw发现文章素材进入包体清单$path}Write-Output新增资源待确认 owner$path}实际项目里可以从构建产物、资源清单或手工导出的文件列表中拿before/after。重点是每个新增资源都要回答两个问题它被哪个运行页面使用如果删除它应用哪条路径会失败反例把文章目录当成备用素材库最危险的写法不是偶尔复制一张图而是团队默认把media当成素材库。比如首页缺一个空态图就从 CSDN 文章里挑一张流程图放进resources/base/media发布截图缺一张说明图又从运行资源里复制出去改尺寸。几轮之后任何图片都说不清来源。反例通常有三个症状症状为什么危险正确处理文件名只有cover.png无法判断属于文章还是页面用home_empty_deck.png、article_46_flow.png区分用途文章图和运行图共用路径内容发布会影响应用包文章目录和资源目录物理隔离删除资源只靠人工记忆发布前不敢清理资源账本记录 owner 和引用点遇到这种情况不要先批量重命名。先按 owner 分类把不该进入 HAP 的文件移出运行资源再补账本和扫描脚本。否则只是把混乱资源换了一批新名字。验证清单第 46 篇文章发布前我建议按这张清单复查Markdown 中 3 张图片都指向media/the_book_of_answers/46/。3 张图片都是本地 PNG且文件真实存在。entry/src/main/resources、libraryHAR/src/main/resources、libraryHSP/src/main/resources中没有the_book_of_answers、csdn、article等文章素材命名。应用运行资源里的新增图片能找到 ArkUI$r(app.media.xxx)或启动服务引用。发布清单记录文章素材目录与应用资源目录相互独立。包体变大时先查新增资源 owner再考虑压缩。这里没有做真机运行验证也没有上传 CSDN。本文给出的验证是本地文件、Markdown 引用和工程资源边界检查如果要证明发布结果还需要在 CSDN 编辑器里完成图片上传和正文预览。常见问题与定位现象先看哪里处理HAP 体积突然变大新增资源清单找出是否有文章 PNG 进入 resources文章图片发布后丢失Markdown 图片路径确认本地 PNG 存在发布前上传到 CSDN 图床删除某张图担心影响应用是否有$r或$rawfile引用没有运行引用且 owner 是 article就不应在 HAP同名图片到处都有文件命名规则按业务用途重命名不按临时来源命名rawfile 里出现说明图rawfile 消费方rawfile 只留 SeedLoader 等真实运行输入排查时先从路径入手。文章素材路径应该能读出文章编号运行资源路径应该能读出页面或组件用途。路径都说不清时代码层面的引用通常也会跟着混乱。小结文章素材和运行资源的边界本质上是发布责任边界。CSDN 图片服务内容表达商店截图服务提交材料resources和rawfile服务应用运行。把这三类资产混在一起包体、审核和排障都会变得模糊。更稳的做法是目录先隔离账本写 owner提交前双向扫描包体复查只接受能解释来源的新增资源。

相关新闻

3个场景教你轻松玩转B站视频批量下载:BilibiliDown完整指南

3个场景教你轻松玩转B站视频批量下载:BilibiliDown完整指南

3个场景教你轻松玩转B站视频批量下载:BilibiliDown完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirr…

2026/7/28 1:02:03 阅读更多 →
TCP/IP协议簇是一个分层的网络通信模型,通常分为四层(或对应OSI七层的简化映射):应用层、传输层、网络层(网际层)、网络接口层(链路层)

TCP/IP协议簇是一个分层的网络通信模型,通常分为四层(或对应OSI七层的简化映射):应用层、传输层、网络层(网际层)、网络接口层(链路层)

TCP/IP协议簇是一个分层的网络通信模型,通常分为四层(或对应OSI七层的简化映射):应用层、传输层、网络层(网际层)、网络接口层(链路层)。各层核心协议及其功能如下:应用层…

2026/7/28 1:02:03 阅读更多 →
通义千问免费功能全图谱(2024Q2官方API+Web+App三端实测报告)

通义千问免费功能全图谱(2024Q2官方API+Web+App三端实测报告)

更多请点击: https://kaifayun.com 第一章:通义千问免费功能全景概览 通义千问(Qwen)作为阿里云推出的超大规模语言模型,面向个人开发者与普通用户长期提供稳定、免登录、无额度限制的基础能力。其免费功能覆盖文本生…

2026/7/28 1:02:03 阅读更多 →

最新新闻

仅剩47个名额|零基础AI编程速成营内部讲义泄露:含37个可复用Prompt模板与错误响应解码表

仅剩47个名额|零基础AI编程速成营内部讲义泄露:含37个可复用Prompt模板与错误响应解码表

更多请点击: https://codechina.net 第一章:零基础用AI学编程 人工智能正在彻底改变编程学习的路径——不再需要先啃完数百页语法手册,而是让AI成为你的实时教练、调试搭档与项目协作者。零基础学习者只需明确目标(如“做一个天气…

2026/7/28 1:10:06 阅读更多 →
如何高效获取国家中小学智慧教育平台电子课本:场景驱动的PDF教材下载解决方案

如何高效获取国家中小学智慧教育平台电子课本:场景驱动的PDF教材下载解决方案

如何高效获取国家中小学智慧教育平台电子课本:场景驱动的PDF教材下载解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取…

2026/7/28 1:10:06 阅读更多 →
每周读书与学习->初识JMeter 元件(一)

每周读书与学习->初识JMeter 元件(一)

每周读书与学习->初识JMeter 元件(一) 大家好,欢迎来到本周的读书与学习专栏。今天,我们将一起探索性能测试领域的一个重要工具——Apache JMeter。如果你是初次接触JMeter,可能会被它的界面和各种术语吓到&#xf…

2026/7/28 1:10:06 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-ArkUI 的条件渲染机制、`@State` 触发重渲、状态机思维

HarmonyOS应用开发实战:猫猫大作战-ArkUI 的条件渲染机制、`@State` 触发重渲、状态机思维

前言 前 9 篇我们拆完了主菜单的静态元素——标题、按钮、规则卡片、徽章、布局容器。但一个完整游戏不是「一页到底」,它要在主菜单 → 游戏页 → 暂停遮罩 → 结束页四种状态间切换。在 React/Vue 里你习惯 useState 条件渲染,在 HarmonyOS ArkUI 里…

2026/7/28 1:09:06 阅读更多 →
云客服系统“消息太多管不过来”?智能分配与自动化工作流方案

云客服系统“消息太多管不过来”?智能分配与自动化工作流方案

文章摘要在线客服团队面临的核心矛盾不是人手不够,而是消息分配方式停留在“平均主义”阶段——高价值客户和普通咨询混在同一队列,资深客服和新手处理同等难度的会话。本文从技术实现视角,拆解云客服系统从“手动分配”到“智能调度”的升级…

2026/7/28 1:09:06 阅读更多 →
2026大模型语音机器人选型指南:避开“伪智能”陷阱选对真AI

2026大模型语音机器人选型指南:避开“伪智能”陷阱选对真AI

文章摘要大模型语音机器人市场在2026年进入爆发期,但“伪智能”问题也随之凸显——不少产品仅在外层包装了大模型接口,核心对话引擎仍依赖传统关键词匹配。本文从技术架构视角拆解真伪AI语音机器人的四个关键区分维度:语音识别层、语义理解层…

2026/7/28 1:09:06 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻