Flutter-鸿蒙化 flutter运行在鸿蒙next上操作文档

2024-12-15 15:16:22
160次阅读
0个评论
最后修改时间:2024-12-15 20:29:59

一、前言

各位同学好久没有更新Flutter的相关文章了。因为最近都在学习和研究鸿蒙next 相关的知识。最近也是成功的讲Flutter项目运行在鸿蒙next上面

所以就准备写一个正常流程的一个完整的教程。

准备工作

环境依赖

这边是win系统的环境配置

1 下载的能够支持到我们的鸿蒙next版本的 flutter sdk :

https://gitee.com/openharmony-sig/flutter_flutter

如图

image-20240713133902401

2 配置环境变量
  • 配置HarmonyOS SDK和环境变量

  • API12, deveco-studio-5.0.0.300 或 command-line-tools-5.0.0.300

  • 配置环境变量 (SDK, node, ohpm, hvigor)

​ 我们这边主要是是实用 API12, deveco-studio-5.0.0.300 来配置

打开我们的环境变量配置

image-20240713134342277

找到我们的环境变量

image-20240713134433785

找到我们的系统环境变量

image-20240713134530522

image-20240713134714403

image-20240713150743259

image-20240713150816675

需要配置环境变量如下

D:\fluttertonextsdk\flutter_flutter\bin

D:\DevEco Studio5.0\sdk

D:\DevEco Studio5.0\tools\hvigor\bin

D:\DevEco Studio5.0\tools\ohpm\bin

D:\DevEco Studio5.0\tools\node\node_modules\npm\bin

D:\DevEco Studio5.0\bin

PUB_HOSTED_URL=https://pub.flutter-io.cn

FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

配置好环境变量后我们打开终端 输入Flutter doctor

image-20240713141203589

​ 执行 flutter create --platforms ohos 创建fluttertonext工程

image-20240713142423957

​ 我们可以再磁盘上面看到我们构建好的Fluttertonext的项目

image-20240713142923707

然后我们用我们的DevEco studio 打开我们的项目里面的ohos的项目

image-20240713143325184

image-20240713143509915

我们在终端执行 flutter build hap 编译一下我们的项目

然后我们Build hap 包

image-20240713143535797

编译成功

image-20240713144006979

我们再build目录下面看到编译后的hap 包

image-20240713144055645

通过观察我们发现通过Flutter构建打包出来的hap 包和我们纯原生的ArkTS 编写的打包后的hap 包 内存占用多出很多包体很大 主要是因为Flutter构建出来的包里面libs 目录下面有Flutter的运行时的libflutter.so 文件占用很大。

运行模拟器

image-20240713144928525

在windows 上面的模拟器运行报错 因为这个Flutter构建出来鸿蒙项目只能编译运行在arm架构上面 所以这边使用真机运行。

真机运行

我们连接已经升级到鸿蒙next系统的华为手机 然后直接点击 三角标运行即可

image-20240713145436075

真机运行效果图

73a42c00cccf3c69b18081d88b17f85

如果是openhamrony 设备

我们也可以可以实用命令编译包 然后 使用命令安装

1 运行 flutter doctor -v 检查环境变量配置是否正确,FutterOpenHarmony应都为ok标识,若两处提示缺少环境,按提示补上相应环境即可。
2创建工程与编译命令,编译产物在
# 创建工程
flutter create --platforms ohos <projectName>

# 进入工程根目录编译
# 示例:flutter build hap [--target-platform ohos-arm64] [--local-engine=<DIR>/src/out/ohos_release_arm64] --release
flutter build hap --release

是你自己创建Flutter工程的名称的

flutter build hap [--target-platform ohos-arm64] [--local-engine=<DIR>/src/out/ohos_release_arm64] --release
flutter build hap --release
3通过flutter devices指令发现ohos设备之后,使用 hdc -t <deviceId> install <hap file path>进行安装。
flutter run [--local-engine=<DIR>/src/out/ohos_debug_unopt_arm64] -d <device-id>
flutter run --debug -d <device-id>
4通过flutter devices指令发现ohos设备之后,使用 hdc -t <deviceId> install <hap file path>进行安装。
# 示例:flutter run [--local-engine=<DIR>/src/out/ohos_debug_unopt_arm64] -d <device-id>
  flutter run --debug -d <device-id>

已兼容OpenHarmony开发的指令列表

指令名称 指令描述 使用说明
doctor 环境检测 flutter doctor
config 环境配置 flutter config --
create 创建新项目 flutter create --platforms ohos,android,ios --org
create 创建module模板 flutter create -t module <module_name>
create 创建plugin模板 flutter create -t plugin --platforms ohos,android,ios <plugin_name>
create 创建plugin_ffi模板 flutter create -t plugin_ffi --platforms ohos,android,ios <plugin_name>
devices 已连接设备查找 flutter devices
install 应用安装 flutter install -t <hap文件路径>
assemble 资源打包 flutter assemble
build 测试应用构建 flutter build hap --debug [--target-platform ohos-arm64] [--local-engine=<兼容ohos的debug engine产物路径>]
build 正式应用构建 flutter build hap --release [--target-platform ohos-arm64] [--local-engine=<兼容ohos的release engine产物路径>]
run 应用运行 flutter run [--local-engine=<兼容ohos的engine产物路径>]
attach 调试模式 flutter attach
screenshot 截屏 flutter screenshot

常见问题

  1. 切换FLUTTER_STORAGE_BASE_URL后需删除/bin/cache 目录,并在项目中执行flutter clean后再运行

  2. 若出现报错:The SDK license agreement is not accepted,参考执行以下命令后再次编译:

    ./ohsdkmgr install ets:9 js:9 native:9 previewer:9 toolchains:9 --sdk-directory='/home/xc/code/sdk/ohos-sdk/' --accept-license
    
  3. 如果你使用的是DevEco Studio的Beta版本,编译工程时遇到“must have required property 'compatibleSdkVersion', location: demo/ohos/build-profile.json5:17:11"错误,请参考《DevEco Studio环境配置指导.docx》中的‘6 创建工程和运行Hello World’【配置插件】章节修改 hvigor/hvigor-config.json5文件。

  4. 若提示安装报错:fail to verify pkcs7 file 请执行指令

    hdc shell param set persist.bms.ohCert.verify true
    
  5. linux虚拟机通过hdc无法直接发现OpenHarmony设备

    解决方案:在windows宿主机中,开启hdc server,具体指令如下:

    hdc kill
    hdc -s serverIP:8710 -m
    

    在linux中配置环境变量:

    HDC_SERVER=<serverIP>
    HDC_SERVER_PORT=8710
    

    配置完成后flutter sdk可以通过hdc server完成设备连接,也可参考官方指导

  6. 构建Hap任务时报错:Error: The hvigor depends on the npmrc file. Configure the npmrc file first.

    请在用户目录~下创建文件.npmrc,该配置也可参考DevEco Studio官方文档,编辑内容如下:

    registry=https://repo.huaweicloud.com/repository/npm/
    @ohos:registry=https://repo.harmonyos.com/npm/
    
  7. 查日志时,存在日志丢失现象。 解决方案:关闭全局日志,只打开自己领域的日志

    步骤一:关闭所有领域的日志打印(部分特殊日志无法关闭)
    hdc shell hilog -b X
    步骤二:只打开自己领域的日志
    hdc shell hilog <level> -D <domain> 
    其中<level>为日志打印的级别:D/I/W/E/F,<domain>为Tag前面的数字
    举例:
    打印A00000/XComFlutterOHOS_Native的日志,需要设置hdc shell hilog -b D -D A00000
    注:上面的设置在机器重启后会失效,如果要继续使用,需要重新设置。
    
  8. 若Api11 Beta1版本的机器上无法启动debug签名的应用,可以通过将签名换成正式签名,或在手机端打开开发者模式解决(步骤:设置->通用->开发者模式)

  9. 如果报Invalid CEN header (invalid zip64 extra data field size)异常,请更换Jdk版本,参见JDK-8313765

  10. 运行debug版本的flutter应用用到鸿蒙设备后报错(release和profile版本正常)

    1. 报错信息: Error while initializing the Dart VM: Wrong full snapshot version, expected '8af474944053df1f0a3be6e6165fa7cf' found 'adb4292f3ec25074ca70abcd2d5c7251'
    2. 解决方案: 依次执行以下操作
      1. 设置环境变量 export FLUTTER_STORAGE_BASE_URL=https://flutter-ohos.obs.cn-south-1.myhuaweicloud.com
      2. 删除 /bin/cache 目录下的缓存
      3. 执行 flutter clean,清除项目编译缓存
      4. 运行 flutter run -d $DEVICE --debug
    3. 补充信息: 运行android或ios出现类似错误,也可以尝试还原环境变量 FLUTTER_STORAGE_BASE_URL ,清除缓存后重新运行。
收藏00

登录 后评论。没有帐号? 注册 一个。