HarmonyOS鸿蒙Next中怎么设置自定义hvigor构建任务的输入为之前已完成的构建任务的输出?即如何动态决定增量任务的输入?

HarmonyOS鸿蒙Next中怎么设置自定义hvigor构建任务的输入为之前已完成的构建任务的输出?即如何动态决定增量任务的输入? 如题,目前实现了一个har模块的自定义插件,注册了一个用于检查模块的资源是否加上了定义的前缀的编译任务@PrefixResource,避免不同模块的资源重名问题

问题在于想要让该任务实现增量构建,需要在task定义中加上input及output,但是input和output以及context都是在编译任务的加载阶段就已经执行并确定了,而我想要用@ProcessResource任务生成的resConfig.json文件中的中moduleResources属性的值指向的文件夹路径作为@PrefixResource的input,是否有办法在某些编译任务执行完成之后再确定接下来的任务的input呢


更多关于HarmonyOS鸿蒙Next中怎么设置自定义hvigor构建任务的输入为之前已完成的构建任务的输出?即如何动态决定增量任务的输入?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

可以指定文件作为增量条件,但是没法去读取文件的内容

function hapTask(currentNode: HvigorNode) {

  currentNode.subNodes((node: HvigorNode) => {

      const hapContext = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext;

      const moduleName = hapContext?.getModuleName();

      hapContext?.targets((target: Target) => {

          const targetName = target.getTargetName();

          node.registerTask({

              name: `${targetName}@PrefixResource`,

              input(inp: TaskInput) {

                  inp.file('D:/project/deveco_project/MyApplication41/entry/build/default/intermediates/res/default/resConfig.json');

              },

              run() {

                  console.log('module Task');

              }

          });

      });

  });

}

第二个问题暂时不支持单点值作为增量输出条件,后期有增量的逆向改进专项

更多关于HarmonyOS鸿蒙Next中怎么设置自定义hvigor构建任务的输入为之前已完成的构建任务的输出?即如何动态决定增量任务的输入?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我知道可以指定文件,但判断文件是在编译之前进行的,而我想以编译中的某个任务(比如ProcessResource)结束后生成的文件中的内容(比如resConfig.json中的资源文件夹路径,如果不变就不需要重新执行)作为是否增量任务的判断。

同样的,构建任务的output只能指定为file,而我只想根据某个file中的部分值来判断要不要执行这个任务,如果在目前的情况下想要实现这个功能就只能为每个task各自定义一个自己的输出文件,里面只放自己的输出,这样会导致模块变得臃肿而且不容易扩展;如果只有一个输出文件,则这些构建任务会被其他的任务所干扰,只要有一个构建任务的输出出现变化,所有以这个文件为输出的构建任务都要重新执行。有没有什么好的解决方案呢

在HarmonyOS鸿蒙Next中,可以通过配置hvigor构建脚本来实现自定义构建任务的输入为之前已完成构建任务的输出。具体步骤如下:

  1. 定义任务依赖:在hvigor构建脚本中,使用dependsOn方法明确指定任务之间的依赖关系。例如,taskB.dependsOn(taskA)表示taskB依赖于taskAtaskB会在taskA完成后执行。

  2. 获取任务输出:在自定义任务中,通过taskA.outputs获取taskA的输出文件或目录。outputs属性包含了任务生成的所有输出文件。

  3. 动态设置输入:在自定义任务的配置中,使用inputs属性动态设置输入为taskA的输出。例如,taskB.inputs.files(taskA.outputs)taskB的输入设置为taskA的输出文件。

  4. 增量构建hvigor支持增量构建,通过upToDateWhen方法判断任务是否需要重新执行。如果输入文件未发生变化,任务将跳过执行,提高构建效率。

示例代码片段:

task taskA {
    outputs.dir 'build/outputA'
    doLast {
        // 任务A的具体操作
    }
}

task taskB {
    dependsOn taskA
    inputs.files taskA.outputs
    doLast {
        // 任务B的具体操作
    }
}

在HarmonyOS鸿蒙Next中,可以通过配置hvigor构建脚本来实现自定义构建任务的输入为之前任务的输出。具体步骤如下:

  1. 定义任务依赖:在build.gradlehvigorfile.js中,使用dependsOn方法确保自定义任务在所需任务之后执行。

  2. 获取输出路径:通过project.tasks获取前一个任务的输出路径,并将其作为自定义任务的输入。

  3. 动态设置输入:在自定义任务的配置中,使用inputs.filesinputs.dir动态设置输入路径。

例如:

task customTask {
    dependsOn 'previousTask'
    inputs.files { project.tasks.previousTask.outputs.files }
    doLast {
        // 自定义任务逻辑
    }
}

这样,自定义任务将自动使用前一个任务的输出作为输入,实现增量构建。

回到顶部