From 0dfecb5c715d07c2653d6ab014c3cdaaffb9c1a8 Mon Sep 17 00:00:00 2001 From: hezhengyi Date: Fri, 17 May 2024 10:43:09 +0800 Subject: [PATCH] =?UTF-8?q?ohos=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0,?= =?UTF-8?q?=E6=96=B0=E5=A2=9EFAQ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hezhengyi --- OAT.xml | 2 + .../\345\274\200\345\217\221module.md" | 28 ++++- ohos/docs/08_FAQ/README.md | 7 +- ohos/docs/08_FAQ/environment.md | 59 ++++++++++ ohos/docs/08_FAQ/ohos_code.md | 11 ++ ohos/docs/08_FAQ/ohos_engine.md | 17 +++ ohos/docs/08_FAQ/ohos_hap.md | 102 ++++++++++++++++++ 7 files changed, 220 insertions(+), 6 deletions(-) create mode 100644 ohos/docs/08_FAQ/environment.md create mode 100644 ohos/docs/08_FAQ/ohos_code.md create mode 100644 ohos/docs/08_FAQ/ohos_engine.md create mode 100644 ohos/docs/08_FAQ/ohos_hap.md diff --git a/OAT.xml b/OAT.xml index c6a2c32a..b18f6549 100644 --- a/OAT.xml +++ b/OAT.xml @@ -134,8 +134,10 @@ + + diff --git "a/ohos/docs/04_development/\345\274\200\345\217\221module.md" "b/ohos/docs/04_development/\345\274\200\345\217\221module.md" index d8abd9c7..bf4f7e36 100644 --- "a/ohos/docs/04_development/\345\274\200\345\217\221module.md" +++ "b/ohos/docs/04_development/\345\274\200\345\217\221module.md" @@ -30,12 +30,27 @@ cp my_flutter_module/.ohos/entry/src/main/ets/pages/Index.ets MyApplication/entr ohos工程引用flutter工程有两种使用方式 -### 方式一:ohos工程 引用 flutter_module.har +### 方式一:ohos工程 引用 har 文件 -#### 1. 复制 flutter_module.har +#### 1. 复制 har 文件 ```sh -cp my_flutter_module/.ohos/flutter_module/build/default/outputs/default/flutter_module.har MyApplication/har/flutter_module.har +cp -r my_flutter_module/.ohos/har/* MyApplication/har/ +``` + +### 2. 修改 MyApplication/oh-package.json5 + +```json +{ + // ... + "dependencies": { + "@ohos/flutter_ohos": "./har/flutter.har" + }, + "overrides": { + "@ohos/flutter_ohos": "./har/flutter.har" + // 有冲突的依赖需要放到这里消除冲突 + } +} ``` #### 2. 修改 MyApplication/entry/oh-package.json5 @@ -44,7 +59,9 @@ cp my_flutter_module/.ohos/flutter_module/build/default/outputs/default/flutter_ { // ... "dependencies": { - "@ohos/flutter_module": "../har/flutter_module.har" + "@ohos/flutter_module": "../har/flutter_module.har", + // 如果有其他引用,也需要依赖,例如:flutter_webview_ohos + "flutter_webview_ohos": "../har/flutter_webview_ohos.har" } } ``` @@ -57,10 +74,11 @@ cp my_flutter_module/.ohos/flutter_module/build/default/outputs/default/flutter_ ### 方式二:ohos工程 直接引用 flutter_module 源码 -#### 1. 复制 flutter_module 源码 +#### 1. 复制 flutter_module 源码 和 flutter.har ```sh cp -r my_flutter_module/.ohos/flutter_module MyApplication/ +cp my_flutter_module/.ohos/ohos/flutter.har MyApplication/har/flutter.har ``` #### 2. 修改 MyApplication/build-profile.json5 diff --git a/ohos/docs/08_FAQ/README.md b/ohos/docs/08_FAQ/README.md index 2d8cb2d4..b335ed20 100644 --- a/ohos/docs/08_FAQ/README.md +++ b/ohos/docs/08_FAQ/README.md @@ -1,3 +1,8 @@ # FAQ - \ No newline at end of file +整理flutter鸿蒙化开发过程中的常见问题 + +1. [环境相关问题](./environment.md) +2. [ohos引擎产物编译相关问题](./ohos_engine.md) +3. [ohos应用编译相关问题](./ohos_hap.md) +4. [ohos代码开发相关问题](./ohos_code.md) diff --git a/ohos/docs/08_FAQ/environment.md b/ohos/docs/08_FAQ/environment.md new file mode 100644 index 00000000..b2bca4b9 --- /dev/null +++ b/ohos/docs/08_FAQ/environment.md @@ -0,0 +1,59 @@ +# 环境相关问题 + +flutter开发环境配置参考 https://gitee.com/openharmony-sig/flutter_flutter + +## 建议使用的开发工具版本 + +### flutter 3.7.12-ohos 版本 + +1. python3.8 - python3.11 +2. java17 +3. node18 +4. ohpm1.6+ +5. HamonyOS SDK api11 +6. Xcode14.3 + +## 断网环境 flutter pub get 执行失败 + +解决方案: +加上 --offline 参数,完整命令 `flutter pub get --offline` + +## mac环境release版本的应用编译失败 + +报错日志: +```log +ProcessPackageException: ProcessException: Found candidates, but lacked sufficient permissions to excute "/Users/xxx/ohos/src/out/ohos_release_arm64/clang_arm4/dart". + Command: /Users/xxx/ohos/src/out/ohos_release_arm64/clang_arm4/dart +``` + +解决方案:添加执行权限 + +```sh +chmod -R +x /Users/xxx/ohos/src/out/ohos_release_arm64/* +``` + +mac环境可能还需要手动点击 src/out/ohos_release_arm64/clang_arm64 目录下的 `dart` 和 `gen_snapshot`,并在「设置->隐私与安全->安全性」中允许程序运行。 + +## flutter从Windows复制到linux或mac环境后无法运行 + +报错日志: +```log +curl: (3) Illegal characters found in URL +xxx/flutter_flutter/bin/internal/update_dart_sdk.sh: line 156: return: can only return from a function or sourced script +curl: (3) Illegal characters found in URL +``` + +问题分析:Windows上的换行符和linux/mac不一致导致的。 + +解决方案: + +```sh +# 将文件 target_file 中的换行符由 CRLF(\r\n)替换为 LF(\n) +sed -i "s/\r//" target_file +# 将 bin/dart、bin/*.sh 和 bin/internal/*.version 中的换行符换位LF +cd flutter +## linux环境执行 +sed -i "s/\r//" bin/dart $(find bin -name "*.sh") $(find bin -name "*.version") +## mac环境执行 +sed -i "" "s/\r//" bin/dart $(find bin -name "*.sh") $(find bin -name "*.version") +``` diff --git a/ohos/docs/08_FAQ/ohos_code.md b/ohos/docs/08_FAQ/ohos_code.md new file mode 100644 index 00000000..f569c2c2 --- /dev/null +++ b/ohos/docs/08_FAQ/ohos_code.md @@ -0,0 +1,11 @@ +# ohos代码开发相关问题 + +## dart代码中判断当前平台是否是ohos + +```dart +import 'package:flutter/foundation.dart'; + +bool isOhos() { + return defaultTargetPlatform == TargetPlatform.ohos; +} +``` \ No newline at end of file diff --git a/ohos/docs/08_FAQ/ohos_engine.md b/ohos/docs/08_FAQ/ohos_engine.md new file mode 100644 index 00000000..3097546d --- /dev/null +++ b/ohos/docs/08_FAQ/ohos_engine.md @@ -0,0 +1,17 @@ +# ohos引擎产物编译相关问题 + +flutter_engine环境编译配置参考 https://gitee.com/openharmony-sig/flutter_engine + +## flutter鸿蒙化引擎编译环境推荐配置版本 + +1. python3.8 - python3.11 +2. java17 +3. node18 +4. ohpm1.6+ +5. HamonyOS SDK api11 +6. Xcode14.3 + +## 如何生成flutter.har + +1. 引擎产物编译成功后,会生成flutter.har(src/out/ohos_debug_unopt_arm64/flutter.har) +2. 复制需要的so文件(libflutter.so, profile模式需要额外复制 libvmservice_snapshot.so)到 flutter_embedding/flutter/ohos 目录后再编译,具体步骤参考 [flutter_engine文档](https://gitee.com/openharmony-sig/flutter_engine#embedding%E5%B1%82%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E6%8C%87%E5%AF%BC) \ No newline at end of file diff --git a/ohos/docs/08_FAQ/ohos_hap.md b/ohos/docs/08_FAQ/ohos_hap.md new file mode 100644 index 00000000..565bfba9 --- /dev/null +++ b/ohos/docs/08_FAQ/ohos_hap.md @@ -0,0 +1,102 @@ +# ohos应用编译相关问题 + +## 配置别名,简化日常开发的编译命令 + +在环境变量配置文件中配置别名,简化flutter鸿蒙化日常使用的命令 + +- windows, 使用 `Git Bash` 可以执行常见的linux命令。(使用方式:鼠标右键点击文件管理器中的空白处,左键点击 Git Bash Here) +- linux, 修改 `~/.bash_profile` +- mac, 修改 `~/.bash_profile`, 并在 `~/.zshrc` 中加上 `source ~/.bash_profile` + +```sh +export ENGINE_DIR=~/ohos/engine +export ENGINE_DEBUG=$ENGINE_DIR/src/out/ohos_debug_unopt_arm64 +export ENGINE_PROFILE=$ENGINE_DIR/src/out/ohos_profile_arm64 +export ENGINE_RELEASE=$ENGINE_DIR/src/out/ohos_release_arm64 + +alias fbuildD="flutter build hap --local-engine=$ENGINE_DEBUG --debug" +alias fbuildP="flutter build hap --local-engine=$ENGINE_PROFILE --profile" +alias fbuildR="flutter build hap --local-engine=$ENGINE_RELEASE --release" +alias frunD="flutter run -d $(hdc list targets) --local-engine=$ENGINE_DEBUG --debug" +alias frunP="flutter run -d $(hdc list targets) --local-engine=$ENGINE_PROFILE --profile" +alias frunR="flutter run -d $(hdc list targets) --local-engine=$ENGINE_RELEASE --release" +``` + +使用方式: + +配置完成后,重新打开终端窗口,在flutter工程目录中即可使用别名编译或运行 + +```sh +flutter create hello --platforms ohos +cd hello +# 编译debug版本 +fbuildD +# 运行debug版本 +frunD +``` + +## 应用编译成功,安装后出现白屏的情况 + +日志信息: + +```log +Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x00000086e3272bf8 +LastFatalMessage:Thread:547846269584[FATAL:flutter/runtime/dart_vm_initializer.cc] Error while initializing the Dart VM: Wrong full snapshot version, expected '8af474944053df1f0a3be6e6165fa7cf' found 'adb4292f3ec25074ca70abcd2d5c7251' +``` + +问题分析: + +使用的engine产物和运行模式不一致,导致运行白屏。 + +解决方案: + +运行或编译命令中,使用的engine产物和运行模式需要保持一致。 参考命令: + +```sh +flutter run -d --local-engine=/Users/xxx/ohos/src/out/ohos_debug_unopt_arm64 --debug +flutter run -d --local-engine=/Users/xxx/ohos/src/out/ohos_release_arm64 --release +flutter run -d --local-engine=/Users/xxx/ohos/src/out/ohos_profile_arm64 --profile +``` + +## 应用编译报错,flutter插件结构重构前的版本使用了重构后的插件库 + +报错日志: + +```log +Oops; flutter has exited unexpectedly: "type 'Null' is not a subtype of type 'List' in type cast". +``` + +解决方案: +flutter_flutter更新到master或dev的最新版本。(45bd5e627e1f1e5f4d335f205781565f576acc60, 2024-05-10) + +## flutter pub get 依赖冲突报错 + +报错日志: + +```log +Resolving dependencies... +Because flutter_cache_manager >=3.0.0-nullsafety.0 <3.3.2 depends on path_provider from hosted and flutter_cache_manager depends on path_provider from git, flutter_cache_manager >=3.0.0-nullsafety.0 <3.3.2 forbidden. +So bedause xxx depends on flutter_cache_manager 3.3.1, version solving failed. +pub get failed +... +exit code: 1 +``` + +解决方案: + +使用 `dependency_overrides` 消除依赖冲突 + +```yaml +dependencies: + flutter: + sdk: flutter +dependency_overrides: + path_provider: + git: + url: https://gitee.com/openharmony-sig/flutter_packages.git + path: packages/path_provider/path_provider + path_provider_ohos: + git: + url: https://gitee.com/openharmony-sig/flutter_packages.git + path: packages/path_provider/path_provider_ohos +``` -- Gitee