更新Flutter插件项目结构
更新内容
- flutter插件项目中的ohos目录,将从鸿蒙工程project结构,替换为鸿蒙工程module结构。
- flutter工程中引用的har文件,统一放到 ohos/har 目录下。
- 更新后需要删除ohos插件中的旧模块目录。
更新步骤
以 flutter_flutter 中的 integration_test 为例的更新步骤如下
1. integration_test/ohos 目录由 project 结构修改为 module 结构
cd flutter_flutter/packages/integration_test
mv ohos/ohos ./ohos2
rm -rf ohos
mv ohos2 ohos
cd example
flutter pub get
flutter build hap --debug
执行flutter run
后会出现报错,需要修改配置文件中的name字段,还需要修改 hvigorfile.ts。
2. 代码更新
2.1 修改 integration_test/ohos/oh-package.json5
修改前:
{
"name": "ohos",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
},
"devDependencies": {
"@ohos/hypium": "1.0.11"
}
}
修改后:
{
"name": "integration_test", // 和插件名(pubspec.yaml中的name)保持一致
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "Apache-2.0",
"dependencies": {
"@ohos/flutter_ohos": "file:har/flutter.har",
}
}
2.2 修改 integration_test/ohos/src/main/module.json5
修改前:
{
"module": {
"name": "ohos",
"type": "har",
"deviceTypes": [
"default",
"tablet",
"2in1"
]
}
}
修改后:
{
"module": {
"name": "integration_test", // 和插件名(pubspec.yaml中的name)保持一致
"type": "har",
"deviceTypes": [
"default",
"tablet",
"2in1"
]
}
}
2.3 修改 integration_test/ohos/hvigorfile.ts
修改前:
import { appTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
}
修改后:
export { harTasks } from '@ohos/hvigor-ohos-plugin';
检查是否可以正常运行
- 使用 DevEco-Studio 打开 integration_test/example, 配置签名
- 使用命令运行example
cd integration_test/example
flutter run -d $DEVICE --debug
运行鸿蒙应用时,需要注意配置文件中 har文件 的引用
引用的har文件在 ohos/har 目录下
integration_test/example/ohos/oh-package.json5
修改后:
{
// ...
"dependencies": {
"@ohos/flutter_ohos": "file:./har/flutter.har"
},
"overrides": {
"@ohos/flutter_ohos": "file:./har/flutter.har"
}
}
integration_test/example/ohos/entry/oh-package.json5
修改前
{
// ...
"dependencies": {
"@ohos/integration_test": "file:./har/integration_test.har",
}
}
修改后
{
// ...
"dependencies": {
"integration_test": "file:../har/integration_test.har",
}
}
可能遇到的问题
1. no such file or directory
日志信息:
hvigor ERROR: ENOENT: no such file or directory, stat 'xxx/flutter_flutter/packages/integration_test/ohos/build/default/cache/default/default@packageHar/ohos/oh_modules/@ohos/flutter_ohos'
解决方案:
手动删除报错信息提示的文件。
2. operation not permitted, symlink
日志信息:
hvigor ERROR: ENOENT: operation not permitted, symlink
'xxx/webview_flutter_ohos/ohos/webview_flutter/oh_modules/.ohpm/@ohos+flutter_ohos@file+libs+flutter.har/oh_modules/@ohos/flutter_ohos' ->
'xxx/webview_flutter_ohos/ohos/build/default/cache/default/default@PackageHar/webview_flutter/oh_modules/@ohos/flutter_ohos'
解决方案:
har结构整改前的部分目录,在更新代码后需要手动删除,例如
- flutter_packages/packages/webview_flutter_ohos/ohos/webview_flutter
- flutter_packages/packages/path_provider_ohos/ohos/path_provider
- flutter_packages/packages/file_selector_ohos/ohos/FileSelector