问题如何出现的?

我本人是在使用Claude Code编程时权限给太多了,偶然动到了系统文件,就这样飞出来了个unprecedented的问题。


具体问题参考(系统能力集与当前设备不匹配):

Tips:不是业务代码问题,而是 SDK / SysCap / 构建缓存串线

首先理解SysCap是什么?

SysCap,全程SystemCapability,既系统能力,属于操作系统中每一个1独立的功能特性,如蓝牙、WiFi等。

在HarmonyOS和OpenHarmony中,SysCap主要用于:

1.描述设备能力:支持能力集(Support Capabliity Set )表示设备本身具备的系统能力。

2.描述应用需求:要求能力集(Required Capability Set)表示应用运行所需要的系统能力。

3.辅助开发:联想能力集(Suggested Capability Set)由DevEco studio根据设备和项目自动生成,用于API联想和开发提示。

一:网上大部分解决方案(亲测无效):

1.在hap模块下src-main目录下创建syscap.json文件移除系统中不支持的syscap能力,例:

// entry/src/main/syscap.json

{
  "devices": {
    "general": ["default"]  // 同module.json5中的deviceTypes
  },
  "production": {
    "removedSysCaps": [
      "SystemCapability.ArkUi.Graphics3Dh",
    ]
  }
}

二:Codex方案,清理项目缓存重新构建项目(一遍通):

1.理项目构建缓存

先把构建缓存彻底清掉(有几个模块就清理几个):

Remove-Item -LiteralPath '.hvigor' -Recurse -Force
Remove-Item -LiteralPath 'build' -Recurse -Force
Remove-Item -LiteralPath 'xx模块\build' -Recurse -Force
Remove-Item -LiteralPath 'xx模块\build' -Recurse -Force
Remove-Item -LiteralPath 'xx模块\build' -Recurse -Force

如果想先确认目录存在:

Get-ChildItem -Force .hvigor, 

2. 重新同步工程并全量构建

建议操作顺序:

  1. 关闭 DevEco Studio 中的运行任务

  2. 删除上述缓存目录

  3. 重新打开工程

  4. 执行 Sync and Refresh Project

  5. 重新 Build

  6. 重新安装到设备

3. 检查 SDK 配置是否串线

重点检查:

  • DevEco Studio SDK Manager 中使用的是哪套 SDK

  • 是否混入了残缺安装

  • 是否同时存在多套 HarmonyOS / OpenHarmony SDK 路径

  • 当前工程是否引用了错误的 SDK 索引

4. 必要时重装 SDK

如果清理缓存后仍然报同样的 SysCap 缺失错误,优先考虑:

重装 SDK 或修复 SDK 配置

而不是继续去改业务代码。

关键命令:

在构建目录里找 SysCap

rg -n "SystemCapability.HiviewDFX.HiDumper|SystemCapability.Security.DataTransitManager|SystemCapability.Multimedia.MediaLibraryli.Core(**注意删除 报错信息中缺失的系统能力**) 项目名\build 模块名

看项目目标 SDK

rg -n "targetSdkVersion|compatibleSdkVersion" 

清理缓存

Remove-Item -LiteralPath '.hvigor' -Recurse -Force
Remove-Item -LiteralPath 'build' -Recurse -Force
Remove-Item -LiteralPath '模块名\build' -Recurse -Force
Remove-Item -LiteralPath '模块名\build' -Recurse -Force

有几个模块就执行几次Remove-Item -LiteralPath '模块名\build' -Recurse -Force
例如:Remove-Item -LiteralPath 'library\build' -Recurse -Force


总结:

  1. 先看设备真实 API,不要只看 IDE 提示

  2. 再看项目 targetSdkVersion

  3. 最后一定要看构建产物里的 rpcid.json

如果你发现:

  • 设备 API 不低

  • 项目 target 也正常

  • rpcid.json 里的 api_versionsyscap 明显异常

那大概率就是:

SOS:构建环境问题,不是业务代码问题。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐