Freadhub 适配原生鸿蒙(Harmony OS NEXT)

418 阅读8分钟

相关文章一:用Flutter给Readhub写一个App

相关文章二:Flutter版本Readhub开源

相关文章三:Flutter iOS真机调试及打包过程记录

相关文章四:Flutter iOS打包过程及构建上线审核通过流程总结

相关文章五:Freadhub终于升级Flutter2.0了

相关文章六:Freadhub Mac版它来了

相关文章七:Freadhub 适配原生鸿蒙(Harmony OS NEXT)

前言

Freadhub是由AriesHoo开发维护的一个Flutter开源项目--readhub的非官方产品。

之前Freadhub 手机端已有Androd、iOS版本,随着 原生鸿蒙(Harmony OS NEXT) 的发布,加上社区 SDK 鸿蒙化的推进。笔者感觉是时候适配一下了.

Gitee开源: gitee.com/AriesHoo/fl…

先来个整体效果展示

亮色模式深色模式
image.pngimage.png
今日古诗分享面板
image.pngimage.png
图片分享文字分享
image.pngimage.png
内置浏览系统浏览
image.pngimage.png
更多内容主题选择
image.pngimage.png

开始适配

前置条件

首先因为 Harmony版Flutter SDK 只支持Mac arm架构,故需要准备一个 Mac M系列 的 Mac 电脑.

image.png

社区文档

很可惜笔者的电脑是不支持的...😂

image.png

话说公司应该给升个级了.

那么就走另一条路了,买个支持原生鸿蒙的手机.

image.pngimage.pngimage.png

根据自己的情况搞一个 Harmony NEXT 支持设备查询

Flutter SDK下载

目前社区版 鸿蒙Flutter SDK 有俩版本 3.7.12 和 3.22.0, Freadhub选择3.7.12,

可以直接下载给自己的Flutter项目加载使用

git clone gitee.com/openharmony… hm3.7.12

也可使用fvm 进行多版本SDK管理 通过 fvm use hm3.7.12 切换当前系统使用SDK版本

image.png

增加ohos支持

flutter create --platforms=ohos . 执行该命令后会在原项目增加 ohos 文件夹

image.png

ohos项目配置

下载并配置 DevEco Studio

在华为官网下载一个 DevEco Studio

image.png

该步骤非本文重点,具体 安装配置流程参考文章

DevEco Studio 配置 Freadhub ohos项目

第一步:导入 flutter_readhub 项目的 ohos 文件夹,该文件夹是一个完整的 Harmony NEXT项目

image.png

如图可见,该项目是完全可直接运行的,类似用Android Studio直接打开android文件夹,也是可以直接运行起来的一样

image.png

第二步:配置项目自动签名

因为项目是需要直接运行到真机的,故需要自动签名

image.png

需要登录自己的华为开发者账号

image.png

打开设备开发者模式并连接电脑

image.png

如果电脑未连接设备会是这个样子的

image.png

华为官方文档 Flutter社区文档

然后在未配置自动签名项目运行会出现一下问题华为官方解疑

image.png

第三步:配置应用bundleName

应用包名,对应 Android 项目的packageName或 applicationId 及 iOS 项目的 bundleId

image.png

因为历史原因建议与Android项目作区分

第四步:配置应用的图标及应用名称

配置app.json5

image.png

移除 module.json5 中默认添加的 icon 和label

image.png image.png

至于原因参考华为官网介绍

v5前 华为官方文档

image.png

v5后 华为官方文档

image.png

第五步:配置应用的闪屏页

如下图所示配置 module.json5 中 startWindowIcon

image.png

增加闪屏背景dark模式适配,copy一份 base 文件夹改名为dark 并且仅保留 element文件夹及下级color.json文件

image.png

修改 dark 文件夹下 color.json 文件里的 start_window_background 的 value 为一个相对较暗的值

image.png

至此 DevEco Studio 配置 Freadhub ohos项目完成.

flutter_readhub项目适配

插件适配 ohos 端

首先 通过 Android Studio 打开 flutter_readhub 项目,其中 Flutter Plugins 需要自行判断是否需要在 ohos 端进行适配.

image.png

可以在Flutter社区已兼容openharmony插件 进行查阅

本项目需要兼容的插件如下

  #  设备信息
  device_info_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/device_info_plus/device_info_plus
  #  应用包信息
  package_info_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/package_info_plus/package_info_plus
  # WebView-应用内查看资讯详情
  webview_flutter:
    git:
      url: https://gitee.com/openharmony-sig/flutter_packages.git
      path: packages/webview_flutter/webview_flutter
      ref: master
  #跳转系统浏览器/打电话等
  url_launcher:
    git:
      url: https://gitee.com/openharmony-sig/flutter_packages.git
      path: packages/url_launcher/url_launcher
  #动态权限申请-8.0.0版本需在Profile申请需要启用的权限
  permission_handler:
    git:
      url: https://gitee.com/openharmony-sig/flutter_permission_handler.git
      path: permission_handler
  #分享文字及文件-注意保存文件位置
  share:
    git:
      url: https://gitee.com/AriesHoo/plugins.git
      path: packages/share
      ref: master
  #  plus版本
  share_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/share_plus/share_plus

其中项目直接引入共计7个需要适配ohos的插件.

又因为 flustars 插件内部引入了 path_provider 和 shared_preferences 插件故需要通过 dependency_overrides 方式进行覆盖.

image.png

最后通过命令 flutter pub get 一下,即可查看到对应 ohos 实现的 Flutter Plugins

image.png

至此该项目是可以直接运行到 Harmony NEXT 设备上的.最后还需针对ohos的小优化--涉及修改 flutter_readhub 代码层面的.

针对 ohos 的 flutter_readhub 代码层面优化

分享功能优化

因为之前在 Android 平台增加固定分享某些社交平台如QQ、微信、企业微信、钉钉等,故之前魔改了 Flutter 官方的share 插件,但是支持 ohos 的分享插件是 share_plus 故需要做判断.

首先增加是否是 ohos 的判断方法

image.png

其次在share_util中的shareText及 shareFiles 方法修改

shareText

shareFiles

然后分享图片截取图片到手机功能,经测试发现在ohos上不需要申请权限即可保存到手机然后进行图片分享.但是没有找到图片在图库的具体位置😓.(不知道是否是存在应用独有的存储空间?),故在权限帮助类增加如下判断

image.png

下拉刷新及底部加载更多

因之前做 Android 是 MaterialClassicHeader 刷新头,其他都是 ClassicHeader,这次升级后,Androud的刷新头是 MaterialClassicHeader ,ohos 刷新头脚都是 ArkUI 自带的 LoadingProgress效果. 剩余平台的头脚都是 CupertinoActivityIndicator

这里通过加载 GIF图片效果增加 ohos 的效果,首先从华为官网获取到对应gif资源并放入flutter_readhub项目

image.png

在flutter_readhub项目中引入插件flutter_svg

image.png

然后组装一个组件加载即可

image.png

最后刷新头脚相关平台判断即可

image.png

image.png

最终平台效果一览

AndroidiOSOHOS
Android.gifiOS头.gifohos.gif

整体圆角弧度增大

最近俩月使用原生鸿蒙手机,感觉系统的圆角做得比较大,感觉挺不错,故将整个flutter_readhub项目涉及到圆角地方进行了增大.

列表旧版列表新版
155313318232c62759c0f8812a78c6a1_720.jpg92c441af62a05a65b977aaca2363a248_720.jpg
分享弹框旧版分享弹框新版
14121c224f521ec07141c95d2a057fc4_720.jpg312b5799c9f4e76c02bede56c3b79a4b_720.jpg
更多弹框旧版更多弹框新版
8b03ef8614ea4a3d326e7db605a8e143.jpgda2d0b105d5fbbb36871124dfcc388f3_720.jpg

其他小优化

  1. 列表卡片增加已读灰度标识
  2. 顶部诗歌部分增加点击切换功能
  3. 开源移除GitHub地址(主要是太久没有上去加上手机格式化问题二次校验不通过登不上去了😂)
  4. 分享弹框icon增加为5列显得更加合适不过大
  5. 部分图标变更为outlined模式的
  6. 列表回到顶部功能icon变更并且移除文字显示
  7. 接口数据源变更

手机上运行项目

在完成 ohos 端插件适配后即可在手机上运行查看效果

首先 打开开发者选项并开启USB调试, 注意开发者选项需要重启手机.连续点击三次关于本机中软件版本后根据提示操作并重启手机.然后设置>系统>开发者选项 打开USB调试即可.

打开开发者选项打开USB调试
image.pngimage.png

其次数据线连接电脑与手机选择手机点击运行即可

image.png

成功运行,控制台出现flutter_readhub日志

image.png

其他操作如 command+s 会 hot reload 和运行其它端一样一样的.

通过Wi-Fi连接命令如下

hdc tconn ip:port

连接成功如图

Wi-Fi连接成功

如果要平常使用则通过flutter run --release 这样闪屏页和主程序之间不会有近1s的白屏

debug模式release模式
debug.gifrelease.gif

其它杂谈

1、部分网页不知道是自身适配原因还是ohos系统本身webview问题.未加载成手机模式而是PC模式,同一网页在Android 环境下是正常的手机模式

HarmonyNEXTAndroid
ohos.gifAndroid.gif

2、因 Harmony NEXT 软件生态还在搭建部分应用未迁移的可以通过卓易通下载Android 版进行过度,故可以在 Harmony NEXT手机上同时安装 ohos版 和 Android版

image.png

如图所示左侧列表卡片占据到底部小横条的是 ohos版 右侧 最底部有白色预留小横条的是 Android版

总结

  1. 社区 Flutter SDK 提供了开发Harmony NEXT 的一种可能
  2. 支持的版本只有俩 3.7.12 及 3.22.0 目前 Flutter 官方最新版 3.29.2
  3. 三方SDKohos支持度还不够
  4. UI 部分要是有一套ohos的就更好了
  5. 到2025年虽然网上有Flutter团队要解散了,Flutter社区分叉Flock等传闻,但是笔者私以为 Flutter仍是跨平台的最优解,没有之一

该项目为笔者学习Flutter练手开发的,年前心血来潮适配了一下ohos ,权当抛砖引玉了,万望各位不吝赐教