HarmonyOS鸿蒙Next中HAR包内通过resourceManager获取包内资源,作为第三方包被其他工程导入时,报上下文错误。

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

HarmonyOS鸿蒙Next中HAR包内通过resourceManager获取包内资源,作为第三方包被其他工程导入时,报上下文错误。

import { application } from '@kit.AbilityKit'

@ComponentV2
export struct MainPage {
    @Local value: string = ''

    aboutToAppear(): void {
        application.createModuleContext(getContext(), 'entry').then(context => {
            this.value = context.resourceManager.getStringSync($r('app.string.page_show'))
        }).catch(error => {
            console.error(error.message)
        })
    }

    build() {
        // 在同工程下的 HAP 内正常显示,在不同工程的 HAP 内报错 Invalid resource ID
        Text(this.value)
        // 在同工程下的 HAP 内正常显示,在不同工程的 HAP 内正常显示
        Text($r('app.string.page_show'))
    }
}

更多关于HarmonyOS鸿蒙Next中HAR包内通过resourceManager获取包内资源,作为第三方包被其他工程导入时,报上下文错误。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

麻烦提供下复现 Invalid resource ID 报错信息的 demo 工程

更多关于HarmonyOS鸿蒙Next中HAR包内通过resourceManager获取包内资源,作为第三方包被其他工程导入时,报上下文错误。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


帖子本身已经描述清楚了复现流程,简单的创建个工程,把上面的代码写进入就能复现了。

这边已经尝试过上述代码了,是跨模块使用的,没有出现相应报错,两行文本都能显示,

不仅仅是跨模块,还要跨工程。同工程下的跨模块,我试过没问题。你创建两个工程,在其中一个工程中创建HAR模块,然后构建为.har文件,在另一个工程的entry模块中,通过ohpm命令安装这个.har文件的绝对路径,然后运行这个entry模块试试。

在HarmonyOS鸿蒙Next中,HAR(HarmonyOS Ability Resource)包内的资源通过resourceManager获取时,如果作为第三方包被其他工程导入并出现上下文错误,通常是由于资源管理器未正确初始化或上下文传递问题导致的。

  1. 上下文传递问题:HAR包在被其他工程导入时,需要确保resourceManager的上下文(Context)正确传递。如果上下文未正确传递,resourceManager无法正确访问资源。在HAR包中,确保使用getResourceManager()方法时,传入的上下文是当前应用的上下文,而不是HAR包本身的上下文。

  2. 资源管理器初始化:在HAR包中,资源管理器需要在合适的时机初始化。如果资源管理器未初始化或初始化时机不正确,也会导致上下文错误。确保在HAR包的入口处或资源访问前,资源管理器已正确初始化。

  3. 资源路径问题:HAR包内的资源路径需要正确配置,确保在导入到其他工程时,资源路径不会被更改或丢失。在HAR包的resources目录下,资源文件的路径和名称应与代码中引用的路径和名称一致。

  4. 权限问题:确保HAR包在被导入的工程中具有访问资源的权限。如果权限不足,resourceManager无法正确获取资源。在工程的config.json文件中,检查并确保HAR包具有访问资源的权限。

  5. 版本兼容性:确保HAR包与导入工程的HarmonyOS版本兼容。如果版本不兼容,可能会导致资源管理器无法正确访问资源。检查HAR包和工程的HarmonyOS版本,确保它们兼容。

总结:在HarmonyOS鸿蒙Next中,HAR包内通过resourceManager获取包内资源时,作为第三方包被其他工程导入时出现上下文错误,通常是由于上下文传递、资源管理器初始化、资源路径、权限或版本兼容性问题导致的。确保这些方面正确配置,可以避免上下文错误。

在HarmonyOS鸿蒙Next中,HAR包通过resourceManager获取包内资源时,如果作为第三方包被其他工程导入并出现上下文错误,通常是因为资源管理器的上下文未正确设置。HAR包应确保使用ResourceManager时传递正确的上下文,通常可以通过getContext()方法获取。如果仍然报错,检查导入工程的资源配置文件是否正确引用HAR包资源,并确保HAR包的ohos.global.systemres路径配置无误。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!