JHHK

欢迎来到我的个人网站
行者常至 为者常成

30 鸿蒙与Flutter

目录

介绍

一、flutter_flutter项目

点击查看flutter_flutter项目

由于Flutter官方并没有支持HarmonyOS,所以鸿蒙团队从Flutter的官方分支,分叉出一个分支进行HarmonyOS系统支持

该仓库是基于Flutter SDK对于OpenHarmony平台的兼容拓展,可支持IDE或者终端使用Flutter Tools指令编译和构建OpenHarmony应用程序。

现在工程使用的flutter_flutter项目的分支是:origin/flutter-3.7.12-ohos.candidate.3

在这个分支上下面的问题已经解决
提示:flutter_flutter项目一直在更新,最新的代码有可能已经解决了这个问题,就不在需要下面的操作了

目前在arm架构的电脑上使用时遇到了问题,处理方法是:   

提交重置到:   
2024年3月21日     
!179 更新flutter.har        
Merge pull request !179 from hazy/feature-har     

然后对下面这次提交进行revert        
2024年3月13日       
GeneratedPluginRegistrant 对齐 Android 和 iOS       

二、物料

1、flutter sdk
由flutter_flutter项目就是flutter的sdk
flutter sdk 提供接口、提供命令行工具(调试器、编译器等)

2、flutter engine
需要搜索相关资料编译出产物
flutter engine 是一个底层的渲染引擎,使用 Skia 进行图形渲染,并与平台进行通信,实现跨平台的用户界面。

3、鸿蒙开发套件:IDE/模拟器/命令行工具等

(1) 关于开发套件
鸿蒙套件列表
IDE按照flutter_flutter项目下的介绍,只能使用推荐的鸿蒙套件,但通过实践:去官网下载最新的IDE和命令行,也是支持flutter混合项目的有可能文档更新较慢

(2) flutter相关的配置如下

#Dart配置
export PATH=$PATH:/Users/lxy/ohos/flutter_flutter/bin/cache/dart-sdk/bin


# Flutter 国内镜像
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn


# Flutter 拉取下来的flutter_flutter/bin目录
#export FLUTTER=/opt/flutter/bin
export FLUTTER=/Users/lxy/ohos/flutter_flutter/bin
export PATH=$FLUTTER:$PATH


# Flutter 相关Url配置
#export FLUTTER_GIT_URL=https://github.com/flutter/flutter.git
export FLUTTER_GIT_URL=https://gitee.com/openharmony-sig/flutter_flutter.git

(3)鸿蒙相关配置

之前使用的配置

# Open Harmony 配置
export OHPM_HOME=/Users/lxy/ohos/tools/oh-command-line-tools/ohpm
export PATH=$PATH:$OHPM_HOME/bin
export PATH=$PATH:/Users/lxy/ohos/tools/oh-command-line-tools/sdkmanager/bin
export OHOS_SDK_HOME=/Users/lxy/Library/OpenHarmony/Sdk
export OHOS_NDK_HOME=$OHOS_SDK_HOME/native
export PATH=$PATH:$OHOS_NDK_HOME


# Harmony配置
export HOS_SDK_HOME=/Users/lxy/Library/Huawei/Sdk
export PATH=$PATH:$HOS_SDK_HOME
export HPM_HOME=/Users/lxy/ohos/tools/command-line-tools/ohpm
export PATH=$PATH:$HPM_HOME/bin
export PATH=$PATH:/Users/lxy/ohos/tools/command-line-tools/bin


#HDC工具环境变量
#export HDC_HOME=/Users/lxy/Library/Huawei/Sdk/HarmonyOS-NEXT-DB3/hms/toolchains
export HDC_HOME=/Users/lxy/Library/OpenHarmony/Sdk/12/toolchains
export PATH=$PATH:$HDC_HOME
#签名工具
export SIGN_TOOL_HOME=/Users/lxy/ohos/tools/developtools_hapsigner/hapsigntool/hap_sign_tool/target

使用上面的配置,经常不知道什么原因就会报错:
No Hmos SDK found. Try setting the HOS_SDK_HOME environment variable.

现在使用flutter_flutter项目介绍中推荐的配置,暂时还未遇到上面的问题

# 配置环境变量 (SDK, node, ohpm, hvigor)
export TOOL_HOME=/Applications/DevEco-Studio.app/Contents # mac环境
export DEVECO_SDK_HOME=$TOOL_HOME/sdk # command-line-tools/sdk
export PATH=$TOOL_HOME/tools/ohpm/bin:$PATH # command-line-tools/ohpm/bin
export PATH=$TOOL_HOME/tools/hvigor/bin:$PATH # command-line-tools/hvigor/bin
export PATH=$TOOL_HOME/tools/node/bin:$PATH # command-line-tools/tool/node/bin

# 配置 HOS_SDK_HOME
#export HOS_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk

我们看到上面的配置,并未涉及到 OpenHarmony 的SDK和命令行
OpenHarmony 的 sdk 和命令行工具 通过实践删除之后也是可以run起来的,证明Harmony OS Next 不依赖 OpenHarmony
注:将OpenHarmony - sdk 目录移除之后,可以正常flutter run起来,但是再次放回去之后 flutter run 起来后app闪退,删除之后就又正常了,不知道为什么?

4、其它


Node     
https://www.freecodecamp.org/chinese/news/node-version-manager-nvm-install-guide/   
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash    
nvm install v18.19.1    

Node环境变量配置    
export NODEPATH="/Users/lxy/.nvm/versions/node/v18.19.1/bin"   
export PATH=$NODEPATH:$PATH   
export NODE_HOME="/Users/lxy/.nvm/versions/node/v18.19.1"   


Python    
brew install python@3.8    
brew list 查看brew安装的包的路径或者 brew list oclint     

Python 环境变量配置     
#export PATH=/usr/local/bin:$PATH    
export PATH=$PATH:/usr/local/Cellar/python@3.8/3.8.18_2/bin    
alias python="/usr/local/Cellar/python@3.8/3.8.18_2/bin/python3.8"    



Java 环境配置     
jdk安装     
jenv安装   
gradle安装    

编译运行

一、release包

// 编译鸿蒙flutter
flutter build hap --target-platform ohos-arm64 --local-engine-src-path=/Users/lixiaoyi/ohos/engine/src --local-engine=ohos_release_arm64

// 安装鸿蒙flutter
flutter devices
hdc -t <deviceId> install <hap file path>
hdc -t 127.0.0.1:5555 install /Users/lixiaoyi/Desktop/flutter_demo/ohos/entry/build/default/outputs/default

// 运行鸿蒙flutter
flutter run --local-engine=ohos_release_arm64 -d FMR0223926041765

// 如果启动了一个默认设备,可以不指定设备
flutter run --local-engine=ohos_release_arm64

二、debug包

// 编译鸿蒙flutter
flutter build hap --target-platform ohos-arm64 --local-engine-src-path=/Users/lxy/ohos/engine/src --local-engine=ohos_debug_unopt_arm64

// 安装鸿蒙flutter
flutter devices
hdc -t <deviceId> install <hap file path>
hdc -t 127.0.0.1:5555 install /Users/lixiaoyi/Desktop/flutter_demo/ohos/entry/build/default/outputs/default
hdc -t FMR0223926041765 install /Users/lixiaoyi/Desktop/flutter_demo/ohos/entry/build/default/outputs/default

// 运行鸿蒙flutter
flutter run --local-engine=ohos_debug_unopt_arm64 -d 127.0.0.1:5555
flutter run --local-engine-src-path=/Users/lixiaoyi/ohos/engine/src --local-engine=ohos_debug_unopt_arm64 -d FMR0223926041765


flutter run --local-engine=/Users/lxy/ohos/engine/src/out/ohos_debug_unopt_arm64 -d FMR0223926041765
// 如果启动了一个默认设备,可以不指定设备
flutter run --local-engine=/Users/lxy/ohos/engine/src/out/ohos_debug_unopt_arm64

已经解决报错

遇到问题之后可以先尝试下面的操作

清空flutter缓存   
flutter clean   
flutter pub cache clean   

重新 flutter run ... 或者 flutter build...

一、No Hmos SDK found

执行 flutter run命令时报错:No Hmos SDK found. Try setting the HOS_SDK_HOME environment variable.

参考鸿蒙相关配置的说明

下面是之前的处理方式并不能彻底解决这个问题

参考文章:No Hmos SDK found. Try setting the HOS_SDK_HOME environment variable.
https://developer.huawei.com/consumer/cn/forum/topic/0201145649405032097

1、通过 flutter config 命令 查看 ohos-sdk 的配置路径是否正确    

2、设置正确的sdk路径   
flutter config --ohos-sdk /Users/lixiaoyi/Library/Huawei/Sdk  

二、找不到sdk的问题

移动了Huawei/Sdk 和 OpenHarmony/Sdk 的位置,结果flutter doctor -v 命令执行失败报错:unable to locate an harmonyos sdk.
Huawei/Sdk 和 OpenHarmony/Sdk 的位置不能随便移动,怀疑跟安装devecho-Studio时的配置有关

有可能跟问题一是相同的问题

三、模拟器启动报错

Error waiting for a debug connection: The log reader stopped unexpectedly
Error launching application on 127.0.0.1:5555.

关掉模拟器重新启动

四、App Launch: To run and debug the Harmony device, configure the HarmonyOS runtime.

随着IDE的更新,下面问题已经不存在了(当使用新的Harmony SDK,IDE也配置了一键自动迁移)

之前的处理方案如下:

第一步:
找到工程级:build-profile.json5 添加 HarmonyOS 并 配置SDK版本

{
  "name": "default",
  "signingConfig": "default",
  "compileSdkVersion": "4.1.0(11)",
  "compatibleSdkVersion": "4.1.0(11)",
  "runtimeOS": "HarmonyOS"
}

第二步:
修改 /Path/to/YourProject/StateManagement/local.properties 文件,大致内容如下
hwsdk.dir=/Path/to/YourHomeDirectory/Library/Huawei/sdk

第三步:
菜单栏的 “文件(File)” -> “项目结构(Project Structure…)” -> “项目页签(Project)” -> “签名配置(Signing Configs)” -> “钩选上 支持鸿蒙系统(Support HarmonyOS) 与 自动签名(Automatically generate signature)” ,

如果需要真机调试,还需要在工具中登录并在手机上打开调试

五、创建工程时遇到问题

随着IDE的更新,下面问题已经不存在了(当使用新的Harmony SDK,IDE也配置了一键自动迁移)

之前的处理方案如下:

plugin拷贝
创建工程时少了一个GeneratedPluginRegistrant.ets,
拷贝到目录下:/Users/lixiaoyi/Desktop/flutter_demo/ohos/entry/src/main/ets/plugins

{
  "hvigorVersion": "file:../dependencies/hvigor-4.1.1.tgz",
  "dependencies": {
    "@ohos/hvigor-ohos-plugin": "file:../dependencies/hvigor-ohos-plugin-4.1.1.tgz",
    "@ohos/hvigor": "file:../dependencies/hvigor-4.1.1.tgz"
  }
}

相关文件:

/Users/lxy/WorkFile/Founder/SourceCode/df-flutter/ohos/commons/router/src/main/ets/components/DfRouterModule.ets
/Users/lxy/WorkFile/Founder/SourceCode/df-flutter/ohos/features/home/Index.ets

未解决报错

DF鸿蒙项目:现在flutter run 可以正常启动app,但flutter build后,在IDE中启动app会闪退,不知道什么原因。
只是猜测:IDE在编译flutter混合项目有bug,flutter的引擎该更新了


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.