写点什么

【OpenHarmony 设备开发】修改屏幕 DPI(像素密度)

作者:离北况归
  • 2023-03-13
    江苏
  • 本文字数:2180 字

    阅读完需:约 7 分钟

一、OpenHarmony 源码中 DPI 配置


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
复制代码


发布于: 刚刚阅读数: 2
用户头像

离北况归

关注

还未添加个人签名 2022-03-26 加入

OpenHarmony啃论文俱乐部PIMF团队。 位于南京一学生,可私信。

评论

发布
暂无评论
【OpenHarmony设备开发】修改屏幕 DPI(像素密度)_OpenHarmony_离北况归_InfoQ写作社区