关于openharmony:OpenHarmony设备开发修改屏幕-DPI像素密度

7次阅读

共计 3462 个字符,预计需要花费 9 分钟才能阅读完成。

一、OpenHarmony 源码中 DPI 配置

  • 在源码 foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml 中有 rk3568 的默认配置

rk3568 开发板默认的 DPI 配置为 240, 范畴为 80-640。

    <!--Window display dpi, valid range is 80~640, use 0 if no configuration is requeired-->
    <dpi>240</dpi>

以下为触觉智能开发板在不同 DPI 时屏幕的显示状况

  • DPI 为 240 时
  • DPI 为 100 时
  • DPI 为 600 时

二、更改开发板的 DPI

办法一:更改源码编译烧录固件

  • 在源码 foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml 文件中批改 dpi, 编译后烧录固件。

      <!--Window display dpi, valid range is 80~640, use 0 if no configuration is requeired-->
      <dpi>240</dpi>

办法二:发送 display_manager_config.xml 文件至设施 etc/window/resources

  • OpenHarmony 固件编译烧录进入设施后,display_manager_config.xml 文件会被预编译打包至设施端 etc/window/resources 目录下,什么,为什么只有 window/resources 字段,因为 ohos_prebuilt_etc 就是把文件放进设施的 etc 文件夹
foundation/window/window_manager/resources/config/BULID.gn 文件如下,上面代码的意思是源码 foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml 会真正装置在设施中的 etc/window/resources 文件地位,ohos_prebuilt_etc("display_manager_config") {if (device_name == "rk3568") {
    source = "//foundation/window/window_manager/resources/config/rk3568/display_manager_config.xml"
    install_enable = true
···
···
  relative_install_dir = "window/resources"
}
  • 步骤如下

    # 进入 sdk\ 版本号 \toolchain 输出 cmd 关上命令行,从新加载零碎为可读写
    D:\DevEco Studio\sdk\9\toolchains>hdc_std shell mount -o remount,rw /
    
    # 替换 /etc/window/resources 中的 display_manager_config.xml 文件
    D:\DevEco Studio\sdk\9\toolchains>hdc_std file send C:\Users\jjh\display_manager_config.xml /etc/window/resources
    
    而后重启开发板让设置失效 

知识点附送

为 ohos_prebuilt_XXX 类指标增加反对指定 output 属性的能力

  • 以该 pr 学习 https://gitee.com/openharmony/build/pulls/822/files 为 ohos_prebuilt_XXX 类指标增加反对指定 output 属性的能力。
  • ohos_prebuilt_XXX 类指标是指 ohos_prebuilt_executableohos_prebuilt_shared_libraryohos_prebuilt_static_libraryohos_prebuilt_etc。这类指标只反对指定 source 属性,拷贝到 out 目录时指标文件名与源文件名是一样的,无奈另行指定名字。该 pr 解决了此限度,增加了 output 这个可选属性用于指定指标文件名,不指定的状况下默认与源文件名是一样的(与原逻辑保持一致)。
  • OpenHarmony 编译构建子系统是基于 Gn 和 ninja 的,而 gn 自身是有原生模板(source_set,shared_library, static_library, action, executable,group)。gn 也反对用户自定义编译模板,OpenHarmony 编译子系统提供了一系列自定义的模板(ohos_shared_library、ohos_prebuilt_executable、ohos_prebuilt_shared_library 等)

    • 自定义模板的源码位于 https://gitee.com/openharmony/build/tree/master/templates
  • ohos_prebuilt_executableohos_prebuilt_shared_libraryohos_prebuilt_static_libraryohos_prebuilt_etc 预编译模板在 prebuilt.gni 中定义,它们通过调用 ohos_copy 模板实现。

    • ohos_copy 模板实现了拷贝文件到设施具体位置的性能,它须要定义 invoker.sources 和 invoker.outputs,即 source 和 output 属性。例如
  • ohos_prebuilt_executableohos_prebuilt_shared_libraryohos_prebuilt_static_libraryohos_prebuilt_etc(上面用 ohos_prebuilt_xxx 代指) 增加反对指定 output 属性的能力的相干代码如下

    templates/common/copy.gni 文件中:template("ohos_copy") {assert(defined(invoker.sources),
           "sources must be defined for ${target_name}.")
    assert(defined(invoker.outputs),
           "outputs must be defined for ${target_name}.")
    ...
        if (_is_prebuilt) {
          _outputs = invoker.outputs
          module_source = string_replace(_outputs[0], "${target_out_dir}/", "", 1)
        }
        prebuilt = _is_prebuilt
    ···
templates/cxx/prebuilt.gni 文件中:template("ohos_prebuilt_xxx") {
···
# 如果.gn 文件中为 ohos_prebuilt_xxx 指定了 out 属性,文件名称被另外指定。没有则默认为原名称
  if (defined(invoker.output)) {_copy_output = "${target_out_dir}/${invoker.output}"
  } else {_copy_output = "${target_out_dir}/${invoker.source}"
  }
···
    outputs = [_copy_output]
}

使能 / 禁用 selinux

  • 禁用 selinux

    hdc_std shell mount -o rw,remount /
    hdc_std shell "sed -i's/enforcing/permissive/g'/system/etc/selinux/config"
    hdc_std shell "cat /system/etc/selinux/config |grep SELINUX="
    # 重启设施
    hdc_std shell reboot
  • 使能 selinux

    hdc_std shell mount -o rw,remount /
    hdc_std shell "sed -i's/permissive/enforcing/g'/system/etc/selinux/config"
    hdc_std shell "cat /system/etc/selinux/config |grep SELINUX="
    # 重启设施
    hdc_std shell reboot
正文完
 0