system_info2 库 OHOS 适配总结

欢迎大家加入开源鸿蒙跨平台开发者社区:

适配概述

成功将 system_info2 库适配到 OpenHarmony (OHOS) 平台,实现了完整的系统信息获取功能。

修改文件列表

1. 配置文件修复

  • 文件: ohos/build-profile.json5
  • 修改: 添加 modules 字段,修复 Flutter 工具链崩溃问题

2. 新增文件

  • 文件: lib/src/platform/cpu_ohos.dart
  • 功能: OHOS 平台专用的 CPU 信息获取
  • 特性: 支持华为海思处理器识别

3. 平台适配文件(添加 ‘ohos’ case)

文件 功能 实现方式
cpu.dart CPU 路由 添加 OHOS 路由到 getOhosCores()
operating_system.dart 操作系统信息 使用 param 命令获取 OHOS 信息
kernel.dart 内核信息 复用 Linux 实现(uname 命令)
memory.dart 内存信息 读取 /proc/meminfo
storage.dart 存储信息 使用 stat 命令
user.dart 用户信息 使用 POSIX 标准命令
userspace.dart 用户空间信息 使用 getconf 命令

4. 示例应用

  • 文件: example/lib/main.dart
  • 功能: 展示所有系统信息的完整 UI 界面

5. 文档更新

  • 文件: README.md
  • 内容: 添加 OHOS 平台支持说明

技术实现要点

1. 平台识别

switch (Platform.operatingSystem) {
  case 'ohos':
    // OHOS 特定实现
    break;
}

2. OHOS 特有命令

// 获取系统参数
exec('param', ['get', 'const.ohos.fullname'])
exec('param', ['get', 'const.ohos.version.id'])

3. Linux 兼容性

大部分功能复用 Linux 实现:

  • /proc/cpuinfo - CPU 信息
  • /proc/meminfo - 内存信息
  • uname - 内核信息
  • stat - 文件系统信息

4. 厂商识别

switch (cpuImplementer.toLowerCase()) {
  case '0x41':
    vendor = 'ARM';
    break;
  case '0x48':
    vendor = 'HiSilicon';  // 华为海思
    break;
  case '0x51':
    vendor = 'Qualcomm';
    break;
}

支持的功能

✅ 操作系统名称和版本
✅ 内核名称、版本、架构、位数
✅ CPU 核心数、架构、厂商
✅ 物理内存(总量、空闲、可用)
✅ 虚拟内存(总量、空闲)
✅ 存储空间(总量、空闲)
✅ 用户信息(用户名、ID、主目录)
✅ 用户空间位数

使用示例

import 'package:system_info2/system_info2.dart';

void main() {
  // 操作系统信息
  print('OS: ${SysInfo.operatingSystemName}');
  print('Version: ${SysInfo.operatingSystemVersion}');
  
  // 内核信息
  print('Kernel: ${SysInfo.kernelName} ${SysInfo.kernelVersion}');
  print('Architecture: ${SysInfo.rawKernelArchitecture}');
  print('Bitness: ${SysInfo.kernelBitness}-bit');
  
  // CPU 信息
  print('CPU Cores: ${SysInfo.cores.length}');
  if (SysInfo.cores.isNotEmpty) {
    print('CPU Name: ${SysInfo.cores.first.name}');
    print('CPU Vendor: ${SysInfo.cores.first.vendor}');
  }
  
  // 内存信息
  print('Total Memory: ${SysInfo.getTotalPhysicalMemory()} bytes');
  print('Free Memory: ${SysInfo.getFreePhysicalMemory()} bytes');
  
  // 存储信息
  print('Total Storage: ${SysInfo.getTotalStorage()} bytes');
  print('Free Storage: ${SysInfo.getFreeStorage()} bytes');
  
  // 用户信息
  print('User: ${SysInfo.userName}');
  print('User ID: ${SysInfo.userId}');
  print('Home: ${SysInfo.userDirectory}');
}

测试验证

编译测试

flutter pub get
dart analyze lib/

运行测试

cd example
flutter run -d <ohos-device-id>

预期结果

  • ✅ 代码分析无错误
  • ✅ 编译成功
  • ✅ 在 HarmonyOS 设备上正常运行
  • ✅ 正确显示所有系统信息

兼容性

平台 支持状态
Linux ✅ 原生支持
macOS ✅ 原生支持
Windows ✅ 原生支持
Android ✅ 原生支持
OpenHarmony 新增支持

适配策略

  1. 复用优先: 最大化复用 Linux 实现
  2. 特殊处理: 为 OHOS 特有功能提供专门实现
  3. 降级方案: 每个功能都有备用实现
  4. 错误处理: 完善的异常处理机制

关键优势

  1. 零侵入: 不影响其他平台的功能
  2. 高兼容: 充分利用 OHOS 的 Linux 兼容性
  3. 易维护: 清晰的代码结构和注释
  4. 可扩展: 易于添加更多 OHOS 特有功能

后续优化方向

  1. 添加 HarmonyOS 分布式设备信息获取
  2. 支持更多 OHOS 系统参数
  3. 性能优化和缓存机制
  4. 单元测试和集成测试
  5. 发布到 pub.dev

问题排查

问题 1: Flutter 工具链崩溃

解决: 在 ohos/build-profile.json5 中添加 modules 字段

问题 2: 命令执行失败

解决: 检查设备权限,确保应用有执行系统命令的权限

问题 3: 信息获取不完整

解决: 检查 OHOS 版本,某些命令可能在不同版本中有差异

总结

本次适配工作成功实现了 system_info2 库在 OpenHarmony 平台上的完整功能支持。通过合理的架构设计和充分利用平台特性,我们以最小的代码改动实现了最大的功能覆盖。

代码统计:

  • 新增文件: 1 个
  • 修改文件: 9 个
  • 新增代码: ~200 行
  • 适配时间: 约 2 小时

这次适配为其他 Dart/Flutter 库的 OHOS 平台适配提供了很好的参考范例。

项目地址:https://atomgit.com/oh-flutter/system_info

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐