HarmonyOS 鸿蒙Next app模块拆分问题:图标在A模块,A模块绘制不出来,A非根模块

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next app模块拆分问题:图标在A模块,A模块绘制不出来,A非根模块

如图所示,我在varietydetail模块是绘制模块且存放资源图片的模块,app是工程启动模块。 此时发现的问题是:如果把图片放到varietydetail模块中无法绘制出来。只有放在app工程启动模块才能绘制出来。 文档中说图片资源相对根路径是在src中。但没说是在哪个模块的src。

2 回复

单HAP包资源通过"$r"或"$rawfile"引用资源,

跨HAP/HSP包资源通过createModuleContext(moduleName)接口创建同应用中不同module的上下文,获取resourceManager对象后,调用不同接口访问不同资源。

例如:getContext.createModuleContext(moduleName).resourceManager.getStringByNameSync(‘app.string.XXX’)。文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/resource-categories-and-access-V13#跨haphsp包应用资源

api参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-resource-manager-V13

将videoFeature\src\main\ets\pages\Index.ets文件里加入图片绘制代码

private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private img: ImageBitmap = new ImageBitmap("resources/base/media/icon.png")
Canvas(this.context)
  .width('50%')
  .height('50%')
  .onReady(() => {
    this.context.drawImage(this.img, 10, 10, 20, 20)
  })

本地模拟情况是成功绘制的

该示例所引用的视频的资源也是在videoFeature模块的resources下,不是在启动模块entry下

ImageBitmap方法中的参数是图片路径,hsp包中无法使用路径,只能使用Resource获取资源,所以就不能使用ImageBitmap方法。

drawImage方法支持ImageBitmap或PixelMap,这里就使用PixelMap类型作为参数。

参考demo:

// library模块 Index.ets、

import { image } from '[@kit](/user/kit).ImageKit';

[@Entry](/user/Entry)
[@Component](/user/Component)
export struct Index {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  [@State](/user/State) imgPixelMap: PixelMap | null = null

  async aboutToAppear() {
    // getContext().createModuleContext('library') 获取当前hsp的上下文
    let imageBuffer: Uint8Array =
      await getContext().createModuleContext('library').resourceManager.getMediaContent($r('app.media.gg_djgcw'))
    const imageSource: image.ImageSource = image.createImageSource(imageBuffer.buffer);
    imageSource.createPixelMap().then((pixelMap: PixelMap) => {
      this.imgPixelMap = pixelMap
      this.context.drawImage(this.imgPixelMap, 10, 10, 20, 20)
    })
  }

  build() {
    Row() {
      Column() {
        Canvas(this.context)
          .width('50%')
          .height('50%')
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next app模块拆分问题:图标在A模块,A模块绘制不出来,A非根模块的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next app模块拆分时遇到图标在A模块但A模块绘制不出来的问题,通常是由于模块间资源引用或组件加载不正确导致的。如果A模块非根模块,需确保以下几点:

  1. 资源引用正确:检查图标资源是否在A模块的资源文件夹中正确放置,并在代码中正确引用。确保资源路径无误,且资源ID在A模块中已正确定义。

  2. 模块依赖关系:确认A模块是否被正确依赖。在项目的模块配置文件中,检查是否有正确设置对其他模块的依赖关系,特别是包含图标资源的模块。

  3. 组件加载逻辑:审查A模块的组件加载逻辑,确保在运行时能够正确加载和显示图标。检查是否有代码或配置错误导致图标组件未被正确实例化或渲染。

  4. 权限配置:确认A模块是否具有访问和显示图标的必要权限。在某些情况下,权限配置不当可能导致资源无法加载。

如果上述步骤均确认无误,但问题依旧存在,可能是系统或工具链的特定问题。此时,建议直接联系官网客服获取进一步的技术支持。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部