【鸿蒙】ArkUI-X跨平台问题集锦
解决:CustomDialogController 实例化时,不要设置showInSubWindow: true,默认值应为false,表示弹窗仅在应用内显示;以上就是鸿蒙跨平台开发过程遇到的问题,后期会不定时补充,欢迎大家留言交流。
系列文章目录
文章目录
- 系列文章目录
- 前言
- 问题集锦
-
-
- 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
- 14、页面跳转场景:原生跳跨平台,跨平台跳原生
- 15、StageActivity()子类内,无法调用注册协定方法:registerForActivityResult()
- 16、Android平台上传文件至华为OBS失败,错误码400
- 17、如何将IDE使用的ArkUI-X SDK改为使用更高版本?
-
- 总结
前言
以下问题背景:从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未适配沉浸式;
Android应用/Activity主题样式 使用
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
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”模块。
14、页面跳转场景:原生跳跨平台,跨平台跳原生
方式一:用启动Ability的方式拉起原生Activity
// xxx.ets
let want: Want = {
bundleName: 'com.example.helloworld',
moduleName: 'entry', //小写
abilityName: 'Jump', //首字母大写
parameters:{id:1,name:'ArkUI-X'} //可选参数
};
let context = getContext(this) as common.UIAbilityContext;
context.startAbility(want, (err, data) => {
});
方式二:用桥接方法/消息方式拉起原生页面;
15、StageActivity()子类内,无法调用注册协定方法:registerForActivityResult()
原因:StageActivity的父类为android.app.Activity,若要使用注册协定,需要父类为 1.7.0 版或更高版本的androidx.activity.ComponentActivity
解决方案:使用传统方法startActivityForResult(@RequiresPermission Intent intent, int requestCode) 启动Activity接收回调。
16、Android平台上传文件至华为OBS失败,错误码400
在使用跨平台文件上传request.uploadFile(getContext(), uploadConfig),上传文件至华为OBS时,遇到400错误,此问题仅出现在Android平台,鸿蒙与iOS无此问题。
解决方案:需将ArkUI-X的SDK更新至6.0.0版本。ps:目前正式版未发布。
17、如何将IDE使用的ArkUI-X SDK改为使用更高版本?
首先,在IDE中使用的ArkUI-X SDK版本,是与编译的系统SDK版本 一一对应的。
这里以DevEco 5.1.1为例。
项目中的运行操作系统为HarmonyOS,而HarmonyOS SDK版本是与DevEco 版本绑定的,内置在IDE中的,DevEco 5.1.1内置的HarmonyOS SDK API 19,因此项目能配置的最高编译SDK版本为"5.1.1(19)"。
编译SDK版本为19,则对应的ArkUI-X SDK也是19。

项目根目录下配置文件:build-profile.json5
// compatibleSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
// 指定编译时使用的 SDK 版本。最佳实践:设置为最新稳定版.
"compileSdkVersion": "5.1.1(19)",
// 适配的目标系统版本,默认等于 compatibleSdkVersion,最佳实践:设置为最新稳定版.
"targetSdkVersion": "5.1.1(19)",
// 兼容的最低系统版本,格式:HarmonyOS 工程:"M.S.F(X)" 格式;OpenHarmony 工程:纯数字格式
"compatibleSdkVersion": "5.0.1(13)",
// 运行的操作系统类型:"HarmonyOS":华为鸿蒙系统;"OpenHarmony":开源鸿蒙系统
"runtimeOS": "HarmonyOS",
- 那么我们怎么使用ArkUI-X SDK 20的版本?
方案一、
升级IDE。
方案二、(适用于 IDE已最新)
下载新版本arkui-x SDK后,解压替换本地arkui-x 19 SDK,并手动修改sdk中arkui-x.json的配置项: “apiVersion”:从"20"改为 “19”, 最后将项目.arkui-x\android\app\libs下内容删除,重新编译生成lib内容即可。
ps:在IDE设置中,可以看到当前已安装的arkui-x SDK版本。
总结
以上就是鸿蒙跨平台 开发过程中 遇到的问题,后期会不定时补充,欢迎大家留言交流。
更多推荐




所有评论(0)