
将原先通过直接更改项目配置文件app.json5、build-profile.json5、oh-package.json5等的方式优化为通过Hvigor插件方式动态更新配置可避免由于配置文件被频繁更改而可能造成的提交冲突问题。直接依赖插件源码来构建这样编写插件时可直接对源码修改且会有代码提示体验与Android和iOS统一。使用hvigor插件方式编译flutter项目的注意点构建出的APP、HAP以及HAR等产物均位于flutter项目的build/ohos目录下对于既有项目需要手动调整工程调整完后需flutter pub get对于 flutter app 项目1. ohos/.gitignore添加/package.json,/package-lock.json移除*.har对应的项目里自动生成的har文件夹也可以直接删除了2. ohos/oh-package.json5移除dependencies的ohos/flutter_ohos移除overrides的ohos/flutter_ohos以及flutter插件3. ohos/hvigorfile.ts添加hvigor插件flutterHvigorPluginimportpathfrompathimport{ appTasks }fromohos/hvigor-ohos-plugin;import{ flutterHvigorPlugin }fromflutter-hvigor-plugin; exportdefault{system: appTasks, plugins:[flutterHvigorPlugin(path.dirname(__dirname))] }4. 添加ohos/hvigorconfig.tsimportpathfrompathimport{ injectNativeModules }fromflutter-hvigor-plugin; injectNativeModules(__dirname,path.dirname(__dirname))5. 修改ohos/entry/hvigorfile.tsimport{ hapTasks }fromohos/hvigor-ohos-plugin;exportdefault {system: hapTasks, plugins: [] }6. ohos/entry/oh-package.json5移除dependencies的ohos/flutter_ohos以及flutter插件对于 flutter module 项目基于Har产物host工程下oh-package.json5, 移除dependencies和overrides中flutter相关依赖如不存在则无需处理host工程下oh-package.json5, overrides下添加所有flutter构建出的har注意调整为实际路径overrides: {ohos/flutter_ohos:file:./path/flutter_project/build/ohos/har/release/flutter.har,ohos/flutter_module:file:./path/flutter_project/build/ohos/har/release/flutter_module.har,plugin_x:file:./path/flutter_project/build/ohos/har/release/plugin_x.har, }上述方式在项目中插件较多且有变动的情况下较为不便可以在host工程的hvigorfile.ts中添加以下代码实现动态添加依赖的功能import{ appTasks }fromohos/hvigor-ohos-plugin;importfsfromfsimportpathfrompathimport{OhosPluginId}fromohos/hvigor-ohos-plugin;import{ getNode, hvigor }fromohos/hvigorconstdirectory 需调整为实际路径constkeyMap {flutter:ohos/flutter_ohos,flutter_embedding_debug:ohos/flutter_ohos,flutter_embedding_profile:ohos/flutter_ohos,flutter_embedding_release:ohos/flutter_ohos,arm64_v8a_debug:flutter_native_arm64_v8a,arm64_v8a_profile:flutter_native_arm64_v8a,arm64_v8a_release:flutter_native_arm64_v8a,x86_64_debug:flutter_native_x86_64,x86_64_profile:flutter_native_x86_64,x86_64_release:flutter_native_x86_64,flutter_module:ohos/flutter_module}constrootNode:HvigorNodegetNode(__filename) rootNode.afterNodeEvaluate(node{constappContext node.getContext(OhosPluginId.OHOS_APP_PLUGIN)asOhosAppContextif(!appContext) {return}constoverrides appContext.getOverrides() ?? {}constdependencies appContext.getDependenciesOpt() ?? {}constfiles fs.readdirSync(directory);constkeys Object.keys(keyMap)for(constfileoffiles) {if(path.extname(file).toLowerCase() !.har) {continue}constfileName path.parse(file).nameconstdepName keys.includes(fileName) ? keyMap[fileName] : fileNameconstfilePath file:${path.join(directory, file)}dependencies[depName] filePath overrides[depName] filePath } appContext.setDependenciesOpt(dependencies) appContext.setOverrides(overrides) })exportdefault{system: appTasks,plugins: [] }基于源码host工程下hvigorconfig.ts如果没有需新建// 该文件位于flutter module工程.ohos下需调整为实际路径import{ injectNativeModules, getFlutterProjectPath }from./path/flutter_project/.ohos/include_flutter; injectNativeModules(__dirname, getFlutterProjectPath(),1)host工程下的hvigorfile.ts, 添加flutterHvigorPlugin插件import{ appTasks }fromohos/hvigor-ohos-plugin;// 该文件位于flutter module工程.ohos下需调整为实际路径import{ flutterHvigorPlugin, getFlutterProjectPath }from./path/flutter_project/.ohos/include_flutter;exportdefault {system: appTasks, plugins:[flutterHvigorPlugin(getFlutterProjectPath(),1)] }host工程下build-profile.json5, 移除flutter_modulehost工程下oh-package.json5, 移除dependencies和overrides中flutter相关依赖如不存在则无需处理对于 flutter plugin 项目注意对于既有的flutter plugin项目如果不做任何修改仅会导致example无法正常编译但不影响该plugin在flutter项目中的正常使用和编译。可选修改插件项目下hvigorfile.ts改成import{ harTasks }fromohos/hvigor-ohos-plugin;exportdefault {system: harTasks, plugins: [] }插件项目下oh-package.json5, 移除dependencies的ohos/flutter_ohos。必须修改插件example的调整参考前述的flutter app项目。