harmony-hvigor-plugin

  1. 重命名插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    export function renameAppPlugin(str?: string): HvigorPlugin {
    return {
    pluginId: 'RenameAppPlugin',
    apply(currentNode: HvigorNode) {
    const appContext = currentNode.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext
    const appJson = appContext.getAppJsonOpt()
    const appVersion = appJson['app']['versionName']
    console.log('RenameAppPlugin apply start, appVersion:', appVersion)
    const product = appContext.getCurrentProduct()
    const productName = product.getProductName()
    const bundleType = product.getBundleType()
    console.log('RenameAppPlugin apply start, productName:', productName, bundleType, product.getBundleName())

    currentNode.registerTask({
    // 编写自定义任务
    name: 'renameAppTask',
    run: (taskContext) => {
    console.log('renameHarTask run start', taskContext.moduleName, taskContext.modulePath)
    const formatZero = (d: number): string => {
    return d < 10 ? `0${d}` : `${d}`
    }
    const formatDate = (): string => {
    const date = new Date()
    return `${date.getFullYear()}${formatZero(date.getMonth() +
    1)}${formatZero(date.getDate())}${formatZero(date.getHours())}${formatZero(date.getMinutes())}`
    }

    const rename = (signType: string) => {
    const outputPath = `/build/outputs/${productName}/`
    const sourceName = `${taskContext.moduleName}-${productName}-${signType}.${bundleType}`
    const sourceFile = taskContext.modulePath + outputPath + sourceName
    const targetPath = taskContext.modulePath + outputPath
    const targetName = `${taskContext.moduleName}-${productName}-${appVersion}-${formatDate()}-${signType}.${bundleType}`
    const targetFile = targetPath + targetName
    console.log('renameAppTask sourceFile:', sourceFile)
    console.log('renameAppTask targetFile:', targetFile)

    // 创建目录
    fs.mkdir(targetPath, { recursive: true }, (err) => {
    if (err) {
    console.log('renameAppTask mkdir err: ' + err)
    }
    fs.rename(sourceFile, targetFile, (err) => {
    console.log('renameAppTask rename err: ' + err)
    })
    })
    }

    rename('signed')
    rename('unsigned')
    },
    dependencies: ['PackageApp'],
    postDependencies: ['assembleApp']
    })
    }
    }
    }

  2. 输出重命名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    hvigor.getRootNode().afterNodeEvaluate(rootNode => {
    // 获取app插件的上下文对象
    const appContext = rootNode.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext;
    const projectName = appContext.getProjectName()
    const product = appContext.getCurrentProduct()
    const productName = product.getProductName()

    const appJson = appContext.getAppJsonOpt();
    const appVersion = appJson['app']['versionName']
    console.log('renameAppPlugin getRootNode, appJson:', appJson)
    console.log('renameAppPlugin getRootNode, productName:', productName, projectName)

    const buildProfileJson = appContext.getBuildProfileOpt();
    // console.log('renameAppPlugin getRootNode start, buildProfileJson:', buildProfileJson)
    const productsInBuildProfile = buildProfileJson['app']['products']
    console.log('renameAppPlugin getRootNode, productsInBuildProfile:', productsInBuildProfile)

    const formatZero = (d: number): string => {
    return d < 10 ? `0${d}` : `${d}`
    }
    const formatDate = (): string => {
    const date = new Date()
    return `${date.getFullYear()}${formatZero(date.getMonth() +
    1)}${formatZero(date.getDate())}${formatZero(date.getHours())}${formatZero(date.getMinutes())}`
    }

    for (const product of productsInBuildProfile) {
    if (!product['output']) {
    product['output'] = { 'artifactName': '' }
    }
    product['output']['artifactName'] += `${projectName}-${productName}-${appVersion}-${formatDate()}`
    console.log('renameAppPlugin getRootNode, output name:', product['output']['artifactName'])
    }

    console.log('renameAppPlugin getRootNode, is assembleApp task:', hvigor.isCommandEntryTask('assembleApp'), hvigor.getCommandEntryTask());
    if (hvigor.isCommandEntryTask('assembleApp') && productName === 'prod') {
    const foundProduct = productsInBuildProfile.find(product => product['name'] === 'prod')
    if (foundProduct) {
    foundProduct['signingConfig'] = 'prod'
    appContext.setBuildProfileOpt(buildProfileJson)
    console.log('renameAppPlugin assemble prod app, change to prod sign', foundProduct)
    }
    }
    })

  3. 动态添加依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-build-expanding-context-V5
    // function jfzDependPlugin(): HvigorPlugin {
    // return {
    // pluginId: 'jfzDependPlugin',
    // async apply(currentNode: HvigorNode): Promise<void> {
    // console.log('jfzDependPlugin', currentNode)
    // const appContext = currentNode.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext;
    // console.log('jfzDependPlugin appContext', appContext)
    // const dependency = appContext.getDependenciesOpt({}); //获取dependency依赖
    // // dependency["library"]="file:library.har"
    // console.log(dependency);
    // appContext.setDependenciesOpt(dependency ) //修改dependency依赖
    // }
    // }
    // }