惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
L
Lohrmann on Cybersecurity
aimingoo的专栏
aimingoo的专栏
V
V2EX
S
Security Affairs
T
Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
J
Java Code Geeks
The Register - Security
The Register - Security
U
Unit 42
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
Project Zero
Project Zero
S
Schneier on Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
DataBreaches.Net
博客园 - 司徒正美
V
Vulnerabilities – Threatpost
T
Tor Project blog
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
小众软件
小众软件
L
LangChain Blog
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Palo Alto Networks Blog
A
Arctic Wolf
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理, 企事业单位数字化的业务供需本质 – 人人都是产品经理, 医疗智能体·第1讲——医疗信息化重构:从“辅助软件”到“自主智能体”的范式转移 – 人人都是产品经理, 粉丝量就是空气!!! – 人人都是产品经理, 用户说“薯片碎了”,机器回“要买吗?”:意图识别的翻车与破局 – 人人都是产品经理, RAG召回准确率从75到90 我做对了这三件事 – 人人都是产品经理, AI大事件:Anthropic改收费、OpenAI发安全版、手术机器人纳入医保、阿里发布”秒悟” – 人人都是产品经理, Chrome 推出 Skills 新功能,Agent 重塑上网方式 – 人人都是产品经理, GitHub前创始人拿了a16z的1700万美元,做Agent时代的Git – 人人都是产品经理 拷贝或克隆其他 Flutter OH 项目到本地后无法运行 – 人人都是产品经理, 优惠券设计:优惠券创建 – 人人都是产品经理, 不用死磕文档!AI 助手 1 小时搞定飞书 CLI 安装 + 配置 + 知识库 – 人人都是产品经理, 用小龙虾做竞品分析报告:从2天到20分钟,我是怎么做到的 – 人人都是产品经理 用小龙虾做市场分析报告:搞懂这3个公式,市场规模不再靠猜 – 人人都是产品经理, 你早就在做 Harness 工程,只是不知道它叫这个名字 – 人人都是产品经理, Think Long就够?你可能想多了! – 人人都是产品经理, 货代SRM实战:供应商准入怎么做,才能让资源池不是通讯录而是可交付网络? – 人人都是产品经理, 如何做好用户调研?详解基本技巧 – 人人都是产品经理, 木鸟、途家、美团对打,平台春天行动开“卷” – 人人都是产品经理, 入职才发现公司不靠谱?小红书从业者求职避坑指南 – 人人都是产品经理, 美国 AI 三巨头联手封堵,中国 AI 突围之路在何方 – 人人都是产品经理, 小红书,放在需求对面的镜子 – 人人都是产品经理, AI 会带来大规模失业吗? – 人人都是产品经理, 从出单到补货前,我第一次犹豫:该不该放大? – 人人都是产品经理, Flutter 三方库鸿蒙化适配:5 种高效检查方式,快速判断是否需要适配 – 人人都是产品经理, 从做产品进阶拿结果:医美机构产品经理转岗科室运营经理 – 人人都是产品经理, 阿里HappyHorse,一场关于“Token经济”的阳谋 – 人人都是产品经理, To B AI:客户留存落地的观察与思考 – 人人都是产品经理, AI产品的“生命线”——数据采集、标注、清洗的产品化设计 – 人人都是产品经理, 谈谈AI Agent(二):当“孩子”能自己“体验世界”时,你该学什么? – 人人都是产品经理, UI/UX设计师的3层能力进阶,前两层让你活下来,第三层…才是真正的分水岭 – 人人都是产品经理, 2分钟 → 30秒,效率提升75%:B端产品经理如何用「规则枷锁」驯服AI幻觉? – 人人都是产品经理, 还没来得及学OpenClaw,来了个更猛的:Hermes Agent – 人人都是产品经理, AI日报:宇树机器人跑出10m/s刷新世界纪录 – 人人都是产品经理, 一文说透基金互金如何用情绪价值引导用户决策做转化 – 人人都是产品经理, 当浏览器开始替你”看”网页:AI 浏览器正在亲手拆掉它脚下的那张网 – 人人都是产品经理, 0代码,一天时间我Vibe Coding了个网站 – 人人都是产品经理, Hermes 和 OpenClaw 之争,Agent 的能力应该“装上去”还是“长出来”? – 人人都是产品经理 视频生成的“桌子”,字节Seedance 2掀完,阿里快乐马掀 – 人人都是产品经理, 从听不懂到完全信任:我的 Codex 深度产品体验 – 人人都是产品经理, 当虚拟偶像有了北京户口,与真人偶像还有什么区别? – 人人都是产品经理, 会说,远远比会做更重要 —— 对 SBTI 爆火现象的五层观察 – 人人都是产品经理, AI产品经理必看:当“搭环境”比“选模型”更重要,你的认知还在2024年吗? – 人人都是产品经理, 2026年AI产品商业化核心逻辑:从功能demo到规模化营收的3个必破卡点 – 人人都是产品经理, 京东围绕供应链,卷起裤腿下场的那些事儿 – 人人都是产品经理, SBTI一夜刷屏:它赢在了“太会说人话” – 人人都是产品经理, 折扣零售的真相:不是便宜,而是价值感! – 人人都是产品经理, 和甲方吵了一架,最后加钱做了——我学到的ToB产品经理生存法则 – 人人都是产品经理, 和几位小红书操盘手聊了8小时,干货全在这 – 人人都是产品经理, 智谱GLM-5.1登场,开源模型首超Opus4.6!!! – 人人都是产品经理 Anthropic收入凭什么反超OpenAI,终于有人把这事说清楚了 – 人人都是产品经理, 史上最有故事感的技术报告——Claude最强模型Mythos 7个极其精彩的细节 – 人人都是产品经理, 模型不是壁垒,Harness 也不是 – 人人都是产品经理, 抖音本地生活业务思考21 – 人人都是产品经理, Superpowers:145k Star的AI编码框架,到底是什么来头? Superpowers:145k Star的AI编码框架,到底是什么来头? – 人人都是产品经理, OpenAI 的路走错了,Anthropic Harness 解法启示:模型需要实践专科生 – 人人都是产品经理, 画原型图的前一步:设计站点地图 – 人人都是产品经理, 给 DeepSeek 的最后一封催更信 – 人人都是产品经理, 手把手教你用 Claude Code 搭建 AI 营销团队:5 个 Agent、12 项技能,独立完成研究、写作、设计全流程 – 人人都是产品经理, 你以为大模型在学语言?不,它在重新发明语言学 – 人人都是产品经理 所谓Skill,不过是AI时代的工业垃圾 – 人人都是产品经理, 聊一聊内容传播的几个方法 – 人人都是产品经理, 当平台开始吃掉生态:从 OpenClaw 被封杀,读懂 Anthropic 的这盘棋 – 人人都是产品经理, 你装了 10 个 AI 插件,Obsidian 还是一个文件夹 – 人人都是产品经理 关于AI智能体架构演进的系统性思考:从单体试水到多体协同的重构 – 人人都是产品经理, 当“人”变成Skill,我们又该何去何从? – 人人都是产品经理 Mythos 事件:前沿 AI 治理的意外实验 – 人人都是产品经理, 货代CRM:信用与风险管理怎么做,才能把坏账风险拦在放货之前? – 人人都是产品经理, 从HR收集自拍照到员工自助录入——我见证了园区人脸识别从”不可用”到”真好用”的全过程 – 人人都是产品经理 千问闯关AI混沌期:阿里画靶,吴嘉张弓,马云射箭? – 人人都是产品经理,
鸿蒙 PC 三方库适配 HNP 打包流程的”入场券”hnp.json 文件解读 – 人人都是产品经理
nutpi · 2026-04-29 · via 人人都是产品经理

hnp.json虽然只有几行JSON,但它是鸿蒙原生包打包流程的“入场券”。type声明文件类型,name必须与HPKBUILD和README.OpenSource保持一致,version是HNP包自身的发布版本而非上游版本。理解了它,就理解了OpenHarmony原生包打包的入口逻辑。

鸿蒙 PC 三方库适配 HNP 打包流程的”入场券”hnp.json 文件解读

项目路径[1]

前言

如果你刚接触 OpenHarmony 的三方库适配,可能会觉得 hnp.json 这个文件看起来太简单了——只有区区几行 JSON,甚至 install 还是个空对象。它真的有那么重要吗?

答案是:非常重要。hnp.json 虽然小,但它是整个 HNP 打包流程的”入场券”。没有它,打包工具根本不认识你的库;有了它,才能把编译产物变成 OpenHarmony 设备上可安装的原生包。

这篇文章就用通俗的方式,把 hnp.json 的每个字段、它在构建流程中的位置、以及实际使用中的注意事项讲清楚。

先看文件长什么样

SHA 库的 hnp.json 内容如下:

{

“type”: “hnp-config”,

“name”: “sha”,

“version”: “1.1.0”,

“install”: {

}

}

就这 5 行有效内容。但每一行都有它的作用,下面逐个拆解。

逐字段解读

1. type — “我是谁”

“type”: “hnp-config”

通俗理解:这个字段就像身份证上的”证件类型”,告诉读取这个文件的程序:”我是一个 HNP 配置文件,不是别的什么东西。”

技术细节:

  • 固定值,必须是 “hnp-config”
  • HNP 打包工具(hnpcli)在打包时,首先检查这个字段
  • 如果 type 不是 “hnp-config”,打包工具会拒绝处理,直接报错

类比:就像 XML 文件头部的 <?xml version=”1.0″?> 声明,或者 HTML 的 <!DOCTYPE html>,是一种”自我声明”机制。

2. name — “我叫什么”

“name”: “sha”

通俗理解:包的名字。就像你安装 App 时看到的包名,比如微信叫 com.tencent.mm,这里 SHA 库就叫 sha。

技术细节:

  • 必须与 HPKBUILD 中的 pkgname 保持一致
  • 也必须与 README.OpenSource 中的 Name 保持一致
  • 打包后生成的 HNP 包文件名就是 sha.hnp

一致性对照:

三个文件中的名称必须统一,否则构建系统会混乱——想象一下,如果身份证、户口本、护照上的名字不一样,办事时会有多麻烦。

3. version — “我几岁了”

“version”: “1.1.0”

通俗理解:HNP 包的版本号。就像手机 App 的版本号(比如微信 8.0.33),用来区分同一个包的不同版本。

技术细节:

  • 采用语义化版本号格式:主版本.次版本.修订号(Major.Minor.Patch)
  • 这里的 1.1.0 是 HNP 包自身的版本,不是上游 SHA 库的版本

一个容易混淆的点:

很多人会问:为什么 version 是 1.1.0,而 HPKBUILD 里的 pkgver 是一长串 commit hash 3ee0d88fc4f629b2e084f1b4cbf22cd3597542fb?

它们是两个不同的版本概念:

打个比方:pkgver 是”原材料批次号”(你用了哪一批源码),version 是”产品型号”(你发布的包是第几版)。同一批原材料可以生产多个产品版本(比如修复了适配 bug,重新打包),同一个产品版本也可能换过原材料(比如升级了上游版本但接口没变)。

4. install — “安装后要做什么”

“install”: {}

通俗理解:安装后的额外操作配置。目前是空对象 {},意思是”安装完就完事了,不需要额外操作”。

技术细节:

  • 类型是 JSON 对象
  • 空对象 {} 表示无需额外安装步骤
  • 如果需要,可以配置安装后的脚本执行、环境变量设置等

什么时候需要填写 install?

大多数简单的库都不需要,{} 就够了。但在以下场景可能需要:

  • 需要注册系统服务:安装后要注册一个守护进程
  • 需要设置环境变量:安装后要往系统 PATH 里加路径
  • 需要执行初始化脚本:安装后要跑一段配置脚本
  • 需要创建符号链接:安装后要建立特定的链接关系

假设的复杂 install 示例(仅作说明,SHA 库不需要):

“install”: {

“post-install”: “scripts/setup.sh”,

“env”: {

“SHA_HOME”: “${install_dir}”

}

}

对于 SHA 这种纯算法库,安装就是把头文件和库文件放到正确位置,不需要额外操作,所以 {} 完全合理。

hnp.json 在构建流程中的位置

光看文件本身可能觉得简单,但把它放到整个构建流程中,就能理解它的关键作用了。

构建流程全景

源码下载(git clone)

应用补丁(patch)

编译构建(cmake + make)

安装产物(make install) ← 产物放到 usr/sha/arm64-v8a/ 等目录

┌─────────────────────────────────────────────┐

│ 打包阶段(archive 函数) │

│ │

│ ① 打 tar.gz 包 │

│ ② 复制 hnp.json 到产物目录 ← 关键步骤! │

│ ③ 设置架构环境变量 │

│ ④ 执行 hnpcli pack 打 HNP 包 │

│ ⑤ 清理环境变量 │

└─────────────────────────────────────────────┘

生成最终产物:sha.hnp + sha_xxx.tar.gz

HPKBUILD 中的关键代码

在 HPKBUILD 的 archive() 函数中,有这样一行:

cp hnp.json $LYCIUM_ROOT/usr/$pkgname/$ARCH

这行代码做的事情很简单:把 hnp.json 复制到编译产物目录中。

为什么要这么做?因为 hnpcli pack 打包工具在生成 HNP 包时,需要从产物目录中读取 hnp.json 来识别包的元数据。没有这个文件,打包工具不知道这是什么东西,自然无法生成 .hnp 包。

打包命令

${HNP_TOOL} pack -i ${LYCIUM_ROOT}/usr/$pkgname/$ARCH -o ${LYCIUM_ROOT}/output/$ARCH/

  • -i:输入目录,即包含 hnp.json 和编译产物的目录
  • -o:输出目录,生成的 .hnp 包放在这里

hnpcli 会在输入目录中寻找 hnp.json,读取其中的 name、version 等信息,然后把整个目录打包成 sha.hnp。

hnp.json 的文件分布

在 SHA 库的适配中,hnp.json 出现在多个位置:

lycium_plusplus/thirdparty/sha/

├── hnp.json ← 源文件(手写)

├── HPKBUILD

├── HPKCHECK

└── output/

└── usr/

└── sha/

├── arm64-v8a/

│ └── hnp.json ← 复制来的(构建时自动复制)

└── armeabi-v7a/

└── hnp.json ← 复制来的(构建时自动复制)

  • **根目录的 hnp.json**:这是开发者手写的源文件,是“原件”
  • **产物目录中的 hnp.json**:构建时由 cp hnp.json … 命令复制过去,是“复印件”

两个架构(arm64-v8a 和 armeabi-v7a)的 hnp.json 内容完全相同,因为包的元数据不随架构变化。

HNP 包是什么?

理解 hnp.json 的意义,需要先理解 HNP 包是什么。

类比理解

HNP(Harmony Native Package)是 OpenHarmony 的原生库包格式,专门用于分发 C/C++ 原生库。它把头文件、库文件、可执行文件等打包在一起,方便在 OpenHarmony 设备上安装和使用。

HNP 包 vs tar.gz 包

SHA 库的构建会同时生成两种包:

hnp.json 只对 HNP 包有意义,tar.gz 包不需要它。

HNP 包的内部结构

一个 HNP 包本质上是一个包含特定目录结构的压缩包:

sha.hnp

├── hnp.json ← 包的”身份证”

├── bin/ ← 可执行文件

│ ├── hmac

│ ├── pwd2key

│ ├── sha256sum

│ └── sha_test

├── include/ ← 头文件

│ └── sha/

│ ├── sha1.h

│ ├── sha2.h

│ ├── hmac.h

│ └── …

└── lib/ ← 库文件

├── libsha.so

├── libsha_static.a

└── cmake/

└── sha/

hnp.json 就放在包的根目录,是整个包的入口文件。

常见问题

Q1:hnp.json 可以省略吗?

不可以。 如果没有 hnp.json,hnpcli pack 命令会报错,无法生成 HNP 包。它是打包的必要条件。

Q2:type 字段可以改成别的值吗?

不可以。type 必须是 “hnp-config”,这是打包工具识别配置文件的固定标识。改成别的值会导致打包失败。

Q3:name 可以和 pkgname 不一样吗?

强烈不建议。 虽然技术上可能不会直接报错,但名称不一致会导致:

  • 包管理混乱,无法通过名称找到对应的包
  • 依赖解析出错
  • 用户使用时产生困惑

Q4:version 为什么要和上游版本分开?

因为它们描述的是不同的事情:

  • 上游版本(commit hash):描述“用了什么源码”
  • HNP 版本(1.1.0):描述“发布了什么包”

实际场景:你可能用同一份源码发布了两次包(第一次有 bug,修复后重新打包),这时上游版本没变,但 HNP 版本应该从 1.1.0 升到 1.1.1。

Q5:install 什么时候需要填写?

对于大多数纯库(如 SHA、加密算法库、数学库等),{} 就够了。只有需要安装后执行额外操作的场景才需要填写,比如:

  • 需要注册系统服务
  • 需要修改系统配置
  • 需要设置环境变量

Q6:修改 hnp.json 后需要重新构建吗?

需要。hnp.json 是在 archive() 阶段被复制到产物目录并参与打包的。修改后需要重新执行打包步骤,新的 hnp.json 才会生效。

如果只是修改了 hnp.json(没改源码),可以只重新执行 archive 步骤,不需要重新编译。

实践建议

1. 保持三个文件名称一致

hnp.json

→ “name”: “sha”HPKBUILD

→ pkgname=shaREADME.OpenSource

→ “Name”: “sha”

2. 版本号要有意义

HNP 版本号建议遵循语义化版本规范:

3. 不要手动修改产物目录中的 hnp.json

产物目录中的 hnp.json 是自动复制的,手动修改会在下次构建时被覆盖。只修改根目录的源文件。

4. 将 hnp.json 纳入版本控制

hnp.json 是项目配置的一部分,应该和 HPKBUILD、HPKCHECK 一起纳入 Git 版本控制。

总结

hnp.json 虽然只有几行,但它是 HNP 打包流程的关键配置文件:

核心要点:

  • hnp.json 是生成 HNP 包的必要条件,没有它就无法打包
  • name 必须与 HPKBUILD 和 README.OpenSource 中的名称保持一致
  • version 是 HNP 包自身的版本,与上游源码版本是两个概念
  • install 大多数情况下为空 {},只有特殊需求才需要填写
  • 它在构建的 archive() 阶段被复制到产物目录,供 hnpcli pack 读取

一个小文件,一个大门道。理解了 hnp.json,就理解了 OpenHarmony 原生包打包的入口逻辑。

本文由人人都是产品经理作者【null】,微信公众号:【nutpi】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议。