编译鸿蒙App的趟坑记录

5 阅读3分钟

背景:基于ArkTS UI开发卡片

sdk配置:

targetSdkVersion: "6.1.0(23)"
compatibleSdkVersion: "6.1.0(23)"

日志:

> hvigor Finished :entry:default@PreBuild... after 53 ms 

> hvigor Finished :entry:default@CreateModuleInfo... after 1 ms 

> hvigor Finished :entry:default@MergeProfile... after 6 ms 

> hvigor Finished :entry:default@CreateBuildProfile... after 2 ms 

> hvigor Finished :entry:default@PreCheckSyscap... after 1 ms 

> hvigor Finished :entry:default@GeneratePkgContextInfo... after 10 ms 

> hvigor Finished :entry:default@ProcessProfile... after 124 ms 

> hvigor UP-TO-DATE :entry:default@ProcessRouterMap...  

> hvigor UP-TO-DATE :entry:default@ProcessShareConfig...  

> hvigor Finished :entry:default@ProcessStartupConfig... after 2 ms 

> hvigor Finished :entry:default@PreviewProcessResource... after 2 ms 

> hvigor Finished :entry:default@GenerateLoaderJson... after 11 ms 

> hvigor Finished :entry:default@PreviewCompileResource... after 232 ms 

> hvigor Finished :entry:default@PreviewHookCompileResource... after 1 ms 

> hvigor Finished :entry:default@CopyPreviewProfile... after 6 ms 

> hvigor Finished :entry:default@ReplacePreviewerPage... after 1 ms 

> hvigor Finished :entry:buildPreviewerResource... after 1 ms 

> hvigor Finished :entry:default@PreviewUpdateAssets... after 2 ms 

> hvigor ERROR: Failed :entry:default@PreviewArkTS... 

> hvigor ERROR: 10505001 ArkTS Compiler Error

Error Message: Property 'createDataShareHelper' does not exist on type 'typeof dataShare'. At File:/guide-snippets/FormKit/StageServiceWidgetCards/entry/src/main/ets/persistentdataformability/PersistentDataFormAbility.ts:32:15

* Try:

> Run with --stacktrace option to get the stack trace.

> Run with --debug option to get more log output.

> hvigor ERROR: BUILD FAILED in 8 s 182 ms 

进程已结束,退出代码为 -1

直接解决方案:

修正导入语句

最直接有效的解决方法是检查并修正文件 PersistentDataFormAbility.ts 顶部的导入语句。

请将原导入语句:


import dataShare from '@ohos.data.dataShare';

替换为以下方式:


import { dataShare } from '@kit.ArkData';

再次报错:

 hvigor Finished :entry:buildPreviewerResource... after 1 ms 

> hvigor Finished :entry:default@PreviewUpdateAssets... after 2 ms 

> hvigor ERROR: Failed :entry:default@PreviewArkTS... 

> hvigor ERROR: 10505001 ArkTS Compiler Error

Error Message: Property 'createDataShareHelper' does not exist on type 'typeof dataShare'. At File:/guide-snippets/FormKit/StageServiceWidgetCards/entry/src/main/ets/persistentdataformability/PersistentDataFormAbility.ts:33:15

* Try:

> Run with --stacktrace option to get the stack trace.

> Run with --debug option to get more log output.

> hvigor ERROR: BUILD FAILED in 9 s 18 ms 

进程已结束,退出代码为 -1

分析:

遇到的错误 Property 'createDataShareHelper' does not exist on type 'typeof dataShare' 是非常典型的版本 API 变更或 SDK 定义不匹配问题。

  1. 定义文件缺失:在你提供的第一个附件(dataShare 的声明文件)中,我们可以看到该 namespace 仅定义了 createDataProxyHandle 方法(标注为 @since 20),确实没有定义 createDataShareHelper。
  2. 版本更迭:在 HarmonyOS 的演进中,针对“数据代理共享”场景,API 20+ 开始引入了专门的 createDataProxyHandle。而你代码中使用的 createDataShareHelper 带有 { isProxy: true } 参数,这在较新的 SDK 中已被更具象化的 API 替代。
  3. SDK 配置:你的 build-profile.json5 显示 targetSdkVersion 为 6.1.0(23),这是一个非常高的版本(API 23)。在这个版本中,DataShare 模块的结构可能已经发生了重构。

针对 API 23 环境,你有以下两种主要的解决路径:

方案一:迁移至新的 DataProxy API

既然你的 SDK 定义文件中存在 createDataProxyHandle,且你的业务逻辑涉及到代理(isProxy: true),你应该使用 API 23 推荐的方式。

修改 PersistentDataFormAbility.ts 中的代码

方案二:检查 SDK 导入与兼容性定义

如果必须使用 createDataShareHelper(例如为了兼容旧的模板系统 addTemplate),请检查以下几点:

  1. 导入方式检查:确保你的导入路径是标准的 Kit 导入方式:

  2. 强制类型转换(临时方案):如果确认当前 SDK 运行时其实支持该方法,只是类型定义文件(.d.ts)遗漏了,你可以通过类型断言绕过静态检查。

  3. 核对 ohos.data.dataShare.d.ts:在 DevEco Studio 中,点击 createDataShareHelper(如果能点进去)或者按住 Ctrl 点击 dataShare 模块名,查看编辑器实际引用的 SDK 文件。如果该文件中确实没有该函数,说明你当前使用的 targetSdkVersion 已经移除了该方法的直接暴露。