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 = version
          console.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. */
}

你可能感兴趣的:(鸿蒙,鸿蒙,OpenHarmony)