欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼的操作方法

 更新時間:2024年11月21日 08:59:51   作者:龍兒箏  
Hvigor主要提供了兩種方式來實現(xiàn)插件:基于hvigorfile腳本開發(fā)插件、基于typescript項目開發(fā),下面以基于hvigorfile腳本開發(fā)插件進(jìn)行介紹,感興趣的朋友跟隨小編一起看看吧

Hvigor允許開發(fā)者實現(xiàn)自己的插件,開發(fā)者可以定義自己的構(gòu)建邏輯,并與他人共享。Hvigor主要提供了兩種方式來實現(xiàn)插件:基于hvigorfile腳本開發(fā)插件、基于typescript項目開發(fā)。下面以基于hvigorfile腳本開發(fā)插件進(jìn)行介紹。

基于hvigorfile腳本開發(fā)

基于hvigorfile.ts腳本開發(fā)的方式,其優(yōu)點是可實現(xiàn)快速開發(fā),直接編輯工程或模塊下hvigorfile.ts即可編寫插件代碼,不足之處是在多個項目中,無法方便的進(jìn)行插件代碼的復(fù)用和共享分發(fā)。

  • 導(dǎo)入模塊依賴。
// 導(dǎo)入接口
import { HvigorPlugin, HvigorNode } from '@ohos/hvigor'
  • 編寫插件代碼。
    在hvigorfile.ts中定義插件方法,實現(xiàn)HvigorPlugin接口。
// 實現(xiàn)自定義插件
function customPlugin(): HvigorPlugin {
    return {
        pluginId: 'customPlugin',
        apply(node: HvigorNode) {
            // 插件主體
            console.log('hello customPlugin!');
        }
    }
}
  • 在導(dǎo)出聲明中使用插件。
export default {
    system: appTasks,
    plugins:[
        customPlugin()  // 應(yīng)用自定義Plugin
    ]
}

使用hvigorfile插件動態(tài)生成navigation防混淆文件

我們在使用navigation的系統(tǒng)路由表時,每次添加新頁面,都需要配置一下release環(huán)境防混淆。若將這些頁面放在一個固定的目錄下,則與我們的模塊化設(shè)計相違背,若命名使用固定的前綴或后綴,總感覺有點多余,手動一個一個的添加,雖然符合我們的代碼規(guī)范設(shè)計,但就是有點繁瑣。有沒有更方便的方式來處理這個混淆配置呢?

其實我們可以在寫一個hvigorfilew插件來自動生成混淆配置文件。我們自定義一個HvigorPlugin任務(wù),通過OhosHapContext對象讀取module.json5文件中的routerMap字段,可以獲取系統(tǒng)路由表的名稱,再讀取profile目錄下的路由表。解析json文件內(nèi)存,并將頁面路徑寫到一個混淆文件中,這樣每次編譯時,自動生成防混淆文件,我們只需要引入這個文件就可以了。示例如下

import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
  return {
    pluginId: 'parseRouterMap',
    apply(node: HvigorNode) {
      const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
      const moduleJson = hapCtx.getModuleJsonOpt()
      const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
      const dir = hapCtx.getModulePath()
      const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
      const json = FileUtil.readJson5(srcFile)
      const routerRuleFile = FileUtil.pathResolve(dir, 'obfuscation-router.txt')
      FileUtil.ensureFileSync(routerRuleFile)
      const routerMapArray = json['routerMap']
      let rules = '-keep-file-name\n'
      for (const element of routerMapArray) {
        const pageSourceFile = element['pageSourceFile']
        const path = pageSourceFile.substring(0, pageSourceFile.lastIndexOf('.'))
        rules += `${path}\n`
      }
      FileUtil.writeFileSync(routerRuleFile, rules)
    }
  }
}
export default {
  system: hapTasks,
  plugins:[parseRouterMap()]
}

編譯后會在entry目錄下生成obfuscation-router.txt防混淆文件,只要引入這個文件就可以了。

使用hvigorfile插件動態(tài)生成navigation頁面枚舉名稱

我們在我們navigation的push跳轉(zhuǎn)到新頁面時,都得提前定義好系統(tǒng)路由表中的頁面name,因為使用的name與系統(tǒng)路由表中定義的name不相同時,跳轉(zhuǎn)頁面則會白屏。有了前面的經(jīng)驗,其它我們也可以動態(tài)生成一個ets文件,將系統(tǒng)路由表中的頁面名稱自動生成一個枚舉,這樣就不用每次配置系統(tǒng)路由表,還是復(fù)制一下名稱了。例如我們的系統(tǒng)路由表是這樣的

{
  "routerMap": [
    {
      "name": "dialog",
      "pageSourceFile": "src/main/ets/pages/dialog/DialogPage.ets",
      "buildFunction": "dialogBuilder"
    },
    {
      "name": "web",
      "pageSourceFile": "src/main/ets/pages/web/WebPage.ets",
      "buildFunction": "webBuilder"
    },
    {
      "name": "login",
      "pageSourceFile": "src/main/ets/pages/login/LoginPage.ets",
      "buildFunction": "loginBuilder"
    }
  ]
}

我們現(xiàn)在實現(xiàn)一個hvigorfile插件,來解析系統(tǒng)路由表中的name字段,并生成對應(yīng)的枚舉值。示例如下

import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
  return {
    pluginId: 'parseRouterMap',
    apply(node: HvigorNode) {
      const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
      const moduleJson = hapCtx.getModuleJsonOpt()
      const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
      const dir = hapCtx.getModulePath()
      const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
      const json = FileUtil.readJson5(srcFile)
      const routerMapFile = FileUtil.pathResolve(dir, 'src', 'main', 'ets', 'Pages.ets')
      FileUtil.ensureFileSync(routerMapFile)
      const routerMapArray = json['routerMap']
      let ss = ''
      for (const element of routerMapArray) {
        const name = element['name']
        ss += `  ${name} = '${name}',\n`
      }
      ss = `export enum Pages {\n${ss}}`
      FileUtil.writeFileSync(routerMapFile, ss)
    }
  }
}
export default {
  system: hapTasks,
  plugins:[parseRouterMap()]
}

我們在ets目錄下生成了一個Pages.ets文件,并將所有navigation頁面生成對應(yīng)的枚舉值,頁面跳轉(zhuǎn)時,使用這些枚舉值就不怕出錯了。Pages.ets內(nèi)容如下

export enum Pages {
  dialog = 'dialog',
  web = 'web',
  login = 'login',
}

到此這篇關(guān)于鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼的文章就介紹到這了,更多相關(guān)鴻蒙開發(fā)Hvigor插件動態(tài)生成代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 5個ChatGPT功能幫助你提升日常編碼效率

    5個ChatGPT功能幫助你提升日常編碼效率

    ChatGPT?作為最快完成億活用戶的應(yīng)用,最近真的是火出天際了。今天分享5個?ChatGPT?功能,來提升我們的日常工作以及如何使用它提高代碼質(zhì)量
    2023-02-02
  • CSDN 博客的代碼高亮問題自己修復(fù)

    CSDN 博客的代碼高亮問題自己修復(fù)

    這幾天 CSDN 博客的代碼高亮功能突然不行了,而且論壇上有人提出 BUG,沒有得到回應(yīng)。
    2009-05-05
  • Atlassian系列產(chǎn)品及插件激活方法[JIRA8.19.0+]

    Atlassian系列產(chǎn)品及插件激活方法[JIRA8.19.0+]

    Atlassian家有很多產(chǎn)品,都真的非常好用。比如公司使用JIRA做項目管理,使用Confluence做文檔、知識管理等(我個人用它來做筆記)。本文給大家分享Atlassian系列產(chǎn)品及插件激活方法[JIRA8.19.0+],感興趣的朋友參考下吧
    2021-12-12
  • 詳解SHA-256算法的原理以及C#和JS的實現(xiàn)

    詳解SHA-256算法的原理以及C#和JS的實現(xiàn)

    SHA-256 是 SHA-2 下細(xì)分出的一種算法。截止目前(2023-03)未出現(xiàn)“碰撞”案例,被視為是絕對安全的加密算法之一,本文主要介紹了SHA-256算法的原理以及C#和JS的實現(xiàn),希望對大家有所幫助
    2023-03-03
  • ChatGPT將批量文檔翻譯成中文的方法

    ChatGPT將批量文檔翻譯成中文的方法

    文檔翻譯成中文軟件是指在處理文檔時,自動將文檔中的內(nèi)容翻譯成中文的軟件,本文就給大家介紹如何用ChatGPT將批量文檔翻譯成中文的方法,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • 在QQ群中接入ChatGPT機(jī)器人的操作方法

    在QQ群中接入ChatGPT機(jī)器人的操作方法

    這篇文章主要介紹了如何在QQ群中接入ChatGPT機(jī)器人,今天我們的分享主要圍繞著大部分用戶Windows電腦,基于nodejs,需要的朋友可以參考下
    2023-02-02
  • 網(wǎng)址URL的大小寫敏感嗎,有什么區(qū)別?

    網(wǎng)址URL的大小寫敏感嗎,有什么區(qū)別?

    在?Web?開發(fā)中,網(wǎng)址URL?的大小寫問題可能引發(fā)意想不到的行為,本文將從技術(shù)規(guī)范、服務(wù)器配置、瀏覽器行為等多個維度,系統(tǒng)解析?URL?各組件的大小寫敏感性,并提供實踐建議,可有效避免因?URL?大小寫不一致引發(fā)的搜索引擎優(yōu)化問題、鏈接失效及用戶體驗下降
    2025-04-04
  • 細(xì)說ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32編碼

    細(xì)說ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32編碼

    本文主要介紹了細(xì)說ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32編碼,詳細(xì)的介紹了這些編碼的知識,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 混淆矩陣Confusion?Matrix概念分析翻譯

    混淆矩陣Confusion?Matrix概念分析翻譯

    這篇文章主要為大家介紹了混淆矩陣Confusion?Matrix分析的翻譯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C++/QT/Python/MATLAB獲取文件行數(shù)的示例詳解

    C++/QT/Python/MATLAB獲取文件行數(shù)的示例詳解

    這篇文章主要為大家學(xué)習(xí)介紹了如何利用C++、QT、Python、MATLAB分別實現(xiàn)獲取文件行數(shù)的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-08-08

最新評論