系列文章目录
文章目录
- 系列文章目录
- 前言
- 问题集锦
- 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”模块。
总结
以上就是鸿蒙跨平台 开发过程中 遇到的问题,后期会不定时补充,欢迎大家留言交流。