当前位置: 首页 > news >正文

【鸿蒙】ArkUI-X跨平台问题集锦

系列文章目录

【鸿蒙】ArkUI-X跨平台问题集锦


文章目录

  • 系列文章目录
  • 前言
  • 问题集锦
      • 1、HSP,HAR模块中 无法引入import bridge from '@arkui-x.bridge';
      • 2、CustomDialog 自定义弹窗中的点击事件在Android 中无任何响应;
      • 3、调用 buildRouterMode() 路由跳转页面前,必须手动import('/*page')页面。无法自动导入?
      • 4、主题Android\iOS未适配沉浸式;
      • 5、华为一键登录控件,不支持跨平台;
      • 6、webview.registerJavaScriptProxy不支持跨平台,不支持创建H5桥接对象
      • 7、平台差异化,代码如何只编译鸿蒙平台 或者Android、iOS平台,避免编译报错,不支持某平台问题;
      • 8、关于DevEco Studio编译时报错问题解决,报错:“ xxx can't support crossplatform application. ”
      • 9、在Android中无法使用JSON解析,报错: Load native module failed, so is @ohos:util.json
      • 10、DevEco Studio中build App无异常,在Android端启动时闪退,提示找不到ability
      • 11、在Android中,跳转页面,闪退报错 GetModuleBuffer failed.
      • 12、配置gradle 使用JDK 17后,DevEco Studio 编译APP报错:jlink.exe 不存在
      • 13、同步项目时,Ohpm Install 报错:Error: Invalid dependency
  • 总结


前言

以下问题背景:从ArkUI纯鸿蒙项目——>改造为——>ArkUI-X项目。

问题集锦

1、HSP,HAR模块中 无法引入import bridge from ‘@arkui-x.bridge’;

报错:Cannot find module ‘@arkui-x.bridge’ or its corresponding type declarations. 找不到模块“@arkui-x.bridge”或其对应的类型声明<ArkTS检查>

原因:模块不支持跨平台,所以无法引入。
解决:
(推荐)方案一、
在项目.arkui-x/arkui-x-config.json5文件中,配置模块名称;
例如:
“modules”: [
“arkuix”, “utils”
]
(不推荐)方案二、在entry模块 引入bridge;
其他模块通过线程通讯emitter, 调用桥接 ;

2、CustomDialog 自定义弹窗中的点击事件在Android 中无任何响应;

解决:CustomDialogController 实例化时,不要设置showInSubWindow: true,默认值应为false,表示弹窗仅在应用内显示;

3、调用 buildRouterMode() 路由跳转页面前,必须手动import(‘/*page’)页面。无法自动导入?

解决:entry模块未配置模块动态导入;
参考文档:动态import变量表达式

4、主题Android\iOS未适配沉浸式;

5、华为一键登录控件,不支持跨平台;

解决:自定义华为登录按钮 调用登录API;
参考文档:使用自定义按钮登录

6、webview.registerJavaScriptProxy不支持跨平台,不支持创建H5桥接对象

解决方案:仅鸿蒙用此web,其他平台Android、iOS跳转至原生Web页面实现。
官方说明:当前该api内部已规划需求,请持续关注后续版本更新。

7、平台差异化,代码如何只编译鸿蒙平台 或者Android、iOS平台,避免编译报错,不支持某平台问题;

调整架构设计,参考文档:跨平台应用改造指南

8、关于DevEco Studio编译时报错问题解决,报错:“ xxx can’t support crossplatform application. ”

解决:修改静态编辑检查配置文件 C:\Program Files\Huawei\DevEco Studio\sdk\default\openharmony\ets\build-tools\ets-loader\lib\fast_build\system_api\api_check_utils.js
修改此配置为警告
“CROSSPLATFORM_TAG_CHECK_ERROER,!1,_typescript.default.DiagnosticCategory.Warning”
参考文档:关于DevEco Studio编译时报错问题解决

9、在Android中无法使用JSON解析,报错: Load native module failed, so is @ohos:util.json

[default] Throw error: Cannot read property parse of undefined
[default] at anonymous (arkuix|network|1.0.0|src/main/ets/Request.ts:86:1)

解决方案:
使用JSON,不用导包,导包反而报错,移除以下代码即可;
// import JSON from ‘@ohos.util.json’;
其他API加载失败请参考:异常Load native module failed, so is @ohos

10、DevEco Studio中build App无异常,在Android端启动时闪退,提示找不到ability

报错:ReferenceError: Cannot find module ‘com…/entry/ets/entryability/EntryAbility’ , which is application Entry Point

解决方案:
在项目根目录下build-profile.json5中,将以下代码注释掉;即可正常运行了
// “useNormalizedOHMUrl”: true
相关Issues:如何为纯HarmonyOS项目添加arkuix的支持

11、在Android中,跳转页面,闪退报错 GetModuleBuffer failed.

在Android Studio中报错如下:

 E  [js_module_reader.cpp(47)] GetModuleBuffer failed.A  [default] [LoadJSPandaFile:101] resolveBufferCallback get hsp buffer failed, hsp path:/data/storage/el1/bundle/xxx/ets/modules.abc, errorMsg:modulePath:

并且项目‘.arkui-x/android/app/src/main/assets/arkui-x’文件夹下,未生成相应的HSP模块文件;

原因:
1、名为“xxx”的HSP模块,并非是[ArkUI-X]Shared Library类型的模块;这里由于在arkui项目改造为ArkUI-X项目过程中,HSP模块是之前IDE选择"Shared Library"模板创建的,因此不支持跨平台;

解决方案:
方案一:新建HSP模块时选择“[ArkUI-X]Shared Library”,在此基础上进行开发;
在这里插入图片描述
方案二:修改现有项目中的HSP模块,使其支持跨平台。具体步骤如下:
1、在‘.arkui-x/arkui-x-config.json5’文件中配置HSP模块名称;例如:

{"crossplatform": true,"modules": ["entry","libraryHSP"// 此为HSP模块]
}

2、修改HSP模块中的‘hvigorfile.ts’文件,具体内容如下图所示,左侧为普通HSP配置,右侧为跨平台HSP配置;
在这里插入图片描述
跨平台HSP配置:

import { HspTasks } from '@ohos/hvigor-ohos-arkui-x-plugin';export default {system: HspTasks,  /* Built-in plugin of Hvigor. It cannot be modified. */plugins:[]         /* Custom plugin to extend the functionality of Hvigor. */
}

12、配置gradle 使用JDK 17后,DevEco Studio 编译APP报错:jlink.exe 不存在

报错信息:

* What went wrong:
Execution failed for task ':app:compileGuanwangReleaseJavaWithJavac'.
> Could not resolve all files for configuration ':app:androidJdkImage'.> Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.> Execution failed for JdkImageTransform: D:\Android\Sdk\platforms\android-34\core-for-system-modules.jar.> jlink executable C:\Program Files\Huawei\DevEco Studio\jbr\bin\jlink.exe does not exist.

原因:
jlink 是 JDK 的模块化工具(来自 JDK 17+);
而华为 DevEco Studio 的 JBR 是定制化 Java 运行时,可能不包含完整 JDK 工具链;

解决方案
(1)强制指定标准 JDK 路径
在项目的 gradle.properties 中添加:

# 指向 Android Studio 的 JDK 或独立安装的 JDK 17+
org.gradle.java.home=C\:\\Program Files\\Android\\Android Studio\\jbr
# 或
org.gradle.java.home=C\:\\Program Files\\Java\\jdk-17.0.8

(2)最后在DevEco Studio中,清理构建缓存,重新编译APP即可。

13、同步项目时,Ohpm Install 报错:Error: Invalid dependency

报错信息:

ohpm ERROR: Invalid dependency uicomponents@D:\DevEcoStudioProjects\arkui-x\commons\uicomponents -> uicomponents@1.0.0
ohpm ERROR: Found exception: Error: Invalid dependency, reached retry limit or non retryable error encountered.
ohpm ERROR: Invalid dependency utils@D:\DevEcoStudioProjects\arkui-x\commons\utils -> utils@1.0.0
ohpm ERROR: Found exception: Error: Invalid dependency, reached retry limit or non retryable error encountered.
ohpm ERROR: Invalid dependency network@D:\DevEcoStudioProjects\arkui-x\commons\network -> network@1.0.0
ohpm ERROR: Found exception: Error: Invalid dependency, reached retry limit or non retryable error encountered.
ohpm ERROR: Install failed, detail: Error: Invalid dependency

原因:
模块间出现了循环依赖;

解决方案:排查模块的依赖关系,避免出现循环依赖,在模块下的oh-package.json5 中移除冲突的依赖项;例如上述日志中提到,需要排查的“uicomponents”和“utils”模块。


总结

以上就是鸿蒙跨平台 开发过程中 遇到的问题,后期会不定时补充,欢迎大家留言交流。

http://www.lryc.cn/news/539206.html

相关文章:

  • 大模型驱动的业务自动化
  • ocr智能票据识别系统|自动化票据识别集成方案
  • [数据结构]红黑树,详细图解插入
  • 【机器学习】超参数调优指南:交叉验证,网格搜索,混淆矩阵——基于鸢尾花与数字识别案例的深度解析
  • Burp Suite基本使用(web安全)
  • React实现自定义图表(线状+柱状)
  • 从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)
  • Qt的QTabWidget的使用
  • Next.js【详解】获取数据(访问接口)
  • 反向代理模块kd
  • leaflet前端初始化项目
  • CMS DTcms 靶场(弱口令、文件上传、tasklist提权、开启远程桌面3389、gotohttp远程登录控制)
  • Docker 入门与实战:从安装到容器管理的完整指南
  • git删除本地分支
  • spring cloud gateway限流常见算法
  • 本地使用docker部署DeepSeek大模型
  • C++ 设计模式-外观模式
  • 【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • Fiddler笔记
  • 基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 51c自动驾驶~合集51
  • Redis 监视器:深入解析与实战指南
  • Java8适配的markdown转换html工具(FlexMark)
  • 超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍
  • Postman - Postman 导入 JSON 文件(导入集合或环境变量)
  • 傅里叶分析之掐死教程
  • ​实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”​等荣誉
  • SpringAI系列 - RAG篇(三) - ETL
  • Leetcode2080:区间内查询数字的频率