HarmonyOS开发:超详细介绍如何开源静态共享包,实现远程依赖

news2025/1/20 3:55:29

前言

当我们开发了一个独立的功能,想让他人进行使用,一般的方式就是开源出去,有源码的方式,也有文件包的形式,当然了也有远程依赖的方式,比如在Android中,我们可以提供源码,也可以打包成一个aar,当然了也可以maven仓库形式的远程依赖。

无论是内部多项目形式的开发,还是开源供他人使用,无疑远程依赖的方式是最方便的,有了更改,只需变动版本号就可以了,当然了,如果是内部,仅仅是单一项目使用,大可不必采用远程依赖,直接在放入到项目中开发即可。

需要注意的是,静态共享包的远程发布和是否是NEXT系统没有直接的关联,你是Api9,也是可以发布至远程的,当然了,考虑到NEXT的到来,很多Api有些许的差异,也希望大家可以基于NEXT进行发布。

本篇文章分享如下:

1、如何打一个静态共享包

2、静态共享包上传前的文件配置

3、上传一个静态共享包

4、静态共享包的使用、更新与删除

5、总结

一、如何打一个静态共享包

这个就太简单了,在之前的文章HarmonyOS开发:走进静态共享包的依赖与使用中,关于静态包的创建以及使用,做了很详细的介绍了,有兴趣的同学可以查看,当然了,这里也简单的概述一下。

1、创建静态共享包

在项目右键,新建Module:

选择Static Library:

填写Module名,选择设备,目前支持三种设备,手机、平板、2和1的平板电脑。

创建完成。

2、编译静态共享包

静态共享包创建完成之后,大家就可以编写自己的代码了,可以包含代码、C++库、资源和配置文件,具体的功能性使用,大家可以看之前分享的文章,由于NEXT和之前的版本有部分语法上的区别,大家在NEXT版本上需要注意。

这里有一点需要注意,那就是混淆方式,之前的混淆方式,build-profile.json5文件中添加artifactType属性为obfuscation,但是在NEXT版本之后就不支持了

NEXT版本混淆如下,在模块级的build-profile.json5配置文件中开启混淆功能,有点类似于Android Studio里的混淆方式。

{
  "apiType": "stageMode",
  ...
  "buildOptionSet": [
    {
      "name": "release",
      "arkOptions": {
        "obfuscation": {
          "ruleOptions": {
            "enable": true,               // true表示进行混淆,false表示不进行混淆。默认值为true
            "files": [
              "./obfuscation-rules.txt"  // 混淆规则文件
            ]
          }
        }
      }
    },
  ],
  ...
}

一切功能都开发完成之后,点击当前的静态共享包,选择Build中第一个选项。

编译之后,在静态共享包下,如下的位置,就会产生一个har包,证明就编译成功了,这个就是我们最终要上传的包。

二、静态共享包上传前的文件配置

在OpenHarmony三方库中心仓中,仅仅上传一个har包,是不能上传成功的,必须得有针对静态共享包的描述也就是README文件,更新版本信息CHANGELOG 文件,还有就是开源协议license,这些都是必要的。

1、README文件

和大多数开源项目一样,主要介绍静态共享包的功能,使用方式等等,当然,大家也可以去OpenHarmony三方库中心仓看看别人是如何写的,当然了,有条件的,可以写两份,一份中文,一份英文。

这些信息,主要展示在描述信息里,如下所示:

2、CHANGELOG 文件

CHANGELOG文件也是md文件,主要记录当前的更新版本信息,如下所示:

以上呢,主要展示在版本信息里,如下所示:

3、开源协议license

LICENSE 文件的存在对于三方库开源尤其重要,因为它确保了软件的自由和开放,同时也允许作者保留某些权利,支持大部分的开源协议。

除了以上之外呢,还有一处是比较重要的,那就静态共享包的基本信息填写,会展示在右侧的模块里:

主要是oh-package.json5文件,包含了静态包的名字,版本,描述信息等。

{
  "name": "名字",
  "version": "版本号",
  "description": "描述信息",
  "main": "Index.ets",
  "author": "作者",
  "license": "Apache-2.0",
  "keywords": ["搜索关键词"],
  "homepage": "主页地址",
  "repository": "仓库地址",
  "dependencies": {}
}

三、上传一个静态共享包

当一个静态共享包,所有的准备工作完成之后,我们就可以上传远程仓库了,也就是OpenHarmony三方库中心仓。

1、注册账号

第一步就是注册账号,地址是:OpenHarmony三方库中心仓。

2、新增组织管理

也就是以后你的开源包上传到哪个组织下,这个有审核,之前审核特别慢,但是最近审核还是很快的。

组织名称,一般简单的英文即可。

3、生成公、私钥

打开命令行窗口,执行如下命令,your_key_path就是你要生成到哪个路径下:

ssh-keygen -m PEM -t RSA -b 4096 -f  your_key_path

中间有一步需要设置密码,这个密码一定要记住,以后发布都会用到。

执行成功后,会生成两个文件,一个公钥一个私钥,如下所示:

4、新增OHPM公钥

回到OpenHarmony三方库中心仓,点击个人中心,点击认证管理,新增即可。

点击新增之后,把第3步中生成的公钥,也就是.pub文件内容复制过来,保存即可。

5、配置私钥文件

同样的,打开命令行工具,执行如下命令,your_key_path就是私钥文件路径。

ohpm config set key_path your_key_path

6、复制发布码并配置

去OpenHarmony三方库中心仓个人中心中,点击复制发布码。

打开命令行工具,设置发布码,your_publish_id就是刚才复制的发布码。

ohpm config set publish_id your_publish_id

7、发布HAR

执行如下命令,HAR路径就是打出的静态包路径。

ohpm publish HAR路径  

执行完命令后,输入配置的秘钥密码即可:

命令执行成功之后,就可以在个人中心的消息里,看到审核记录。

审核成功之后,在OpenHarmony三方库中心仓里就可以看到了,之后就可以远程依赖使用了。

四、静态共享包的使用、更新与删除

1、使用静态共享包

静态共享包,发布成功,并且审核通过之后,那么使用,则是非常的简单,只需要在oh-package.json5文件里的dependencies属性里,把远程依赖即可,当然了,这里需要进行同步项目。

这种远程依赖的方式,是不是要比本地har包或者Module的方式要简单的多了。需要注意的是,关于三方库的名字,需要规划化:

OpenHarmony 三方库命名规范:

格式如 @group/package_name,全局唯一;
除了 @ 和 / 之外,group 和 package_name 只能由小写字母、数字、_和 - 组成;
总长度小于等于 128 个字符;
须以字母开头;
不能是 ArkTS 的保留关键字。

当然了,除了以上的手动输入依赖之外,你也可以进行命令操作,会自动的在oh-package.json5文件里的dependencies属性里进行配置。

ohpm install <package_name> 

2、更新静态共享包

更新有两种方式,一种是手动更改版本号,也就是在oh-package.json5文件里的dependencies里进行手动更改,重新同步项目即可,另一种就是命令操作。

更新所有三方库:

ohpm update

更新指定名称的三方库:

ohpm update <package_name>

3、移除静态共享包

移除,最简单的方式就是在oh-package.json5文件里的dependencies里进行手动移除,然后同步项目即可。当然,你也可以执行命令移除。

移除单个:

ohpm uninstall <package_name>

移除所有三方库:

ohpm uninstall

五、总结

有的同学可能会有疑问,静态共享包中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝,而动态共享包可以让多个HAP共享同一公共资源代码,极大程度上减少了包体积,为什么不把动态共享包上传至远程,进行依赖呢?

可以告诉大家的是,是因为目前官方还不支持,当下远程依赖仅支持静态共享包的发布,不过呢,在私仓可以使用;毕竟动态共享包只支持在应用内共享,不支持跨应用共享,可能也是趋于这一层原因。

好了,本篇文章就到这里,下一篇,我们探究下共享包的私服搭建和使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1529803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源离线语音识别输入工具CapsWriter v1.0——支持无限时长语音、音视频文件转录字幕。

分享一款开源离线语音识别输入工具&#xff0c;支持无限时长语音、音视频文件转录字幕。 软件简介&#xff1a; CapsWriter是一款免费开源且可完全离线识别的语音输入工具&#xff0c;无需担心因在线版本识别带来的各种隐私泄露问题。支持win7及以上的系统&#xff0c;已经更…

华为中心AP 配置入侵防御实验

配置入侵防御示例 组网图形 图1 入侵防御组网图 组网需求配置思路操作步骤中心AP的配置文件 组网需求 如图1所示&#xff0c;某企业部署了WLAN网络&#xff0c;内网用户可以访问Internet的Web服务器。现需要在中心AP上配置入侵防御功能&#xff0c;具体要求如下&#xff1a; 保…

打印机怎么扫描文件到电脑?正确步骤在这里

在现代办公和生活中&#xff0c;打印机不再仅仅是用于输出纸质文件的工具&#xff0c;它还充当了功能强大的扫描仪&#xff0c;使我们能够方便地将纸质文件数字化并存储到电脑中。 如果您正在寻找如何正确将打印机用作扫描仪&#xff0c;以便轻松地将文件传输到电脑中&#xf…

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链&#xff1a; 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

智能合约语言(eDSL)—— 使用rust实现eDSL的原理

为理解rust变成eDSL的实现原理&#xff0c;我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力&#xff0c;使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能&#x…

【QT+QGIS跨平台编译】之八十四:【QGIS_Gui跨平台编译】—【错误处理:未实例化QgsMapLayer - QgsHighlight】

文章目录 一、未实例化QgsMapLayer二、错误处理 一、未实例化QgsMapLayer 报错信息&#xff1a; 二、错误处理 第31行修改为&#xff1a; #include "qgsmaplayer.h"

【Web技术应用基础】HTML(2)——文本练习

题目1&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTML链接</title><meta name"description" content"HTML链接知识讲解"><meta name"keywords" content&qu…

(undone) 斯坦福机器学习 讨论课4 (分类器评估指标 TODO:暂时不知道内容是啥)

从标题来看这堂课跟评估指标有关&#xff0c;而且是专门针对分类器的评估指标 如下图&#xff0c;解释了 “为什么 metrics 很重要” 1.训练目标 (成本函数) 仅仅是现实世界目标的一个代理 (proxy) 2.理想的训练目标应该是指标 metric&#xff0c;但这并不总是可能的。metric…

Stability AI 3D:开创3D视觉技术新篇章,提升多视角连贯性与生成质量

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ASPICE规范之系统追溯矩阵

系统追溯矩阵的需求来自 ISO26262 举例在描述系统追溯矩阵时&#xff1a;客户需求->系统需求&#xff1b;系统需求->客户需求&#xff1b;系统需求->软件需求&#xff1b;系统需求->硬件需求

有实际意义的伦敦金交易策略参考

一谈起有实际意义的伦敦金交易策略参考&#xff0c;很多人以为是讨论的是什么飞天遁地的技术&#xff0c;其实这些都是没有实际意义。对普通投资者来说&#xff0c;什么才是有实际意义的呢&#xff1f;那就是生存。要讨论实际有意义的伦敦金交易策略参考&#xff0c;就是投资者…

【计算机网络_网络层】IP协议

文章目录 1. IP的基本概念1.1 什么是IP协议1.2 为什么要有IP协议 2. IP的协议格式3. 网段划分&#xff08;重要&#xff09;3.1 为什么要进行网段划分3.2 网段划分的规则3.2.1 古老的划分方案3.2.2 现代的划分方案 4. 特殊的IP地址5. 解决IP地址的数量限制问题6. 私有IP和公网I…

【视频异常检测】Real-world Anomaly Detection in Surveillance Videos 论文阅读

Real-world Anomaly Detection in Surveillance Videos 论文阅读 Abstract1. Introduction2. Related Work3. Proposed Anomaly Detection Method3.1. Multiple Instance Learning3.2. Deep MIL Ranking Model 4. Dataset4.1. Previous datasets4.2. Our dataset 5. Experiment…

java8:LinkedList的实现原理

概述 先来看看源码中的这一段注释&#xff0c;我们先尝试从中提取一些信息&#xff1a; Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).All of the operations …

【Linux(1)】Linux的一些基本指令(补充上一篇)

思维导图 学习内容 通过上面的学习目标&#xff0c;我们可以列出要学习的内容&#xff1a; linux的一些指令&#xff1a;cd mkdir cp touch which rm cat alias 一些基本的概念&#xff1a;指令的概念&#xff0c;用户家目录是什么...... 一、Linux的一些指令 1.1 重新认识…

【SpringSecurity】十三、基于Session实现授权认证

文章目录 1、基于session的认证2、Demosession实现认证session实现授权 1、基于session的认证 流程&#xff1a; 用户认证成功后&#xff0c;服务端生成用户数据保存在session中服务端返回给客户端session id (sid&#xff09;&#xff0c;被客户端存到自己的cookie中客户端下…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小&#xff0c;可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

[uni-app] uni.createAnimation动画在APP端无效问题记录

文章目录 uni.createAnimation动画描述动画代码templatejs部分 问题原因改进方案template js部分改动git 改进截图 uni.createAnimation 动画描述 实现一个以左上角为锚点,以Z轴做平面抬起及落下的动画效果 动画代码 template <image v-if"showHot(item.cname)&quo…

查找众数及中位数 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 众数是指一组数据中出现次数量多的那个数&#xff0c;众数可以是多个。 中位数只是指把一组数据从小到大排列&#xff0c;最中间的那个数&#xff0c;如果这组数…

Filter and Listener and AJAX and JSON

一、Filter Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。&#xff08;拦截指定资源&#xff09; 正常情况下&#xff0c;浏览器可以访问服务器上的所有的资源&…