鸿蒙 Flutter 实战:package_info_plus 10.1.0 适配 3.27-ohos 全流程
在鸿蒙(OpenHarmony)Flutter3.27-ohos生态下,是常用的应用包信息查询插件(版本号、包名、构建号、安装时间等)。上游10.1.0面向 Flutter 3.38+,且pub 版不含ohos/平台。本文记录在上,将补齐鸿蒙原生层、跑通编译并完成 Demo 验证的过程。开源仓库在上,以Dart API 为基线,从 SIG 移植ohos/原生层,并解决 platform_inter
摘要
在鸿蒙(OpenHarmony)Flutter 3.27-ohos 生态下,package_info_plus 是常用的应用包信息查询插件(版本号、包名、构建号、安装时间等)。上游 10.1.0 面向 Flutter 3.38+,且 pub 版不含 ohos/ 平台。本文记录在 Flutter 3.27.5-ohos-1.0.3 上,将 package_info_plus ^10.1.0 补齐鸿蒙原生层、跑通编译并完成 Demo 验证的过程。
开源仓库:https://gitcode.com/xiaoyangming/flutter_package_info_plus_ohos
一、为什么要做这件事?
业务里几乎都会用到「关于本应用」的信息:设置页展示版本号、埋点带上 packageName、灰度按 buildNumber 分流、合规展示安装来源等。package_info_plus 用统一 Dart API 屏蔽各平台差异:
| 字段 / API | 说明 |
|---|---|
PackageInfo.fromPlatform() |
异步获取包信息(结果会缓存) |
appName |
应用显示名称 |
packageName |
包名 / Bundle ID |
version |
版本号(如 1.2.3) |
buildNumber |
构建号(Android versionCode 等) |
buildSignature |
签名指纹(Android/OHOS 有值) |
installerStore |
安装来源商店包名(Android 等) |
installTime / updateTime |
安装、更新时间(10.x 新增) |
典型场景:关于页、崩溃上报、强制升级弹窗、渠道统计。
二、环境与参考
2.1 开发环境
| 项 | 版本 / 说明 |
|---|---|
| Flutter | 3.27.5-ohos-1.0.3 |
| Dart | 3.6.2 |
| 命令 | flutter(本地若用 FVM,将下文 flutter 改为 fvm flutter 即可) |
| IDE | DevEco Studio(鸿蒙签名、真机调试) |
验证 Flutter 版本:
flutter --version

2.2 参考与发布仓库
| 仓库 | 作用 |
|---|---|
| fluttercommunity/plus_plugins | 上游 monorepo,tag package_info_plus-v10.1.0 |
| openharmony-sig/flutter_plus_plugins | 鸿蒙原生参考,分支 br_package_info_plus-v9.0.0_ohos |
| xiaoyangming/flutter_package_info_plus_ohos | 本文适配成果对外发布 |
| pub.dev/package_info_plus | 上游 Dart API(10.1.0) |
三、适配思路(3.27-ohos)
整体策略:Dart 层跟上游 10.1.0,鸿蒙层跟 SIG v9,工具链按 3.27 降级依赖。
- 浅克隆上游(
git clone --depth 1 --filter=blob:none --sparse),只检出packages/package_info_plus/package_info_plus,节约流量。 - 浅克隆 SIG 同分支策略,只检出
ohos/与 example 的ohos/工程。 - 在
pubspec.yaml增加ohos平台声明,SDK 放宽为>=3.0.0 <4.0.0。 - 内嵌
package_info_plus_platform_interface4.1.0(path),因 pub 版要求 Dart>=3.10.0,3.6.2 无法直接解析。 - Windows 实现回退 win32 5.x(
file_attribute.dart/file_version_info.dart取自 v9),因 10.x 依赖 win32 6.x(要求 Dart>=3.7)。 pub get、analyze、build hap完成编译级验证;真机展示字段需在 DevEco 签名后补截图。
工程关键目录:
flutter_package_info_plus_ohos/
├── lib/ # Dart API(包名仍为 package_info_plus)
├── ohos/ # 鸿蒙 HAR、PackageInfoPlugin.ets
├── packages/package_info_plus_platform_interface/ # 内嵌,兼容 Dart 3.6.2
├── example/
│ ├── lib/main.dart # 列表展示各字段
│ └── ohos/ # 示例 App,在此配置签名
└── pubspec.yaml
3.1 鸿蒙原生实现要点
OHOS 侧通过 @ohos.bundle.bundleManager 同步读取当前应用包信息,MethodChannel 与 Android 一致:
- 通道名:
dev.fluttercommunity.plus/package_info - 方法:
getAll→ 返回Map<String, string>(installTime/updateTime为毫秒时间戳字符串,与 Android 一致)
核心逻辑(节选):
const bundleManage = bundleManager.getBundleInfoForSelfSync(bundleFlags);
infoMap.set("appName", appName);
infoMap.set("packageName", bundleManage.name);
infoMap.set("version", bundleManage.versionName);
infoMap.set("buildNumber", bundleManage.versionCode.toString());
infoMap.set("buildSignature", buildSignature);
infoMap.set("installTime", bundleManage.installTime.toString());
infoMap.set("updateTime", bundleManage.updateTime.toString());
读取包信息无需在 module.json5 中声明额外权限。
四、适配过程中的关键修改
4.1 增加 ohos 平台与 SDK 约束
插件 pubspec.yaml:
environment:
sdk: '>=3.0.0 <4.0.0'
flutter: ">=3.0.0"
flutter:
plugin:
platforms:
# ... android / ios / web 等
ohos:
package: dev.fluttercommunity.plus.packageinfo
pluginClass: PackageInfoPlugin
上游 10.1.0 原声明 Flutter >=3.38.1、Dart >=3.10.0,且 无 ohos 节点。
4.2 内嵌 platform_interface(Dart 3.6.2)
| 问题 | 处理 |
|---|---|
package_info_plus_platform_interface ^4.1.0 要求 Dart >=3.10.0 |
将 4.1.0 源码放入 packages/,path 依赖,并把其 environment.sdk 改为 >=3.0.0 <4.0.0 |
10.x 需要 installTime / updateTime 字段 |
保留 4.1.0 的 PackageInfoData,不能退回 3.2.1 |
dependencies:
package_info_plus_platform_interface:
path: packages/package_info_plus_platform_interface
4.3 Windows 层 win32 版本回退
| 项 | 上游 10.1.0 | 本文 3.27-ohos |
|---|---|---|
win32 |
^6.0.1(Dart >=3.7) |
^5.5.3 |
| 实现文件 | toPcwstr() 等新 API |
使用 v9 的 TEXT() / GetFileAttributesEx 写法 |
OHOS 构建不编译 Windows,但 flutter analyze 会分析全平台 Dart 代码,必须保证 Windows 实现在当前 Dart 下可解析。
4.4 Example 简化
package_info_plus使用path: ../依赖本地插件。- 移除上游 example 中的
integration_test、device_info_plus等 dev 依赖(OHOS Demo 不需要)。 GeneratedPluginRegistrant.ets仅注册PackageInfoPlugin。
五、接入项目
5.1 添加依赖
在业务工程 pubspec.yaml 中:
dependencies:
package_info_plus:
git:
url: https://gitcode.com/xiaoyangming/flutter_package_info_plus_ohos.git
ref: v10.1.0-ohos-3.27
说明:Git 仓库名为
flutter_package_info_plus_ohos,Dart package 名仍是package_info_plus,import 不变。
flutter pub get
5.2 权限说明(OHOS)
查询本应用包信息不需要在 module.json5 里申请 READ_* 等权限。example 未声明敏感权限即可运行。
5.3 代码示例
import 'package:package_info_plus/package_info_plus.dart';
Future<void> printAppInfo() async {
final info = await PackageInfo.fromPlatform();
print('appName: ${info.appName}');
print('packageName: ${info.packageName}');
print('version: ${info.version}');
print('buildNumber: ${info.buildNumber}');
print('buildSignature: ${info.buildSignature}');
print('installerStore: ${info.installerStore}');
print('installTime: ${info.installTime}');
print('updateTime: ${info.updateTime}');
}
六、构建与签名
6.1 编译 HAP
cd example
flutter pub get
flutter build hap --debug
编译通过时,Hvigor assembleHap 任务成功;若尚未配置签名,CLI 可能提示:
请通过DevEco Studio打开ohos工程后配置调试签名
(File -> Project Structure -> Signing Configs 勾选Automatically generate signature)
此时 assembleHap 编译已通过,仅需在 DevEco 配置签名后即可产出可安装的 HAP。
6.2 DevEco 签名目录
签名请在 example 的鸿蒙工程 配置:
example/ohos/
步骤:File → Project Structure → Signing Configs → Automatically generate signature。

七、真机功能验证(Demo)
仓库 example 启动后通过 PackageInfo.fromPlatform() 拉取信息,列表展示各字段。建议真机安装后截图:
| 展示项 | 对应字段 | 预期 |
|---|---|---|
| App name | appName |
与系统桌面显示名一致 |
| Package name | packageName |
鸿蒙 bundle 名 |
| App version | version |
与 pubspec / 工程版本一致 |
| Build number | buildNumber |
数字构建号 |
| Build signature | buildSignature |
非空指纹串 |
| Installer store | installerStore |
当前实现为 空(见第八节) |
| Install / Update time | installTime / updateTime |
ISO8601 或可解析时间 |

3.27-ohos 已验证项(编译级)
flutter pub get/analyze无 error(插件 1 条 path 依赖 warning 可忽略)flutter build hap --debug→ HvigorassembleHap成功
八、与上游 / SIG 的差异说明
| 对比项 | 上游 pub 10.1.0 | SIG v9.0.0 ohos | 本文(3.27-ohos) |
|---|---|---|---|
| Flutter SDK | >=3.38.1 |
>=3.19.0 |
3.27.5-ohos-1.0.3 |
| Dart SDK | >=3.10.0 |
>=3.3.0 |
>=3.0.0(Dart 3.6.2) |
| 包版本 | 10.1.0 | 9.0.0 | 对齐 10.1.0 |
ohos/ 原生层 |
❌ 无 | ✅ 有 | 自 SIG 移植 |
installTime / updateTime |
✅ | 部分支持 | ✅(沿用 10.x Dart + SIG 原生时间戳) |
鸿蒙 API 支持情况(编译与代码审查):
| API / 字段 | ohos 3.27 |
|---|---|
PackageInfo.fromPlatform |
✅ |
appName |
✅ |
packageName |
✅ |
version / buildNumber |
✅ |
buildSignature |
✅ |
installTime / updateTime |
✅ |
installerStore |
⚠️ 固定返回空字符串(SIG 同样为空,非应用商店渠道名) |
九、常见问题
Q1:pub get 报 package_info_plus_platform_interface 要求 Dart >=3.10.0?
使用本文 git 依赖(已内嵌 platform_interface 并放宽 SDK),勿单独锁定 pub 上 4.1.0 的 hosted 版本。
Q2:analyze 报 win32 / toPcwstr 相关错误?
10.x 默认 win32 6.x 需要 Dart 3.7+。请使用本仓库回退后的 win32 5.x 实现,或直接使用 flutter_package_info_plus_ohos。
Q3:build hap 提示签名路径无效?
检查 example/ohos/build-profile.json5 是否含有他人机器绝对路径;清空 signingConfigs 后在 DevEco 重新自动签名。
Q4:installerStore 在鸿蒙上为空?
当前 PackageInfoPlugin.ets 写死 "",与 SIG v9 行为一致;若业务强依赖安装来源,需后续对接鸿蒙分发渠道 API。
Q5:能否继续用 SIG 的 dependency_overrides 指向 gitee/gitcode?
SIG 最高 ohos 分支为 v9.0.0,不含 10.x 的 installTime 等字段;若项目已升级到 package_info_plus ^10.1.0,建议改用本文对外仓库 tag v10.1.0-ohos-3.27。
Q6:依赖报错找不到 package_info_plus?
确认 git 地址为 flutter_package_info_plus_ohos,且已 flutter pub get。
十、总结
- 在 Flutter 3.27.5-ohos-1.0.3 上,以 package_info_plus 10.1.0 Dart API 为基线,从 SIG 移植
ohos/原生层,并解决 platform_interface、win32 与 SDK 约束问题,HAP 编译验证通过。 - 对外仓库 flutter_package_info_plus_ohos,tag
v10.1.0-ohos-3.27;读取包信息无需额外权限。
十一、参考链接
- 插件仓库:https://gitcode.com/xiaoyangming/flutter_package_info_plus_ohos
- 上游仓库:https://github.com/fluttercommunity/plus_plugins
- 上游包:https://pub.dev/packages/package_info_plus
- SIG 参考:https://gitcode.com/openharmony-sig/flutter_plus_plugins
- 适配笔记 / Demo:https://gitcode.com/xym_git/CSDN.git
- AtomGit:https://atomcode.atomgit.com
更多推荐

所有评论(0)