当前位置: 首页 > news >正文

OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?

找了一圈发现官方的文档都是最新的,3.2很多API都不支持,比如获取OhosAppContext,通过OhosAppContext来获取应用版本号,最终是通过读取app.json5的文件内容来读取版本号,最终修改entry下的hvigorfile.ts如下,执行./hvigorw assembleHap,或者编译打包就可以生成新的hap名字了

import { hapTasks } from '@ohos/hvigor-ohos-plugin';
import fs from 'fs'
import { HvigorNode, HvigorPlugin, HvigorTaskContext } from "@ohos/hvigor";
import { OhosAppContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin';
import { AppJson } from "@ohos/hvigor-ohos-plugin/src/options/configure/app-json-options";const getDate = () => {return new Date().toISOString().split('T')[0]; // 返回 YYYY-MM-DD 格式
};export function rename(): HvigorPlugin {return {pluginId: 'renameHapPlugin',apply(node: HvigorNode) {// 插件主体node.registerTask({// 任务名称name: 'renameHapTask',// 重命名任务在default@SignHap任务执行完成后执行dependencies: ['default@SignHap'],// 重命名任务在default@assembleHap任务执行完成前执行postDependencies: ['assembleHap'],run: (taskContext: HvigorTaskContext) => {console.log(`开始执行重命名任务`)// 获取模块名const moduleName = taskContext.moduleName// 获取模块路径const modulePath = taskContext.modulePath// 假设我们在entry目录的hvigorfile.ts文件调用插件,那拿到的模块名就是entry,模块路径就是entry模块的绝对路径。console.log(`模块名:${moduleName}`)console.log(`模块路径:${modulePath}`)// hap所在路径const originSignFilePath = `${modulePath}/build/default/outputs/default/${moduleName}-default-signed.hap`const originUnsignFilePath = `${modulePath}/build/default/outputs/default/${moduleName}-default-unsigned.hap`console.log(`原签名文件路径:${originSignFilePath}`)console.log(`原未签名文件路径:${originUnsignFilePath}`)// 新文件所在的目录const targetFileDir = `${modulePath}/build/default/outputs/default/target`// 创建目录fs.mkdir(targetFileDir, { recursive: true }, (err) => {console.log(`目录创建失败:{err}`)})// 获取父节点// const parentNode = node.getParentNode()// // 获取OhosAppContext// const appContext = parentNode?.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext// 获取项目名// 获取AppScope目录下app.json文件里面的json// const appOptObj: AppJson.AppOptObj = appContext.getAppJsonOpt()const appJsonPath = './AppScope/app.json5';const content = fs.readFileSync(appJsonPath, 'utf8');const appJson = JSON.parse(content);// 只获取版本号const versionName = appJson.app.description;console.log(`app.json5获取的版本号:${versionName}`)// const versionName = versionconsole.log(`版本:${versionName}`)const date = getDate()// 新文件路径const targetSignFilePath = `${modulePath}/build/default/outputs/default/target/${versionName}_${date}-signed.hap`const targetUnsignFilePath = `${modulePath}/build/default/outputs/default/target/${versionName}_${date}-default-unsigned.hap`// 复制文件if (fs.existsSync(originSignFilePath)) {// 原文件存在才复制fs.copyFileSync(originSignFilePath, targetSignFilePath)// fs.unlink(originSignFilePath, (err: BusinessError) => {// })}if (fs.existsSync(originUnsignFilePath)) {// 原文件存在才复制fs.copyFileSync(originUnsignFilePath, targetUnsignFilePath)// fs.unlink(originUnsignFilePath, (err: BusinessError) => {// })}console.log(`重命名任务执行完成`)}})// const hapContext = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext;// const buildProfile = appContext.getBuildProfileOpt()//// buildProfile.app.products[0].output.artifactName = 'TestartifactName.0.0.1';//// appContext.setBuildProfileOpt(buildProfile);}}
}export default {system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */plugins: [rename()]         /* Custom plugin to extend the functionality of Hvigor. */
}
http://www.lryc.cn/news/526243.html

相关文章:

  • 【openwrt】openwrt odhcpd配置介绍
  • 基于神经网络的视频编码NNVC(1):帧内预测
  • Android开发,待办事项提醒App的设计与实现
  • 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
  • MySQL索引——让查询飞起来
  • Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
  • 【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
  • 洛谷P1143 进制转换
  • 99.12 金融难点通俗解释:毛利率
  • HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
  • C++从入门到实战(二)C++命名空间
  • C# OpenCV机器视觉:实现农作物病害检测
  • 开源软件协议介绍
  • CLion开发Qt桌面
  • 09_异步加载_单例模式_常量类配置_不可销毁
  • 士的宁(strychnine)的生物合成-文献精读104
  • 【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)
  • (Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
  • ray.rllib 入门实践-2:配置算法
  • 2025-01学习笔记
  • 多线程执行大批量数据查询
  • ChatGPT高效处理图片技巧使用详解
  • leetcode——相交链表(java)
  • RubyFPV开源代码之系统简介
  • 麦田物语学习笔记:创建TransitionManager控制人物场景切换
  • 后端SpringBoot学习项目-用户管理-增删改查-service层
  • 机器学习11-学习路径推荐
  • [ACTF2020 新生赛]Upload1
  • 【PyTorch】0.初识:从吃货角度理解张量
  • 医学图像分析工具09.1:Brainstorm安装教程