HarmonyOS 鸿蒙Next代码静态检查

HarmonyOS 鸿蒙Next代码静态检查 为什么在模块下的resources配置了base/element/color.json和dark/element/color.json,且名字一样的色值,但代码检查报warn:The color values should be set for both dark and light color modes through ‘$r’.

5 回复

问题:The color values should be set for both dark and light color modes through '$r

根据这个警告描述,看看是否会影响功能,如果不影响,可以不用理会;如果影响了功能则修改代码;

我的app刚上架,我也做了深浅色匹配,叫RSS Pro,你可以参考下,我的思路是在目录下单独建立了一个light目录,来适配浅色模式,这样应该就不会有警告了

cke_7705.png

希望能帮到你,望采纳!

更多关于HarmonyOS 鸿蒙Next代码静态检查的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


是不是引用的地方使用错误了。

正确引用:

Text('适配深/浅色模式的文本')
  .fontColor($r('app.color.app_text_color'))  // 自动匹配模式

HarmonyOS Next代码静态检查使用ArkTS语言规范,通过DevEco Studio内置工具实现。支持ArkTS语法检查、代码风格检测、潜在缺陷扫描(如空指针、资源泄漏)。集成华为安全编码规范,提供实时提示和批量扫描功能。检查规则针对鸿蒙API和ArkUI框架优化,可配置自定义规则集。

这个警告是因为在HarmonyOS Next中,为了确保应用在浅色和深色模式下都能正确适配,当你在basedark目录下配置了同名的颜色资源(如color.json中定义了相同的颜色名但不同值)时,必须使用资源引用$r('app.color.xxx')的方式来使用该颜色,而不能直接使用硬编码的颜色值(如#FF0000)或仅通过$r引用单一模式。

核心原因
静态检查器检测到你虽然配置了多模式的颜色资源,但在代码中可能直接使用了颜色值,或未以$r方式引用,这可能导致在模式切换时颜色不会动态变化,违反HarmonyOS Next的动态资源管理规范。

解决方法
在代码中使用颜色时,确保统一通过$r('app.color.颜色名')引用,例如:

Text('示例文本')  
  .fontColor($r('app.color.my_text_color'))  

这样系统会根据当前深浅模式自动匹配basedark目录下的对应颜色值。

注意

  • 检查代码中所有使用该颜色的地方,替换为$r引用。
  • 如果已使用$r引用仍报警告,请确认basedark下的color.json中该颜色名是否正确定义,且文件路径符合规范(如resources/base/element/color.json)。

通过规范引用,可确保应用动态适配深浅模式,提升用户体验。

回到顶部