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

前言

当我们开发了一个独立的功能,想让他人进行使用,一般的方式就是开源出去,有源码的方式,也有文件包的形式,当然了也有远程依赖的方式,比如在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里的混淆方式。

TypeScript 复制代码
{
  "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文件,包含了静态包的名字,版本,描述信息等。

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

三、上传一个静态共享包

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

1、注册账号

第一步就是注册账号,地址是:ohpm.openharmony.cn

2、新增组织管理

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

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

3、生成公、私钥

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

text 复制代码
ssh-keygen -m PEM -t RSA -b 4096 -f  your_key_path

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

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

4、新增OHPM公钥

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

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

5、配置私钥文件

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

text 复制代码
ohpm config set key_path your_key_path

6、复制发布码并配置

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

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

text 复制代码
ohpm config set publish_id your_publish_id

7、发布HAR

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

text 复制代码
ohpm publish HAR路径  

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

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

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

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

1、使用静态共享包

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

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

text 复制代码
OpenHarmony 三方库命名规范:

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

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

text 复制代码
ohpm install <package_name> 

2、更新静态共享包

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

更新所有三方库:

text 复制代码
ohpm update

更新指定名称的三方库:

text 复制代码
ohpm update <package_name>

3、移除静态共享包

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

移除单个:

text 复制代码
ohpm uninstall <package_name>

移除所有三方库:

text 复制代码
ohpm uninstall

五、总结

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

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

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

相关推荐
小白也想学C4 分钟前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程11 分钟前
初级数据结构——树
android·java·数据结构
jikuaidi6yuan13 分钟前
鸿蒙系统(HarmonyOS)分布式任务调度
分布式·华为·harmonyos
闲暇部落2 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
程序猿看视界3 小时前
如何在 UniApp 中实现 iOS 版本更新检测
ios·uniapp·版本更新
诸神黄昏EX4 小时前
Android 分区相关介绍
android
大白要努力!5 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee5 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood6 小时前
Perfetto学习大全
android·性能优化·perfetto
dr李四维6 小时前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode