编译构建常见问题
========

#### 如何解决编译过程内存过高

**问题现象**

编译构建时，内存或CPU占用过高，导致出现DevEco Studio运行卡顿、延迟等现象。

**解决措施**

*   在执行hvigor构建的过程中，通过减少内存中的缓存数据、减少线程数量，可以减少编译过程中的内存占用。
    
    可以在hvigor-config.json5中添加配置。
    
    "properties": {
      // 配置为0，表示不启用内存缓存配置，默认为4，数值越低，内存中缓存数据越少
      "hvigor.pool.cache.capacity": 0,
      // 默认配置为cpu核数\-1， 包含ohos.arkCompile.maxSize，值越小，占用内存越少
      "hvigor.pool.maxSize" : 5,
      // 默认配置值为5, 值越小，占用内存越少
      "ohos.arkCompile.maxSize": 3,
      // 默认配置值为true, 表示开启内存缓存，占用内存较多，配置为false，关闭内存缓存，占用内存较少
      "hvigor.enableMemoryCache": false
    },
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/47/v3/KEwf768LQqaCCwvMtxJv9g/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=49102C3B1CE4CF1ACEF693496DC5BE61DBDCD8C5A71A37B876381B2DE4358720)
    
    当配置项"hvigor.pool.maxSize"和"ohos.arkCompile.maxSize"的值改小，"hvigor.enableMemoryCache"改为false后，可能会导致编译时长增加，请耐心等待。
    

*   如果以上修改没有取得明显的效果，可以使用非并行的模式来执行编译。
    
    *   在菜单栏点击“File > Settings（macOS为DevEco Studio > Preferences/Settings） > Build, Execution, Deployment > Build Tools > Hvigor”，取消勾选“Execute tasks in parallel mode (may require larger heap size)”。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1e/v3/WKUHaJgHTDebEaOsk61upA/zh-cn_image_0000002624994251.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=EBE5C57756F527585754AC6D32F2A751BAC90EFD17FC2FC4C48BEC17CCB5E717)
        
    *   流水线场景中，在命令行最后增加 --no-parallel，示例：
        
        hvigorw assembleHap --no-parallel
        
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/03/v3/EvFCHCEkTiOFdgrIOqQtNw/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=B8E6C6FCCCC35736EE8390EF0C2E48FF9B67AC1BD4C21F424F7E8425A212FA86)
    
    使用非并行模式编译，内存占用会减少，但可能会导致编译时长增加，请耐心等待。
    

#### 构建报错“Cannot read properties of undefined(reading 'XXX')”

请先根据XXX的值从以下场景排查，没解决问题再参考最终方案。

*   **场景一：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'setEnabled')”。
    
    **问题确认**
    
    hvigorfile.ts里有如下代码：
    
    import { hvigor, getHvigorNode } from "@ohos/hvigor"
    import { hapTasks} from '@ohos/hvigor-ohos-plugin';
    // 问题代码
    getHvigorNode(\_\_filename).getTaskByName('XXX').setEnabled(false);
    export default {
        system: hapTasks, /\* Built-in plugin of Hvigor. It cannot be modified. \*/
        plugins: \[\]         /\* Custom plugin to extend the functionality of Hvigor. \*/
    }
    
    **处理措施**
    
    1.  确保XXX是当前的HvigorNode里存在的任务。
        
        假设是entry模块的hvigorfile.ts中的代码导致的问题 ，XXX的有效值就是下图中的“default@SignHap”、“default@CollectDebugSymbol”、“assembleHap”等值。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/69/v3/hZEIslbzTzu8ivtpPnBkNw/zh-cn_image_0000002624994289.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=58EDB36CC0BEE801FD2B6E0AD1DFB06E9A1D0D0F61CF0340823058E191BB5E40)
        
    2.  确保getTaskByName的使用位置是在[Hvigor的配置阶段](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-life-cycle#section746253616316)及之后的生命周期里，包括beforeNodeEvaluate、afterNodeEvaluate、nodesEvaluated、taskGraphResolved、buildFinished。
*   **场景二：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'isSO')”。
    
    **处理措施**
    
    升级到DevEco Studio 5.1.0.840及以上的版本。
    
*   **场景三：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'getPluginId')”**。**
    
    **处理措施**
    
    确保hvigorfile.ts里export default的对象中的字段system的值是appTasks/hapTasks/hspTasks/harTasks之一。
    
    import { appTasks } from '@ohos/hvigor-ohos-plugin';
    
    export default {
        system: appTasks,  /\* Built-in plugin of Hvigor. It cannot be modified. \*/
        plugins:\[\]         /\* Custom plugin to extend the functionality of Hvigor. \*/
    }
    
*   **场景四：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'getNeedExecTargetServiceList')”**。**
    
    **处理措施**
    
    确保模块下的module.json5的type字段的值和hvigorfile.ts中export default的对象的system字段符合以下对应关系：
    
    **表1**
    | 
    module.json5的type字段
    
     | 
    
    hvigorfile.ts中export default的对象的system字段
    
     |
    | :-- | :-- |
    | 
    
    entry
    
     | 
    
    hapTasks
    
     |
    | 
    
    feature
    
     | 
    
    hapTasks
    
     |
    | 
    
    shared
    
     | 
    
    hspTasks
    
     |
    | 
    
    har
    
     | 
    
    harTasks
    
     |
    
*   **场景五：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'app')”。
    
    **处理措施**
    
    确保工程目录下AppScope/app.json5文件存在。
    
*   **场景六：**
    
    **问题现象**
    
    Linux环境下，执行单元测试，出现报错“Cannot read properties of undefined(reading 'toString')”。
    
    **处理措施**
    
    Linux环境暂不支持单元测试。
    
*   **场景七：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'kind')”。
    
    **处理措施**
    
    检查ArkTS代码是否有如下写法：
    
    // 错误写法：空数组
    class w {
      public a: \[\]\[\] = \[\]
      test() {
        console.log("1", this.a\[0\])
      }
    }
    // 正确写法
    class w {
      public a: string\[\]\[\] = \[\]
      test() {
        console.log("1", this.a\[0\])
      }
    }
    
*   **场景八：**
    
    **问题现象**
    
    编译构建时，出现报错“Cannot read properties of undefined(reading 'clear')”。
    
    **问题确认**
    
    在工程根目录hvigor/hvigor-config.json5文件中配置如下内容打开堆栈。
    
    "debugging": {
      "stacktrace": true                /\* Disable stacktrace compilation. Value: \[ true | false \]. Default: false \*/
    },
    
    确认堆栈内容是否如下。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9d/v3/XjR5bKleRWWVbvl2CVarsw/zh-cn_image_0000002594634820.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=41598F8BCC10F093718B9E831811F95C0E3A7EA7E4D7DFE3BD8EB429A1DD189A)
    
    **处理措施**
    
    确认DevEco Studio是否有使用安全加固等三方插件。如果有，可以先禁用三方插件，看是否会复现问题，还能复现就参考下面的最终方案。
    
*   **最终方案：**
    
    如果以上场景都不符合，打开堆栈后，根据堆栈信息排查代码。
    
    堆栈打开方法：工程根目录hvigor/hvigor-config.json5文件中配置如下内容。
    
    "debugging": {
      "stacktrace": true                /\* Disable stacktrace compilation. Value: \[ true | false \]. Default: false \*/
    },
    
    优先排查hvigorconfig.ts文件和hvigorfile.ts文件，其他代码次之。
    
    如果上述文件中并未排查出问题，请通过[在线提单](https://developer.huawei.com/consumer/cn/support/feedback/#/)提交问题。
    

#### 构建报错“Duplicated files found in module xxx. This may cause unexpected errors at runtime”

**问题现象**

编译构建时，出现报错“Duplicated files found in module xxx. This may cause unexpected errors at runtime”。

问题原因是构建时存在不同版本的同名so文件。比如将har模块产物里的so文件拷贝到entry模块的libs目录下，这时har模块里有一个libhar.so，entry模块里也有一个libhar.so，再配置entry依赖har，构建entry就会出现报错。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4b/v3/uWVrjwPGQBmMb2TdGbqViA/zh-cn_image_0000002625074427.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3F6DE84634E2D4F923CE35760E1B0106292E004B78B8197ECDE4EEC48D7A9D93)

**解决措施**

使用select、pickFirsts、pickLasts等配置选中要使用的so文件; select提供native产物的精准选择能力，优先级高于excludes、pickFirsts等配置项。pickFirsts、pickLasts按照.so文件的优先级顺序，打包最高优先级的.so文件，优先级顺序是指依赖收集的顺序，越晚被收集优先级越高。

具体可参考：[配置CPP](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-cpp)。

基于上面的例子，可以在entry的build-profile.json5中添加配置select选中har模块中的so文件，package选中包名为“har”的模块, include选中“libhar.so”文件。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/78/v3/63Xt26jwT6ybS0pkFG2U0w/zh-cn_image_0000002594634814.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=8882BCB566159903F5F5E53FB186A58B7449D5A8F8FF8A0848F962FE19FC3892)

#### 构建报错“input module releaseType is different”

**问题现象**

打包APP时，提示“input module releaseType is different”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/71/v3/2faZyN95TWSwf28mAO64Hg/zh-cn_image_0000002594634844.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=FB6596443BC9AE8FE50281367918264E0CB195C332EF33FD1B87D3871F84869B)

**解决措施**

根据报错日志的Warning信息所提示的模块名称，检查模块间的apiReleaseType字段是否一致。

该apiReleaseType字段由编译构建工具自动生成，保存在HAP/HSP包的module.json文件中。如下图所示，首先确认各模块间该字段是否一致，如果存在不一致的情况，需要将应用的各个模块，使用相同版本的SDK重新打包，然后打包APP。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/73/v3/xpmZt8T9RsyLfTkf5wCo7Q/zh-cn_image_0000002625074369.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=BC825CB697CBA0D98D76D8133D3594EDF9374426A17D08BD098FED7642C39566)

#### 构建报错“debug is different”

**问题现象**

打包APP时，提示“debug is different”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1d/v3/gCI11dUAR--V0bQlS3TYMQ/zh-cn_image_0000002594634784.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3314A7EDDAA56CCC2617D6E0D50C75967DDAA4EF619E934648B15DF56140B3AE)

**解决措施**

根据报错日志的Warning信息所提示的模块名称，检查模块间的debug字段是否一致，尤其需要关注本地模块和外部引用模块之间是否一致。

1.该debug字段由编译构建工具自动生成，保存在HAP/HSP包的module.json文件中，如下图所示，首先确认各模块间该字段是否一致。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/58/v3/VLr3dK_jR2eZeXksgewFug/zh-cn_image_0000002594474878.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=600729C37C23B293EBE728C3AD7B4AFB7D320E8370EB7D7FFE94380654516861)

2.编译工具根据设置的Build Mode选项生成debug标识，如图所示，可以通过此处进行设置。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/de/v3/SXS70pXnTuCBiBhiQVNbkw/zh-cn_image_0000002625074367.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=32A8495E3E21260FDC7989C2A50CCF52A97EE208FDD82AF64405D37EC32BA1ED)

#### 构建报错“proxy data is duplicated”

**问题现象**

打包APP时，提示“uri datashareproxy://bundleName/\*\* in proxy data is duplicated”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d7/v3/Gw35DzmWRkaMgwd0tZIiCA/zh-cn_image_0000002594474884.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=35C25C32036C83A106E16D65B1B9B0C605B5C3A0A0BEDCDD2F63E06B59CC105B)

**解决措施**

proxyData标识模块提供的数据代理列表，只允许entry和feature配置，不同的proxyData中配置的URI不可重复。遇到此问题，检查模块间是否配置了相同uri的proxyData。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0f/v3/D1u3iCc5ThKvNy6qKeAAHA/zh-cn_image_0000002594474872.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=7025F2A11FF0FA6F5699902C1F29515BA4714106040D5240106D4BBB7B42F4A7)

#### 编译报错“Init keystore failed: parseAlgParameters failed: ObjectIdentifier()”

**问题现象**

编译构建时，出现错误：Init keystore failed: parseAlgParameters failed: ObjectIdentifier()。

hap-sign-tool: error: ACCESS\_ERROR, code: 109. Details:   Init keystore failed: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)   Detail: Please check the message from tools

**错误原因**

使用高版本JDK生成密钥对(p12)，再使用低版本的JDK执行签名命令时，会因为不兼容导致解析p12失败，从而签名失败。

**场景**

1.  使用DevEco Studio生产密钥对时，DevEco Studio默认会调用软件内预置的JDK17，而用户使用本地的低版本JDK进行签名时则会报错。
2.  用户本地使用高版本JDK生成密钥对时，又通过DevEco Studio进行签名，DevEco Studio中预置的JDK17版本低于用户的JDK，导致报错。

**解决方案**

请检查当前使用的JDK版本和生产密钥对使用的JDK版本，使用版本匹配的JDK执行签名命令。

#### 编译报错“generate SignerBlock failed”

**问题现象**

编译构建时，出现错误：message:generate SignerBlock failed。

hap-sign-tool: error: {errorcode:0,message:generate SignerBlock failed}

**错误原因**

签名用的公私钥对不匹配，使用私钥签名后，用公钥验签失败。需保证私钥(keyalias)和公钥(appCertPath)配对使用。

**场景**

1.  本地生产签名材料时，未导出正确的keyalias对应的csr(证书请求文件)，导致生成证书时，公钥与keyalias对应的私钥不匹配。
2.  签名过程参数填写错误，使用了错误的keyalias或者appCertPath文件。

**解决方案**

请选择正确、配对的keyalias和appCertPath文件。

#### 编译报错“java.io.IOException: DerValue.getOID, not an OID 49”

**问题现象**

编译构建时，出现错误：java.io.IOException: DerValue.getOID, not an OID 49。

hap-sign-tool: error: ACCESS\_ERROR, code: 109. Details: java.io.IOException: DerValue.getOID, not an OID 49 Detail: Please check the message from tools

**报错原因**

证书文件解析失败，找不到证书的OID。

**场景**

1.  证书被篡改。
2.  appCertPath参数中传入了非证书文件。

**解决方案**

请检查证书文件是否正确。

#### 编译报错“JS heap out of memory”

**问题现象**

编译构建时，出现报错“JS heap out of memory“。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8f/v3/5p1oYS0pS2Wp03iJ-vwgpw/zh-cn_image_0000002594474902.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=0D2E1ADA814ACEBBBCDEE19E24748B6064BB07B3A4C03F0D76F2A836A860F905)

**解决措施**

出现该报错的原因是Hvigor运行时内存不足，在使用3.1.0及以上版本的Hvigor时，可通过以下方式修改Hvigor运行时内存的最大值。

勾选Enable the Daemon for tasks：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fb/v3/XpPX0X0ITza7ItENjYAUjQ/zh-cn_image_0000002594474896.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3B446CFBD593EE8B062FAD6881461CB6B233F2AED4118DE0DA45670FE070B819)

在hvigor-config.json5中修改maxOldSpaceSize字段，根据工程的大小，适当将其增大（如设置为8192）：

"nodeOptions": {
  "maxOldSpaceSize": 8192
}

#### Linux环境下编译报错“JS heap out of memory”

**问题现象**

在Linux环境下，系统内存有64G，Hvigorw脚本中配置--max-old-space-size=40960，在编译构建时，实际在使用内存未达到配置的内存（例如使用到20G左右）就出现报错“JS heap out of memory“。

FATAL ERROR: NewSpace::Rebalance Allocation failed - JavaScript heap out of memory
Writing Node.js report to file: report.20200512.172528.47517.24.011.json
Node.js report completed
1: 0xa295e0 node::Abort() \[node\]
2: 0x9782df node::FatalError(char const\*, char const\*) \[node\]
3: 0xb99c2e v8::Utils::ReportOOMFailure(v8::internal::Isolate\*, char const\*, bool) \[node\]
4: 0xb99fa7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate\*, char const\*, bool) \[node\]
5: 0xd3a3b5 \[node\]
6: 0xd74f27 \[node\]
7: 0xd84707 v8::internal::MarkCompactCollector::CollectGarbage() \[node\]
8: 0xd481b9 v8::internal::Heap::MarkCompact() \[node\]
9: 0xd48f0b v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) \[node\]
10: 0xd499a5 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) \[node\]
11: 0xd4aebf v8::internal::Heap::HandleGCRequest() \[node\]
12: 0xcf5f97 v8::internal::StackGuard::HandleInterrupts() \[node\]
13: 0x104b803 v8::internal::Runtime\_StackGuard(int, unsigned long\*, v8::internal::Isolate\*) \[node\]
14: 0x13a5a99 \[node\]
Aborted (core dumped)

**问题原因**

vm.max\_map\_count是一个与内核虚拟内存子系统相关的参数，用于控制进程可以拥有的内存映射区域的最大数量。它通常用于限制一个进程可以打开的文件数量，特别是在使用大量内存映射文件的情况下。

在Linux系统上，vm.max\_map\_count参数的默认值通常是较小的数值，例如65530。然而，对于一些需要大量内存映射的应用程序或者特定的使用场景，可能需要增加该参数的值，以便支持更多的内存映射区域。

**解决措施**

修改vm.max\_map\_count的值：

*   临时修改：
    
    sysctl -w vm.max\_map\_count=新值
    
*   永久修改：如果希望永久修改参数的值，可以编辑/etc/sysctl.conf文件，并添加或修改以下行：
    
    vm.max\_map\_count=新值
    
    保存文件后，使用以下命令使更改生效：
    
    sysctl -p
    

#### 编译报错“Cannot find module XXX or its corresponding type declarations”

*   **场景一：**
    
    **问题现象**
    
    Stage模板工程编译引用native文件(.so) 提示 "Cannot find module XXX or its corresponding type declarations."。
    
    **处理措施**
    
    当前Stage工程在编译构建阶段新增对native文件(.so)导出符号的语法校验，如果引用了没有对应声明文件(.d.ts)的native文件(.so)的现有工程在编译构建阶段，语法校验工具便会报错提示找不到对应的声明文件。
    
    如果出现类似问题，可尝试通过如下方式进行解决：
    
    1.  在对应cpp目录下新建types/libxxx目录，并在该目录下新增index.d.ts用于声明native的类型符号；新增oh-package.json5配置文件用于校验工具的模块查询。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c1/v3/YlCG_3LBQNqgFX3BR4_5mA/zh-cn_image_0000002624994235.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=EB754022BB5C570526A34122F90AFD2320627934F62FF040A4CB807BC461301E)
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/72/v3/HmFIfWmyS6yN5nrwQM0Zfw/zh-cn_image_0000002594634818.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=59C9AB6EFF603A7EBE14B021AA1D0D9C9958D72E5DB13E3D4271E3B8B540CA2A)
        
    2.  在native引用的模块内的oh-package.json5中添加native模块的本地依赖，并根据提示点击**Sync Now**同步工程，下图以entry模块引用native模块为例。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ad/v3/CVyk6qnwTKmHFkrXhzkbsQ/zh-cn_image_0000002594474886.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=45FDEEA4C8BA4D1252E91A5FFE30287EB02F80B4CE11B0FBBCB75C8FBE577F36)
        

*   场景二：
    
    **问题现象**
    
    引用三方包，构建失败，提示“Cannot find module 'xxx' or its corresponding type declarations”。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9a/v3/hvXU-4DsQAycG_tdykRJJw/zh-cn_image_0000002594474906.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=073040BDF4E5021F2F18F3930BDDF2F5F71B1F3FD6A54ABACBEBEF5C931E3CD8)
    
    **处理措施**
    
    进入对应模块级oh-package.json5文件或工程级oh-package.json5文件中查看三方包是否已安装，若未安装，需执行ohpm install安装；若已安装，需查看“main”字段是否配置正确，若未配置或配置错误，需配置为正确的入口文件。
    
*   场景三：
    
    **问题现象**
    
    引用的包路径被混淆，代码中又是在引用包后面拼接了路径，导致模块引用不到而报错。
    
    例如：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6a/v3/WxYAYqp0SP-tGThX69oreg/zh-cn_image_0000002624994221.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=4CD51C5A5E03537DBB5B41B346CE717217F6EF87A4569C9B6B598786AE65F650)
    
    代码中这样引用
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7f/v3/EdajKLZiQ-GJfNW3ivYFGQ/zh-cn_image_0000002624994271.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=03520BC9AF1AE42C9FFAA9DF3667A652C85FF2DAE8D9A503633834E5DE61F367)这样引用会找不到模块，导致报错。
    
    **处理措施**
    
    修改引用方式，改为推荐的引用方式
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5b/v3/GnR20R7JTom6oJ1IPovcEA/zh-cn_image_0000002594634838.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=BF36D99A27EF9D7BD47E8D0A0577D634D630225100823E4120DF35385126BC75)
    
*   场景四：
    
    **问题现象**
    
    被引用模块oh\_package.json5配置有误，执行了ohpm install 并且成功地安装了依赖，但是还报错模块找不到。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4b/v3/ryS-1rIYRDuCd-LwmDsv6A/zh-cn_image_0000002594634856.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=9540864EDFEADA761EF80FC195547590262D6529C0956C1D27CCA6B64DD6D61C)
    
    被引用模块的 oh\_package.json5 中配置了错误的types字段。
    
    该字段优先于main字段。 如果 types 字段配置的不存在，就会报错模块找不到。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/df/v3/X1iJRDIaRCiGQ-3CsOgEQw/zh-cn_image_0000002594474900.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=9169EEEFDAD85DD69F3AB0ACA765EA81B0DCFD3D1C79CF4115D15C0F5B12E1EE)
    
    **处理措施**
    
    如果该包中没有d.ets声明，则这个字段可以删除。配置不存在或者错误，会导致报错。
    
*   场景五：
    
    **问题现象**
    
    oh\_package.json5 中 dependencies 中引入模块的 名称 和 实际使用时 import 的 不一致。
    
    例如 在 oh\_package.json5 中这样引入：
    
    "dependencies": {   "har": "file:../har" }
    
    但是实际上在代码中import 的时候是 大写 HAR 或者其他而不是 dependencies 里面配置的 ‘har’ 的值，要注意保持完全一致。（目前windows 没有问题，linux会报错模块找不到）
    
    **处理措施**
    
    引入和使用改成一致。
    
*   场景六：
    
    **问题现象**
    
    引用模块的 oh\_package.json5 中 main 字段值和实际的文件名称大小写不一致。
    
    **处理措施**
    
    将main字段和实际文件名称的大小写改为一致。
    
*   场景七：
    
    **问题现象**
    
    Stage模板工程编译构建失败，提示 "Cannot find module '@bundle:rollup\_plugin\_ignore\_empty\_module\_placeholder' or its corresponding type declarations"。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4b/v3/AtdDA7wKS-ybu9bH23A-cw/zh-cn_image_0000002624994293.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=B01A9BE965BD1EF3BD7D8B39F53A98A907F15E63192311C12F6C265F463386B9)
    
    **解决措施**
    
    该问题是由于工程引用了无对应实现文件的.d.ts声明文件：
    
    1.  通过在build目录中搜索'rollup\_plugin\_ignore\_empty\_module\_placeholder'，找到报错的中间文件，并根据中间文件找到对应工程文件。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/46/v3/QKkGj_kbQlO6IxLLsd9G3g/zh-cn_image_0000002594474910.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=71984B3648BB96B2683440D0DCCAB8441388C257E67514A0CC12A745B30AFCBD)
        
        在输入栏中输入rollup\_plugin\_ignore\_empty\_module\_placeholder，找到问题模块的中间文件。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7c/v3/oFmW79G-QQWkMLfyBh8pbQ/zh-cn_image_0000002594634794.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3948656FAFE5B4605A5D9A171A2A368A600E67F05E9AC48DA16E0D9177A2AB41)
        
    
    2.  在引用类型文件中通过添加type显式声明符号类型引用：
        
        export type {T} from './type';
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fe/v3/SgPYsXlzQ1W_3JY60RXRQg/zh-cn_image_0000002594634852.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C9BF181616082FD69248692A63539BE2892C40027CDA3E058391AB7EFE6A5D68)
        
    
    3.  同时排查是否从d.ts/d.ets中引用值类型符号，禁止在声明文件中声明值变量。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c1/v3/4hj8oTWrQtWes2uag-M8Ug/zh-cn_image_0000002624994247.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=5264BD3FB0FAE7DE6ABF98EE41772D15341A6318F8DED94EBCCD030C8466E7F0)
        

#### 编译报错“Module 'xxx' has no exported member 'yyy'”

**问题现象**

Stage模板工程编译构建失败，提示 "Module 'xxx' has no exported member 'yyy'" 并且"yyy"符号是由export \* from 'x.js'语法从js文件中导出。

**处理措施**

当前Stage工程编译构建期的语法校验工具对js文件不作检查，因此当使用export \* from 'x.js'导出js文件中的符号时，符号引用处便会提示"Module 'xxx' has no exported member 'yyy'"的错误信息。

如果出现类似问题，可尝试通过如下方式进行解决：

*   方法1（推荐使用）： 使用符号显式导出语法，从js文件中re-export符号 。
    
    export { yyy } from 'x.js'
    

*   方法2：新增x.js对应的声明文件(.d.ts)，并在引用时不指定后缀。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7b/v3/1lBMzxdrQBy7nz_78sAT9A/zh-cn_image_0000002594474932.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3CC4D241C420DC207F49C29BC1D67D9698208C22B303FF55D06E55A8CA35B4F8)
    

#### 编译报错“Could not load ${file1} (imported by ${file2}): Maximum call stack size exceeded”

**问题现象**

Stage模板工程编译构建失败，提示 "ERROR: Could not load ${file1} (imported by ${file2}): Maximum call stack size exceeded"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a7/v3/pjWCttlxQOqsWnJrQN1cJQ/zh-cn_image_0000002594474934.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=E17EC6C327FBFCAFF85C5F0E0F412A35CCE477455935E508C8F3FC2979C8B6CE)

**处理措施**

该问题是由于file1为当前工程外的代码：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6c/v3/vgzonWZfQsCO93M9RolWLA/zh-cn_image_0000002594474930.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=34830D88CEB8AB05666DBFD16E09F8BB8206DA9BFA746E15B8348C304370FEB7)

请新建Static Library模块，并将工程外的代码迁移至Static Library模块内，并使用HAP引用HAR方式进行模块间引用。

#### 编译报错“Failed to get a resolved OhmUrl by filepath xx”

*   **场景一：**
    
    **问题现象**
    
    三方包在配置依赖时，配置到devDependencies，源码中又有引用依赖中的API时，编译失败。如以下示例：三方包@hms-security/ucs-appauth将依赖@network/gr配置在devDependencies中，源码中使用了@network/grs的API时，编译失败，提示“ERROR: ArkTS:ERROR Failed to get a resolved OhmUrl by filepath xxx”。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c3/v3/VEG5vaNKRlC__2uYyhOuKg/zh-cn_image_0000002594474936.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=8762C89CB47E34448974192247E7B877954AD114351DF8FB2C93BFB3C96369D3)
    
    **问题确认**
    
    1.  进入上面报黄色的源码文件中，可以看到依赖有红色告警信息。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7a/v3/bk0w_QcvRzW-YOIP14MCpA/zh-cn_image_0000002624994249.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=4F97A99D4B703C3EB6DDCB0DE4C24A3ECCE175A1B021ABEA039A42685D6FEF12 "点击放大")
        
    2.  进入包下的oh-package.json5文件，查看依赖配置为devDependencies。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6a/v3/dK0xs9EPSDKZzU7-8u2ZCw/zh-cn_image_0000002624994277.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=6D56F39FF19C36C45392DB90E1AEA600E1DF2BAB82537AE6944FFE3A9C731654)
        
    
    **处理措施**
    
    *   向此包开发团队提改进建议：运行时的依赖，不能配置在devDependencies中。
    *   可在依赖上层引入对应devDependencies中的三方包规避此问题。
    

*   **场景二：**
    
    **问题现象**
    
    DevEco Studio编译失败，提示“ERROR: ArkTS:ERROR Failed to get a resolved OhmUrl by filepath xxx”。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b5/v3/wdIjOJEkQJaYxCpEx641gA/zh-cn_image_0000002624994229.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=CBB3877613BA2C79C2D6714B899ACE40122E8C57F706D5A199DEAF2CD77FD33B)
    
    **问题确认**
    
    查看工程目录下的build-profile.json5文件中modules字段配置的srcPath路径是否与真实路径不相同，是否存在大小写不一致问题。
    
    **处理措施**
    
    将工程目录下的build-profile.json5文件中modules字段配置的srcPath路径与真实路径保持一致。
    
*   **场景三：**
    
    **问题现象**
    
    工程A以相对路径引用了工程B的模块，这种引用会导致报错。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6a/v3/sOF0Z1esTAWAIpAHACvcFQ/zh-cn_image_0000002594634826.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C771363D4DA5FE719B44A10FE348F465A60F0E3226D48361418BEA1281006443)
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/58/v3/FFsbm0MKTFSbCFWc5ODpew/zh-cn_image_0000002594634832.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=DC15C431E49A1323DD9E11D5B2CD1D6AC4B6B534A07E0BE98043E7B35236547B)![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c1/v3/35qmamszRrq1FRg13Y4KdA/zh-cn_image_0000002594634830.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=8D827C06FBF74C115AA602D7110579BF7E991B6D9F06B1DB0E7F731A49CD31BE)**处理措施**
    
    *   把工程B这种的har转至工程A里，作为A的一个模块引用。
    *   把工程B的har提前打包，在A中 以.har的方式引用。
    *   上传到仓库，以版本号的方式引用。
*   **场景四：**
    
    **问题现象**
    
    DevEco Studio编译失败，提示“Error Message: Failed to get a resolved OhmUrl for 'hvigor\_ignore\_xxxxx' imported by xxx”。
    
    **处理措施**
    
    如果hvigor\_ignore\_xxxxx所在的模块是一个har模块，需要排查oh\_package.json5中是否存在"packageType": "InterfaceHar"，如果存在，请删除"packageType": "InterfaceHar"。
    
*   **场景五：**
    
    **问题现象**
    
    DevEco Studio编译失败，提示“Failed to get a resolved OhmUrl for 'xxx' imported by 'yyy'”。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/87/v3/44gRmmpvQeS4vVuSkaaxQg/zh-cn_image_0000002594634812.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C97221ED4347869B602D5C42A0E4B07F1CD0925D26A7F3E500C0B1D5066F1588 "点击放大")
    
    **问题确认**
    
    1.  排查yyy所在模块是否为[字节码har](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-har#section16598338112415)，查看工程级build-profile.json5的useNormalizedOHMUrl是否为true（缺省默认值为false），如果为true则默认构建字节码har。
    2.  如果yyy所在模块是字节码har，请排查xxx依赖是否被配置在工程级oh\_package.json5的dependencies，但没有配置在yyy模块级oh\_package.json5的dependencies中。
    
    **处理措施**
    
    *   将xxx依赖配置到yyy模块oh\_package.json5的dependencies中。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/65/v3/uTpKOKsvSpSv0BDsxDj0ng/zh-cn_image_0000002594474890.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=1F2DE2731F19D86DE4081D2D301C08657F058129385CC6D88436BBE29EC0A66F "点击放大")
        
    *   将yyy模块改为非字节码har，在模块级build-profile.json5文件中添加byteCodeHar字段并设置为false。
        
        "buildOption": { 
          "arkOptions": { 
            "byteCodeHar": false
          }
        }
        
*   **场景六：**
    
    请确认当前使用的DevEco Studio和SDK版本是配套的，点击菜单栏**Help > About DevEco Studio**，**Help > About HarmonyOS SDK**分别查看配套的DevEco Studio和SDK版本。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ef/v3/FDSrpsMJQue8TGv97eEwLQ/zh-cn_image_0000002594474938.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=9D2427E81C14C5094FB05448AA48231D84FA4A562846209E1E3490DF5AD741E3)
    
*   **场景七：**
    
    **问题现象：**
    
    DevEco Studio编译失败，提示 "ERROR: ArkTS:ERROR failed to execute es2abc ERROR: ArkTS:ERROR Failed to get a resolved OhmUrl by filepath xxx"。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/35/v3/pyd0kDufTSiXbidgF9ieHw/zh-cn_image_0000002594474894.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=9F4679ACE08790A22E5D52A33A41C54B75AE76A0D0C774DE5EB495DCC5ED7CEB)
    
    **处理措施**
    
    该问题是由于在工程中引用了非工程标准模块目录（即目录内无模块描述文件module.json5），如下图utils目录所示：请新建Static Library模块，并将utils/common里面的代码迁移至Static Library模块内，并使用HAP引用HAR方式进行模块间引用。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ab/v3/hzahySPSRHalJY51IuaXkQ/zh-cn_image_0000002625074377.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=D1065E7AF3F1D7226622972E5606ECF7D675A7771578F07BA4F1101287416F71)
    

#### 编译报错“Property xxx does not exist on type 'typeof BuildProfile'.”

**问题现象****1**

使用了自定义参数BuildProfile，编译态无异常但编译构建失败，提示“Property xxx does not exist on type 'typeof BuildProfile'.”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2a/v3/5uA6mnh9Su2ZEYL6NgJ1lg/zh-cn_image_0000002594474918.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=A0BBD79773E22C29D99760A85F5381245D949B09595ED656062C4EB8BE2AEC53)

**处理措施**

检查在当前模块下build-profile.json5中的targets > buildProfileFields配置的自定义参数中key值是否相同，如果不同请将targets内所有buildProfileFields中的key值保持相同。

以下为导致编译报错的**错误**配置示例：

"targets": \[
  {
    "name": "default",
    "config": {
      "buildOption": {
        "arkOptions": {
          "buildProfileFields": {
            "targetName": "default"
          }
        }
      }
    }
  },
  {
    "name": "default1",
    "config": {
      "buildOption": {
        "arkOptions": {
          "buildProfileFields": {
            "targetName1": "default1"
          }
        }
      }
    }
  },
\]

请将targets内所有buildProfileFields中的key值修改一致，如以下示例：

"targets": \[
  {
    "name": "default",
    "config": {
      "buildOption": {
        "arkOptions": {
          "buildProfileFields": {
            "targetName": "default"
          }
        }
      }
    }
  },
  {
    "name": "default1",
    "config": {
      "buildOption": {
        "arkOptions": {
          "buildProfileFields": {
            **"targetName"**: "default1"
          }
        }
      }
    }
  },
\]

**问题现象2**

使用了自定义参数BuildProfile并且编译器标红且构建失败，提示“Property xxx does not exist on type 'typeof BuildProfile'.”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ba/v3/mu9dc_DgQuGes1fP9EGGew/zh-cn_image_0000002625074363.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=ECBBB1D5693E729EFC9C36989D90973413CBD9E6427EFAFAE74905048F3CA80B)

**处理措施**

请检查当前模块下build-profile.json5中buildProfileFields内是否添加了所使用的自定义参数，请确保该自定义参数已配置在buildProfileFields内。

#### C++工程编译导致电脑卡顿的处理建议

**问题现象**

在执行代码规模较大的C++工程的编译时，由于C++编译时的CPU占用率较高，可能出现电脑卡顿、反应迟缓等现象。

**处理措施**

如果出现类似问题，可尝试通过如下方式进行解决：

打开模块下的build-profile.json5文件，在**arguments**参数中添加如下配置。并根据电脑CPU配置，修改compile和link的值。建议compile和link的值之和，设置为CPU核数的一半，如CPU为8核，则compile和link分别设置为2。

"arguments": "-DCMAKE\_JOB\_POOL\_COMPILE:STRING=compile -DCMAKE\_JOB\_POOL\_LINK:STRING=link -DCMAKE\_JOB\_POOLS:STRING=compile=2;link=2",

需要说明的是，修改了compile和link的值，可能会导致编译时长增加，请耐心等待。

#### CPP编译报错"A 'undefined symbol' error has occurred"

**问题现象**

在编译HarmonyOS C++ 项目时，报错提示"A 'undefined symbol' error has occurred"。

**解决措施**

"undefined symbol"错误通常表示链接器找不到特定符号的定义。这通常是因为源文件没有正确编译或链接，或者因为缺少必要的库文件。以下是如何定位和解决这个问题的步骤：

1\. 确保所有源文件都已包含在 CMake 构建中。

首先，检查您的 CMakeLists.txt 文件，确保所有相关的源文件都已包含在项目中。

**示例 CMakeLists.txt**

cmake\_minimum\_required(VERSION 3.10) 
project(MyProject)  
set(CMAKE\_CXX\_STANDARD 17)  
include\_directories(${CMAKE\_CURRENT\_SOURCE\_DIR}                    
                    ${CMAKE\_CURRENT\_SOURCE\_DIR}/include)  
\# 添加所有源文件
add\_library(myProgram SHARED main.cpp myLibrary.cpp) 

2\. 确认源文件的符号定义。

确保在所有相关的源文件中正确定义了符号。例如，检查 myLibrary.cpp 是否包含 myFunction 的定义：

**myLibrary.cpp**

#include "myLibrary.h" 
void myFunction() {     
// Function implementation
}

**myLibrary.h**

#ifndef MY\_LIBRARY\_H
#define MY\_LIBRARY\_H 
void myFunction();  
#endif 

3\. 检查编译和链接顺序。

确保所有源文件和库文件按照正确的顺序进行编译和链接。CMake 和 Ninja 通常会处理这个问题，但在手动编译时可能会出现问题。

4\. 清理和重新生成构建文件。

有时，构建文件可能会损坏或丢失符号定义。尝试清理构建目录并重新生成构建文件：

hvigorw clean 1 

或手动删除模块下.cxx目录。

5\. 检查库路径和链接器标志。

如果使用三方库，确保 CMakeLists.txt 中正确配置了库路径和链接器标志。例如：

cmake\_minimum\_required(VERSION 3.10) 
project(MyProject)  
set(CMAKE\_CXX\_STANDARD 17)  
\# 确保添加三方库的头文件
include\_directories(${PATH\_TO\_EXTERNAL\_LIBRARY}
                    ${PATH\_TO\_EXTERNAL\_LIBRARY}/include)  
\# 添加源文件
add\_library(myProgram SHARED main.cpp myLibrary.cpp)  
\# 链接三方库
target\_link\_libraries(myProgram PUBLIC /path/to/external/library) 

6\. 启用详细编译和链接输出。

为了解详细的编译和链接过程，可以启用更详细的输出。在 CMakeLists.txt 中添加以下内容：

set(CMAKE\_VERBOSE\_MAKEFILE ON)

7\. 检查 Ninja 输出日志。

Ninja 默认生成 .ninja\_log 文件，其中包含构建过程的详细信息。您可以检查这个日志文件以了解构建过程中的问题。

cat {module}/.cxx/default/default/arm64-v8a/.ninja\_log 

检查编译日志中是否存在符号所在的源文件或头文件。

8\. 使用 nm 工具检查符号。

使用 nm 工具检查目标文件和库文件中的符号，确保符号定义存在。

可使用sdk中内置的nm工具：sdk/default/openharmony/native/llvm/bin/llvm-nm。

**检查目标文件**

nm myLibrary.o | grep myFunction 

**检查三方库文件**

nm /path/to/external/library | grep myFunction

**结论**

通过上述步骤，您可以定位和解决 error: undefined symbol 问题。在使用 CMake、Ninja 和 LLVM 编译 C++ 项目时，确保所有源文件和库文件正确包含在项目中，并正确配置编译和链接选项是关键。如果问题依旧存在，详细的编译和链接输出日志通常能提供更多线索，帮助您找到具体的原因。

#### CPP编译报错"A 'unknown type name' error has occurred"

**问题现象**

在编译HarmonyOS C++ 项目时，报错提示"A 'unknown type name' error has occurred"。

**解决措施**

在编译HarmonyOS C++ 项目时，遇到"unknown type name"错误通常表示编译器无法识别某个类型。这可能是因为类型未定义、未包含相关的头文件，或者包含的头文件路径不正确。以下是定位和解决这个问题的步骤：

1.  检查是否包含头文件。
    
    确保所有必要的头文件都已正确包含在源文件中。例如，如果您正在使用某个自定义类型或库提供的类型，请确保在使用该类型的文件中包含了相关的头文件。
    
    **示例：**
    
    // main.cpp
    #include "myLibrary.h" 
    int main() {
         MyType obj;
         // 使用自定义类型
         return 0;
    }
    
    // myLibrary.h
    #ifndef MY\_LIBRARY\_H
    #define MY\_LIBRARY\_H
    class MyType {
    public:
         MyType() {}
         void doSomething();
    };
    #endif
    
2.  检查头文件路径。
    
    确保 CMakeLists.txt 中正确设置了头文件的搜索路径。可以通过 include\_directories 添加头文件目录。
    
    **示例 CMakeLists.txt：**
    
    cmake\_minimum\_required(VERSION 3.10) 
    project(MyProject)  
    set(CMAKE\_CXX\_STANDARD 17)  
    \# 添加头文件目录
    include\_directories(${CMAKE\_SOURCE\_DIR}/include)  
    \# 添加源文件
    add\_library(myProgram SHARED src/main.cpp src/myLibrary.cpp) 
    
3.  清理和重新生成构建文件。
    
    有时，构建文件可能会损坏或丢失符号定义。尝试清理构建目录并重新生成构建文件：
    
    hvigorw clean
    
    或手动删除模块下.cxx目录。
    
4.  启用详细编译输出。
    
    为了解详细的编译过程，可以启用更详细的输出。在 CMakeLists.txt 中添加以下内容：
    
    set(CMAKE\_VERBOSE\_MAKEFILE ON) 
    
5.  检查编译输出日志。
    
    Ninja 默认生成 .ninja\_log 文件，其中包含构建过程的详细信息。你可以检查这个日志文件以了解构建过程中的问题。
    
    cat .cxx/default/default/arm64-v8a/.ninja\_log
    
6.  使用 CMake 的 message 函数调试。
    
    可以在 CMakeLists.txt 文件中添加 message 函数来打印一些调试信息，以确保路径和变量正确设置。
    
    **示例：**
    
    message(STATUS "Source directory: ${CMAKE\_SOURCE\_DIR}") 
    message(STATUS "Include directories: ${CMAKE\_INCLUDE\_PATH}") 
    
7.  如果报错接口是系统API，请查阅对应API参考的起始版本，确认接口在当前版本是否可用。

**结论**

通过上述步骤，您可以定位和解决 unknown type name 问题。在使用 CMake、Ninja 和 LLVM 编译 C++ 项目时，确保所有头文件正确包含并设置正确的头文件路径是关键。如果问题依旧存在，详细的编译输出日志通常能提供更多线索，帮助您找到具体的原因。

#### JDK版本不匹配导致编译失败

**问题现象**

通过命令行方式构建HarmonyOS应用或元服务过程中出现构建失败，现象如下图所示。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/94/v3/-RXVTAfJR_-2S6QCvbgyLg/zh-cn_image_0000002594474924.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=261A644DCF376E8641B9684923030933CF322BB5BDA62C8DFD98CA53337B5ED0)

**解决措施**

该问题是由于JDK版本不匹配导致，当前配套的版本为JDK 17。因此，请根据如下方法进行修正：

1.  下载并安装JDK 17版本。
2.  修改JAVA\_HOME环境变量，取值修改为JDK 17。如果是Linux系统，可参考使用命令行方式构建元服务或应用的[配置JDK章节](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-command-line-building-app#section195447475220)。

#### LABEL\_VALUE\_ERROR处理指导

**问题现象**

在工程同步、编译构建过程中，提示**LABEL\_VALUE\_ERROR**错误信息。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/07/v3/79W2F_72SKGqmdZaw3wwgA/zh-cn_image_0000002594634858.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=A96DE0CF6DE7D156CBF2A803714971019C13EEF02A5DFF73F2B7BD885FD26568)

**解决措施**

该问题是由于config.json文件的资源引用规则变更导致，需要将“label”字段的取值，修改为资源引用方式。

1.  在**resources > base > element**中的string.json中添加对应的字符串信息。
2.  然后在config.json中重新引用该字符串资源。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/52/v3/F8ei9tOzTeOF5kilQyAQDA/zh-cn_image_0000002624994291.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=FC37A8694A83C31132EECA4CDD5F80D14B79DF75454FE564ADA3AE6A351F2E82)
    

#### 应用/元服务的启动界面信息缺失，提示"Schema validate failed"报错

**问题现象**

在工程同步或者编译构建时出现错误，提示“Schema validate failed”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ef/v3/N15LipoLQmGO_h0-L0tKkw/zh-cn_image_0000002625074365.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=8CB84560E59DC49F5873D3E49296636F37146EFF7242A1FA475891949AEF07C4)

**解决措施**

在开发应用/元服务时，可以设置应用/元服务的启动界面的图标及背景颜色，创建工程后自动设置了默认的启动界面信息，但若开发者误删其中某个字段后将导致报错。下面以重新设置启动界面信息为例，开发者可自定义启动界面的图标及背景颜色。

在开发应用/元服务时，为了提升应用/元服务冷启动的性能，您可以通过如下方式设置应用/元服务的启动界面的图标及背景颜色。

1.  在模块下的**resources > base > element**下，点击右键选择**New > Element Resource File**创建资源文件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/bf/v3/_Mf1MCAqSua7S4vGenIniQ/zh-cn_image_0000002625074361.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=5B448ED579FA00607D5F3105C6D22A80C81B4043F328F304F0DAC2A433144C29)
    
2.  在弹出的对话框中，“File name”开发者可自定义，如color；“Root element”请选择**color。**
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8c/v3/JINKazZLSYyWAdPmo7kRoA/zh-cn_image_0000002594634816.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=CAC1BC87C24DCA192843794A4200119C64A5043A37A758D035EF4B13BB389515)
    
    创建完成后，color.json文件如下图所示：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0d/v3/B4pUCe-oQDa9Uk0X0Jp8pw/zh-cn_image_0000002624994225.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=ACD05BAEE9D74A6966F8B4C582736F058B5D472897406B653385A5B803557626)
    
3.  将[2](#li124901748185712)创建的color.json文件拷贝至模块的**ohosTest > resources > base > element**目录下。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2e/v3/PbIFcFejQQa1_zDvAJaWLg/zh-cn_image_0000002625074393.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=D5255C51EB7A9DEEA69D45C68B95F2E1DE8B5FB5ABFAE2DD1F45403B8169FFDB)
    
4.  在模块的**src > main > module.json5**文件的abilities数组中，添加startWindowIcon和startWindowBackground字段（若缺少任一字段，将出现ERROR: Schema validate failed报错）。其中，startWindowIcon字段索引模块下**resources > base > media**中的图标资源，startWindowBackground字段索引**resources > base > element** **> color.json**中的color。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1a/v3/wKSpHD3vTCWqp4zv8khDEw/zh-cn_image_0000002594634854.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C4D647FEDEB207B607E177538EB5D8331CC4F5675E7762867F76D9B453CCBC83)
    
5.  在**src > ohosTest > module.json5**文件的abilities数组中，加startWindowIcon和startWindowBackground字段。其中，startWindowIcon字段索引模块ohosTest下**resources > base > media**中的图标资源， startWindowBackground字段索引**resources > base > element** **> color.json**中的color。

#### 编译报错“Schema validate failed”

**问题现象**

DevEco Studio编译时出现错误，提示“Schema validate failed”错误信息。

**解决措施**

出现该问题的原因是配置文件中字段缺失或拼写错误，可根据报错的详细信息进行问题定位。

如将module.json5文件中abilities标签中的“name”错写为“nam”，报错信息如下：

	 Detail: Please check the following fields.
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'required',
  params: { missingProperty: 'name' },
  message: "must have required property 'name'",
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'required',
  params: { missingProperty: 'srcEntrance' },
  message: "must have required property 'srcEntrance'",
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'required',
  params: { missingProperty: 'name' },
  message: "must have required property 'name'",
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'oneOf',
  params: { passingSchemas: null },
  message: 'must match exactly one schema in oneOf',
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'enum',
  params: {
    allowedValues: \[
      'priority',
      'name',
      'srcEntrance',
      'srcEntry',
      'launchType',
      'description',
      'icon',
      'label',
      'permissions',
      'metadata',
      'visible',
      'exported',
      'skills',
      'backgroundModes',
      'continuable',
      'startWindowIcon',
      'startWindowBackground',
      'removeMissionAfterTerminate',
      'orientation',
      'supportWindowMode',
      'maxWindowRatio',
      'minWindowRatio',
      'maxWindowWidth',
      'minWindowWidth',
      'maxWindowHeight',
      'minWindowHeight',
      'excludeFromMissions'
    \]
  },
  message: 'must be equal to one of the allowed values',
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 
{
  instancePath: 'module.abilities\[0\]',
  keyword: 'propertyNames',
  params: { propertyName: 'nam' },
  message: 'property name must be valid',
  location: 'D:/MyApplication/entry/src/main/module.json5:15:8'
} 

以上述报错为例，说明报错中关键词的含义，便于开发者理解报错信息，完成问题定位及修改。

*   instancePath：错误所在的文件位置。'module.abilities\[0\]'表示在module.json5文件中的第一个abilities。
*   keyword：标识当前报错字段的可选配属性，当前报错中包括'required'、'oneOf'、'enum'、'propertyNames'。
    *   required：表示该字段为必选配置项。由于缺失或拼写错误导致该属性未配置。
    *   oneOf：表示当前配置不符合oneOf要求。通过instancePath已经确认报错出现在abilities标签，在DevEco Studio中，按住Ctrl点击"abilities"跳转到对应的module.json文件，可以查看到必须配置以下两组中的一组。根据对比排查，可识别到因拼写错误导致"name"属性未配置。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d8/v3/Mdu1r3_NS4uVGRMHi0Qttw/zh-cn_image_0000002624994279.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=169015CD00B7EEF6AA514DABB20BB3FB208CA06A12EE8878AA6373A48F69862C)
        
    *   enum：该标签内所有可配置的属性。开发者可根据枚举值确认属性的正确写法。
    *   propertyNames：如果字段拼写错误将出现propertyNames，propertyName: 'nam'指明“nam”为错误属性。
*   params：不同keyword对应不同的详细说明，如keyword为'required'时，params的missingProperty: 'name' 表示缺失的属性为“name”。
*   message：修改要求的说明，如keyword为'required'时，message表示必须配置name属性。
*   location：错误的具体位置，点击可以跳转。

#### 编译报错“No available entry module found”

**问题现象**

DevEco Studio编译时出现错误，提示“No available entry module found”错误信息。

**解决措施**

feature模块中需要配置依赖的entry模块，DevEco Studio在编译时会校验feature模块所依赖的entry模块是否存在，出现该问题的原因可能为以下情况：

1.  在feature模块的build-profile.json5文件中，entryModules字段配置的名称与实际entry模块的名称不一致。请将entryModules字段的值修改为entry模块的名称；
2.  在项目级build-profile.json5文件的modules字段中，feature模块位于entry模块之前。由于DevEco Studio在进行编译时会按照从前往后的顺序进行配置，当配置feature模块时，尚未读取和配置entry模块，则会报entry模块不存在的错误。请在modules字段中将feature模块置于所依赖的entry模块之后。

#### 编译报错“keystore password was incorrect”

**问题现象**

DevEco Studio编译时出现错误，提示“keystore password was incorrect”错误信息。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d6/v3/Yvz8Lo1iT62Rb4XF9rhxBw/zh-cn_image_0000002594474862.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=069A85FEC8DBE0966D8FE0F69E362AB52547BA9269C692E8B163FA41FDF7009B)

**报错原因**

密钥库(p12)密码错误。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c6/v3/OVmCvbv6ToqapOpl0Cq02w/caution_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=E0155B1329B491358B1659BB440E00239B838114A9E4D7C7F314649FC4EFC5B4)

**密钥库密码**和**密钥密码**是在创建p12文件时由开发者自行输入的，请牢记该密码。DevEco Studio工程的build-profile.json5文件中有记录密码的密文，但签名工具需要输入密码明文，不能直接将build-profile.json5中的值用到签名工具中。

**常见场景**

1.  密码输入错误。
2.  命令行中需要输入真实密码，误输入了加密后的密码。
3.  密钥(keyAlias)密码和密钥库(p12)密码记混。

**解决措施**

出现该问题的原因是签名文件中签名密码错误。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/cc/v3/tAauBs-bR4O7Gy3P1owVbQ/zh-cn_image_0000002624994245.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=24532420B2AC6AE4A0BA76398F6053701313B869E60367D171EE0C9619C8E528)

开发者可通过重新自动签名解决该问题：

1\. 点击**File > Project Structure > Project > Signing Configs**，打开签名配置页面。

2\. 勾选“Automatically generate signature”，等待重新签名，然后点击**OK**即可。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/27/v3/e8ZrVQACQGqtDoLoI8AoLg/zh-cn_image_0000002594634828.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=D68529F2B8F016E9F615294793B2365CFD6F7642D7C8A8BF0F324812BA56510C)

#### 编译报错“please check deviceType or distroFilter of the module”

**问题现象**

DevEco Studio编译时出现错误，出现如下提示之一：

*   Module: (xxx) and Module: (xxx) are entry, please check deviceType or distroFilter of the module.
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/87/v3/eKSGpb7NSKO92-s1SNOdXQ/zh-cn_image_0000002594634850.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=502CD2F1A7428745551AC53188E2C12F85BB42EB72BF76CCC68E9805FC26D382)
    
*   Module: (xxx) and Module: (xxx) have the same moduleName, please check deviceType or distroFilter of the module.
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7b/v3/Ph12K0s8S1-B2X5qdr1T_Q/zh-cn_image_0000002625074415.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=E1B6EEE494C6E4E356577054D141521B5040B6DF3494633CACE8E2EF64EE0DAB)
    
*   Module: (xxx) and Module: (xxx) have the same packageName, please check deviceType or distroFilter of the module.
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c5/v3/LpZeTJ0bS9KpKXvOxSYfbw/zh-cn_image_0000002625074419.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=1996B786D6C2FCD47544DF60E4F7B7BA56EDE74CAC260CE91161F40E1B06F7DD)
    
*   Module: (xxx) and Module: (xxx) have the same ability name.
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f6/v3/M_190WW4TBWKJEKftuQzaw/zh-cn_image_0000002594634792.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=06B736A38CFDC43A4B1A6D5D78ADB0D6A48787180067574686EE2A58C34886D3)
    

**解决措施**

出现该问题的原因是打包时工程未满足HAP唯一性校验逻辑，请根据[HAP唯一性校验逻辑](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-verification-rule)修改工程，满足校验逻辑即可正常打包。

#### 编译报错“Failed to generate test project build system”

**问题现象**

执行多模块native模块构建时，提示“Failed to generate test project build system.”错误信息。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/af/v3/BBlKRcjiRvS-WUIvRmrFiQ/zh-cn_image_0000002594474920.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=2267DD7B43FCE9440292F75377363AF43E927F38479E4145A05B5C472D1EEFB1)

**解决措施**

请删除报错模块下的.cxx文件夹，然后选中需要构建的模块，执行**Make Module** **${moduleName}**完成单独构建，避免同时构建多个模块。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a5/v3/i6N_npSYSLyx_5A-6hk8ag/zh-cn_image_0000002594634804.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=14A8101D6BF49B780465E3FF6E21874B58DB9949187D220F3EAD089F268D9978)

#### C/C++项目三方依赖库未打包入HAP

**问题现象**

C/C++项目依赖三方so时，在打包生成HAP后，发现三方so未打包到HAP中。

**解决措施**

当前DevEco Studio对C/C++项目三方so的寻址方式有限，如出现三方so未打包到HAP中，请尝试修改so引入方式。

1.  定义一个别名（如jsbind\_shared\_lib\_tracing），代表将要引入的三方so。
2.  使用SHARED IMPORT将三方so定义为动态引入。
3.  使用IMPORTED\_LOCATION定义引入so的具体位置。
4.  将定义的三方so声明给目标。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8d/v3/j-NqtgUFQq269KIMSyYmXg/zh-cn_image_0000002624994253.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=AF12D99B66A7534486D55AF8C6C7137CD6A4B4E03DD8EFC84DCFA24260F9D593)
    
5.  再次打包生成HAP，确认三方so是否打包到HAP中。

#### Static Library模块中src/main/cpp目录下的文件未打包进HAR

**问题现象**

点击**Build > Make Module ${libraryName}**编译构建生成HAR后，发现构建产物中未出现cpp目录下的文件。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ef/v3/U1-_vDXsSWCwoZZT3BZ6AQ/zh-cn_image_0000002624994285.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=AF53AF3BDE05E6F6B103BD13CEB01A60E751355908246FF291D1A3C8A6D8DA46)

**解决措施**

如果使用的Hvigor为2.5.0-s及以上版本，在编译构建HAR的过程中，只会将dependencies内处于本模块路径下的本地依赖也打包进.har文件中，devDependencies里的依赖不会打包进.har文件中。

请将相应的本地依赖移至dependencies中后重新编译。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/56/v3/cVKBD089RJCr1EF5qsz59Q/zh-cn_image_0000002594474892.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=46E0D87223D4E75BAEE856C77C4F8DA618F939512C6AB168083264D62FB6232E)

#### 工程编译告警提示“ArkTS:WARN: For details about ArkTS syntax errors”

**问题现象**

工程构建时，提示“ArkTS:WARN: For details about ArkTS syntax errors, see FAQs”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a1/v3/QeCFxGmVQjCjMvcO7iBwAw/zh-cn_image_0000002625074413.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=299B7012848800C8CAE944E507FD0B9BF10087C63BFF6A602CDE033CFE4782D6)

**解决措施**

出现该告警说明当前工程存在不符合ArkTS语法规范的写法，请根据ERROR报错中括号内的语法规则如(arkts-no-var)，查看[从TypeScript到ArkTS的适配规则](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/typescript-to-arkts-migration-guide#使用let而非var)中对应的说明，修改为ArkTS规范写法。

#### 编译报错“ninja: error: mkdir(xxx): No such file or directory”

**问题现象**

Native工程编译报错，同时出现以下告警和报错信息。

出现工程目录长度超过250字符的告警，示例如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2f/v3/vMuDnTMnTE-m72eGKRhIUA/zh-cn_image_0000002625074421.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=092D35A89F3C0191874FAC7172987BD1D33CEE0273C150375228ACC6A74C9884 "点击放大")

出现编译报错“ninja: error: mkdir(xxx): No such file or directory”，示例如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/bc/v3/_N7n9PXQSui5ic_Edb6_vg/zh-cn_image_0000002624994275.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=E23E128EA64D651FF48577746642235EC830271C6FA3DFAA29C7AC470CE6CE93 "点击放大")

**解决措施**

CMAKE\_OBJECT\_PATH\_MAX默认大小为250，如果工程中object file实际路径长度超出该大小，将导致编译报错。

开发者需要根据object file实际路径长度在工程CMakeLists.txt中设置CMAKE\_OBJECT\_PATH\_MAX大小，具体方法如下：

*   方法一： 通常在CMAKE\_OBJECT\_PATH\_MAX默认值基础上增加一个文件名长度即可。
    
    示例中告警文件为TextMeasureCache.cpp.obj，长度为24字符，在默认值250的基础上增加24，即设置set(CMAKE\_OBJECT\_PATH\_MAX 274)
    
*   方法二：根据object file实际路径长度计算CMAKE\_OBJECT\_PATH\_MAX大小。
    
    计算公式：CMAKE\_OBJECT\_PATH\_MAX = 总路径长度 - object file中目录部分长度 + cmake哈希值字符数（固定为32）
    
    *   总路径长度 = object file directory长度 + object file长度，object file directory、object file如下图所示，两个长度之和为297字符，以实际为准
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e4/v3/Olb0IZEmQqK8cb6DS-d_Fw/zh-cn_image_0000002625074389.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=91482C23BC19B3E4B0E60A5B5ABF511BDF9C8AC49D56970E0F968954C6A667A6 "点击放大")
        
    *   object file中目录部分长度：示例中“\_\_/\_\_/\_\_/\_\_/\_\_/third-party/rn/ReactCommon/react/renderer/textlayoutmanager”长度为74字符，以实际为准
    *   cmake哈希值字符数：cmake将长路径转换为哈希值时哈希值的长度，固定为32
    
    代入示例中的长度后，计算可得：CMAKE\_OBJECT\_PATH\_MAX = 297 - 74 + 32 = 255，即设置set(CMAKE\_OBJECT\_PATH\_MAX 255)
    

#### 编译报错“(is the command line too long?)”

**问题现象**

Native工程编译报错，同时出现以下告警和报错信息。

出现工程目录长度超过250字符的告警，示例如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/3a/v3/Ht7Wnp4lRCyOvCH9MtLV9w/zh-cn_image_0000002624994273.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=A3119593CF2FB05BBB65926879B645614A4F3035124781DF0D6986BA520860FF "点击放大")

出现编译报错“(is the command line too long?)”，示例如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0d/v3/ci6-xq55Q0-hdP2ZeEkBUg/zh-cn_image_0000002594634842.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=BF6D51A6B51D9044F4E99035B9584FF99B0B74C88000CA7BA43F71CDA3E52FAF)

**解决措施**

CMAKE\_OBJECT\_PATH\_MAX默认大小为250，如果工程中object file实际路径长度超出该大小，将导致编译报错。

开发者需要根据object file实际路径长度在工程CMakeLists.txt中设置CMAKE\_OBJECT\_PATH\_MAX大小，具体方法如下：

*   方法一： 通常在CMAKE\_OBJECT\_PATH\_MAX默认值基础上增加一个文件名长度即可。
    
    示例中告警文件为TextMeasureCache.cpp.obj，长度为24字符，在默认值250的基础上增加24，即设置set(CMAKE\_OBJECT\_PATH\_MAX 274)
    
*   方法二：根据object file实际路径长度计算CMAKE\_OBJECT\_PATH\_MAX大小。
    
    计算公式：CMAKE\_OBJECT\_PATH\_MAX = 总路径长度 - object file中目录部分长度 + cmake哈希值字符数（固定为32）
    
    *   总路径长度 = object file directory长度 + object file长度，object file directory、object file如下图所示，两个长度之和为297字符，以实际为准
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/53/v3/WcwdiN36T76rnoscFfHxoA/zh-cn_image_0000002625074417.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C7F7A5DC4C6E6F483E8E3062F266FE4153308458A9AC81A2D48F3F9252829238 "点击放大")
        
    *   object file中目录部分长度：示例中“\_\_/\_\_/\_\_/\_\_/\_\_/third-party/rn/ReactCommon/react/renderer/textlayoutmanager”长度为74字符，以实际为准
    *   cmake哈希值字符数：cmake将长路径转换为哈希值时哈希值的长度，固定为32
    
    代入示例中的长度后，计算可得：CMAKE\_OBJECT\_PATH\_MAX = 297 - 74 + 32 = 255，即设置set(CMAKE\_OBJECT\_PATH\_MAX 255)
    
*   方法三：若设置CMAKE\_OBJECT\_PATH\_MAX后，仍然报相同错误，需要修改工程存放目录，将其存放在较短的目录下。
    
    设置CMAKE\_OBJECT\_PATH\_MAX后，cmake会将长路径转换为32字符的哈希值以缩短路径长度，如果转换后的路径依然过长，只能缩短工程的存放路径。
    

#### 编译报错“CMake Error: The following variables are used in this project, but they are set to NOTFOUND”

**问题现象**

Native工程中使用find\_path时出现以下报错信息。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/80/v3/bwSCzUbST6K1e12lLzLQSA/zh-cn_image_0000002624994223.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3C1B30749ED60F21A94E5308E63FE418B1D1847C60CDD2F079EE251C8EFEB584 "点击放大")

**解决措施**

OpenHarmony SDK提供的CMake交叉编译配置文件（ohos.toolchain.cmake）中，限制了搜索路径为CMAKE\_SYSROOT。

如果开发者需要添加搜索路径，可在CMakeLists.txt中使用list接口添加自定义路径，如将"D:demo"添加至搜索路径：

list(APPEND CMAKE\_FIND\_ROOT\_PATH\_MODE\_INCLUDE "D:demo")

添加后，即可使用find\_path查找"D:demo"目录下的文件。

#### 编译报错 “Unknown resource name”

*   场景一

**问题现象**

工程中模块A引用了模块B，编译模块A时出现错误，提示 "Unknown resource name 'xxxx'"，找不到模块B的资源。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8f/v3/0lyUT9SmT-i76uVyWYmjwg/zh-cn_image_0000002624994297.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=3BEE5794CB94B7DDEB7E8557BB71C0A96F0EDB275BEE5FC9F15FC3A3E6E56266 "点击放大")

**解决措施**

请确保符合以下条件：

1.  资源需放置在目录resource/base路径下。
2.  模块B已安装。
3.  模块A中不能使用相对路径引用模块B的资源，应直接通过定义的模块名称来引用。

*   场景二

**问题现象**

引用模块的方式不对，如果引用的是一个其他模块的代码，也会报资源找不到。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e1/v3/NpZsVgkhSP2scKPHjiEf-g/zh-cn_image_0000002594634824.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C816D32A42A8CAE518043D349AFC79969937D2171204C10B2E0A73BC6B0DAE01)![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/74/v3/zET-FbTeSviPNkVTDTcMcg/zh-cn_image_0000002594474880.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=5D8D30CEA7F6588329F374C59685F070CC661E1C001C9053502E7244A40F5BAE)

**解决措施**

在oh\_package.json5中引入该模块。通过定义的模块名称来引用。

如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f9/v3/F0MGZZioRY-bL4kQHxBT4w/zh-cn_image_0000002624994227.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=64EDC319F151ED1F70DBEC234180C2214AA2B5CA7201F34DF9A0E9EAFB759BB6)

*   场景三

**问题现象**

HSP A 申请了某个权限，这个权限进行了资源的引用，在所有依赖A的组件进行构建时，报错 A 引用的资源找不到。

**解决措施**

手动在引用方配置对应资源可以解决此问题。

#### 构建报错“Task xxx was not found in the project xxx”

**问题现象**

命令行手动执行构建命令时，构建失败，提示“Task xxx was not found in the project xxx”

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b3/v3/CclzticXR1-A2zfsmT6q6g/zh-cn_image_0000002594474898.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=DADDA523F19E94DE465FDF72EBA083D7BEA343D7BA7178D93EDE02039C2E752B)**问题确认**

1.  执行hvigorw tasks命令，查看对应命令是否存在。
2.  查看对应工程中module.json5文件中“type”字段是否为命令执行模块。比如图中执行assembleHar命令，是对工程中的har模块进行打包，若module.json5文件中的“type”字段不是"har"类型，则会出现上述错误提示。

**解决措施**

1.  执行正确命令。
2.  查看对应工程中module.json5文件中“type”字段类型，执行对应命令。

#### 编译报错“The reason and usedScene attributes are mandatory for user\_grant permissions”

**问题现象**

DevEco Studio编译失败，提示“The reason and usedScene attributes are mandatory for user\_grant permissions”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/28/v3/A18aeemzRw2Ss9CDTGIZ6g/zh-cn_image_0000002625074431.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=D54A22380FC57B96FB3D9FBA8C7540883D4C3E5BBCC5A244C930B0908CCAD93B "点击放大")

**问题原因**

从DevEco Studio NEXT Developer Preview2版本开始新增规则：APP包中，所有entry和feature hap的module下的requestPermissions权限清单必须指定(可以缺省为空，若非空则name必填,user\_grant权限则必填reason、usedScene字段)。

**解决措施**

进入对应module.json5文件中，补齐requestPermissions字段下的reason和usedScene字段。如以下示例：

"requestPermissions": \[
  {
    "name": "ohos.permission.READ\_IMAGEVIDEO",
    "reason": "$string:module\_desc",
    "usedScene": {
      "abilities": \[
        "EntryAbility"
      \],
      "when": "inuse"
    }
  }
\]

#### 编译报错“Only one default card can be configured in the form\_config.json file”

**问题现象**

DevEco Studio编译失败，提示“Only one default card can be configured in the form\_config.json file”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/55/v3/_YbWc2NlQvSpIkqs5onhhg/zh-cn_image_0000002594474904.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=74C6E53600DBE416EC12496562BB5350C643152A8E8F01DA78A7D11965164A23 "点击放大")

**问题原因**

从DevEco Studio NEXT Developer Preview2版本开始新增规则：卡片的配置文件中isDefault不可缺省，每个UIAbility有且只有一个默认卡片。

**解决措施**

进入对应module.json5文件中，选择唯一默认卡片，将其他卡片的isDefault字段设置为false。

#### 编译报错“In the form\_config.json file, if the value of the updateEnabled field is true, the updateDuration and scheduleUpdateTime fields cannot be both empty”

**问题现象**

DevEco Studio编译失败，提示“In the form\_config.json file, if the value of the updateEnabled field is true, the updateDuration and scheduleUpdateTime fields cannot be both empty.”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/37/v3/pPTJSYuVQDGZgszvZCtFfw/zh-cn_image_0000002594474888.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=1006C64363FF0BF0F527A1479F6D3110A040E56AE096BAD617B1BF508AE518F5 "点击放大")

**问题原因**

从DevEco Studio NEXT Developer Preview2版本开始新增规则：卡片的配置文件中updateEnabled不可缺省，为true时可以在定时刷新（updateDuration）和定点刷新（scheduledUpdateTime）两种方式任选其一，当两者同时配置时，定时刷新优先生效。

**解决措施**

进入对应module.json5文件中，按照需求，选择配置updateEnabled为false，或者增加定时刷新（updateDuration）和定点刷新（scheduledUpdateTime）两种方式配置。

#### 编译报错“The path XX is not writable. please choose a new location”

**问题现象**

在mac上，通过直接打开dmg中的DevEco Studio，构建报错 The path XX is not writable. please choose a new location.”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d3/v3/tlvEI4QBQLmTHdJzvcEo6A/zh-cn_image_0000002625074429.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=7812EA7F0C1074911987A411BD1507FD68FCB17CB0F6980D54B7B02D70D9CCEC)

**问题原因**

在mac上直接打开dmg 中的DevEco Studio，是会以只读的方式打开的，内置到DevEco Studio里面的文件是没有写权限的。

**解决措施**

将“DevEco-Studio.app”拖拽到“Applications”中，先安装再使用。

#### 编译报错“Property 'XX' does not exist on type 'typeof BuildProfile'”

**问题现象**

本地HSP模块对外提供的接口中使用了HAP未定义的自定义参数BuildProfileFileds，且HAP引用了HSP中的该接口，导致编译失败，提示“Property 'XX' does not exist on type 'typeof BuildProfile'”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2d/v3/xAGCdjRWQKC43yFGB7F38A/zh-cn_image_0000002594634840.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=C0FEC1E96381A08AFC142A10DDFD387192AAACD336EFA97ADC95F4CBD71B428B)

**解决措施**

可采用以下两种方式解决该问题：

*   在HAP中配置与HSP相同的自定义参数BuildProfileFileds。
*   将与HSP相同的自定义参数BuildProfileFields配置到工程级build-profile.json5中，该方法会使HSP中的自定义参数在全局生效。

#### 编译报错“The useNormalizedOHMUrl settings of packages xxx and the project useNormalizedOHMUrl: xxx do not match”

**问题现象**

编译报错“The useNormalizedOHMUrl settings of packages xxx and the project useNormalizedOHMUrl: xxx do not match”。

**解决措施**

[useNormalizedOHMUrl](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-profile-app#section13181758123312) 为true的时候ohmurl使用的是新的拼接和解析方式，不能和旧的ohmurl混用，会导致运行时无法识别。

可采用以下两种方式解决该问题：

*   将报错的依赖包的工程级build-profile.json5中的useNormalizedOHMUrl修改为与当前工程一致，重新生成依赖包并替换（useNormalizedOHMUrl缺省默认值为false）。
    
    {
      "app": {
        "products": \[
          {
             "buildOption": {
               "strictMode": {
                 "useNormalizedOHMUrl": true
               }
             }
          }
        \]
      }
    }
    
*   如果与工程不一致的依赖包较多，建议修改工程的工程级build-profile.json5中的useNormalizedOHMUrl值以及替换其它的不一致的依赖包。

如果修改了useNormalizedOHMUrl仍无法解决，表明当前hsp包是本地包，需要以本地hsp包的形式引入，请在工程下的build-profile.json5中的modules中添加报错hsp模块，示例如下：

"modules": \[
  {
    name: "hsp",   // 引用的hsp包依赖
    srcPath: "../MyApplication\_stageB/hsp",   // 引用的hsp包的路径（绝对和相对都可以）
  }
\]

#### 如何配置oh-package.json5动态依赖

oh-package.json5文件中：

*   dependencies（生产依赖）：声明需要在代码中import的三方库（参与编译/运行阶段使用的依赖）。
*   devDependencies（开发依赖）：参与项目的开发或测试阶段。
*   dynamicDependencies（动态依赖）：动态依赖的HSP模块。在开发者需要动态加载HSP的时候配置使用。

示例如下，详细内容可参考[oh-package.json5文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-oh-package-json5)和[添加依赖项](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-dependencies)。

{
  "name": "parameter-test",
  "version": "@param:version", 
  "description": "test desc.",
  "main": "index.ets",
  "author": "test author",
  "license": "ISC",
  "dependencies": {
    "libtest1": "@param:dependencies.libtest1"
  },
  "devDependencies": {
    "libtest2": "@param:devDependencies.libtest2"
  },
  "dynamicDependencies": {
    "libtest3": "@param:dynamicDependencies.libtest3"
  },
  "parameterFile": '.parameterFile/parameterFile.json5' // 开启参数化并指定参数化配置文件路径
}

#### 如何解决SDK与镜像不匹配导致abc文件无法正常运行的问题

**问题现象**

当SDK版本与镜像版本不匹配时，应用将会闪退，出现jscrash，同时hilog出现日志。

**解决措施**

现象根本原因是SDK工具与镜像版本不匹配。推荐使用匹配的SDK与镜像版本。

查看SDK版本方法：

在DevEco Studio安装路径下的sdk路径中，执行 {sdk.dir}/openharmony/ets/build-tools/ets-loader/bin/ark/build-win/bin/es2abc.exe --bc-version可查看SDK版本号。用于检验SDK与镜像版本是否匹配。

#### 如何解决编译报错“Could not resolve 'xxx' from”，但'xxx'目录存在的问题

**问题现象**

编译报错：“Could not resolve 'xxx' from”，但'xxx'目录存在，目录下存在Index文件。

**问题原因**

在引用目录时，编译时自动拼接小写的index文件，而目录中是大写的Index文件，在编译大小写敏感时，找不到index文件，则报错。

**解决措施**

在引用'xxx'目录时，明确写明引用到'xxx/Index'文件。

#### 用户目录下没有npmrc文件

**问题现象**

新建项目报错 Error: The hvigor depends on the npmrc file. Configure the npmrc file first。

**问题原因**

在用户目录下没有 .npmrc 文件。

**解决措施**

在用户目录下创建.npmrc文件，配置如下信息：

registry=https://repo.huaweicloud.com/repository/npm/
@ohos:registry=https://repo.harmonyos.com/npm/

#### 如何解决编译报错“ Error: 'icon' value \`$media:icons\` invalid value.”的问题

**问题现象**

编译报错“ Error: 'icon' value \`$media:icons\` invalid value”。

ERROR: Failed :entry:default@CompileResource...
ERROR: Tools execution failed.
Error: ref \`$media:icons\` don\`t be defined.
Error: 'icon' value \`$media:icons\` invalid value.
at D:\\project\\process\_profile\\default\\module.json
Detail: Please check the message from tools.

**报错原因**

引用的资源不存在时，编译报错指向的文件路径是build目录。

**常见场景**

1.  资源文件未添加。
2.  资源文件被意外删除。

**解决方案**

根据报错的资源id全局搜索，查看报错的资源是否存在。

#### 如何解决编译报错“Error: cJSON\_Parse failed, please check the JSON file.”的问题

**问题现象**

编译报错“Error: cJSON\_Parse failed, please check the JSON file”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b1/v3/rZSmjleYSCGQR8xwRBak1Q/zh-cn_image_0000002594634822.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=84FAD6DE2751F0EB1573CF14BA0CB3BCD38807FBA06B7C8AFC6E665F91D81186 "点击放大")

**报错原因**

module.json文件格式不正确。

**常见场景**

1\. json文件内末尾多了逗号。

2\. 根标签不是大括号{}。

**解决方案**

检查报错指向的json文件格式，比如是否末尾多了逗号，根标签是否为大括号{}。

#### 如何解决编译报错“Error: the name 'XXX' can only contain \[a-zA-Z0-9\_\].”的问题

**问题现象**

编译报错“Error: the name 'XXX' can only contain \[a-zA-Z0-9\_\]”。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/60/v3/xJTPjJBdSESFhjRGV3MgJg/zh-cn_image_0000002594634800.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=35C270B7FDD477FB1329CA36E9505CA33B2B3AA2F632367294720CC506F8E5A9)

**解决方案**

检查文件名是否合法，文件名只能包含大小写字母、数字、下划线。

#### 如何解决三方包require语句报错

**问题现象**

当引入三方包时编译报错。

**报错原因**

部分三方包由npm迁移而来，其开发环境为node， 其中的require语法arkcompiler不完全支持，出现运行报错情况。

**场景1**：

// Module/src/test.json
{a: 1, b: 2}
//use.js
let test = require("Module/src/test.json")

**需修改为：**

// Module/src/test.js
module.exports = {a: 1, b: 2}
//use.js
let test = require("Module/src/test")

**场景2：**

// Module/package.json
...
main: "./src"
...
// use.js
let module = require("Module")

**需修改为：**

// Module/package.json
...
main: "./src/index.js"
...
// use.js
let module = require("Module")

**场景3：**

编译出现warning信息：

Plugin node-resolve: preferring built-in module 'util' over local alternative at '/Users/~/Documents/fe-module/demo/node\_modules/util/util.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning

**解决方案**

修改rollup 配置文件，rollup.config.js中修改 preferBuiltins 字段：

plugins: \[ 
  resolve({ 
    preferBuiltins: false,    // true 或 false
    mainFields: \['module', 'main'\], 
    extensions
  })
\];

**场景4：**

import {Buffer} from 'buffer'

**需修改为：**

import {Buffer} from 'buffer/'

#### 如何解决编译报错“Indexed access is not supported for fields(arkts-no-props-by-index)”的问题

**问题现象**

动态调用类或者接口的字段，导致编译报错出现：Indexed access is not supported for fields(arkts-no-props-by-index)。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/3b/v3/aA4faK0vRqqJSwz1swNK2w/zh-cn_image_0000002594474882.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=F0E54FBAC929DA94BDE0309085DFA7B71FFBB21DC8F2679CE5EC3BF0E9CFAA2F)

**解决方案**

修改代码：

getValue(breakpoint: string): T {
    return Reflect.get(this.options, breakpoint) as T;
}

#### 如何解决编译报错“Declaration merging is not supported(arkts-no-decl-merging)” 或 “Cannot redeclare block-scoped variable 'xxx'”的问题

**问题现象**

在不同的文件中声明相同变量或者interface、enum等类型，DevEco Studio不报错，但是编译报错。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a0/v3/xK7AiXyeR8mEvwa8NWSQvA/zh-cn_image_0000002594474922.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=2B78016B850E918F7278A255D80BBD151DEBB3EFF9EB97FB4D8E15AB2DDF200C)

**解决方案**

如果文件中不包含export关键字，该文件将视作全局命名空间的一部分，相当于两个文件实质为同一个文件。请添加export关键字使其成为独立命名空间，或者将声明的内容添加到自定义的命名空间中。

#### 如何解决编译报错“ The inferred type of 'xxx' cannot be named without a reference to 'xxx'. This is likely not portable. A type annotation is necessary**.**”的问题

**问题现象**

编译报错"The inferred type of 'xxx' cannot be named without a reference to 'xxx'. This is likely not portable. A type annotation is necessary"。

**问题原因**

HSP会生成.d.ts声明文件，由于原始文件中未注明类型，导致生成的.d.ts文件缺少类型注解。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/df/v3/1vV46FxpRwiI1pbiH0zLBQ/zh-cn_image_0000002594474874.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=686950EE853D65C606E5D16577D10462915F6667396A9D6FC670B2021E6A22A0 "点击放大")

**解决方案**

报错位置添加类型注解。

#### 如何解决编译报错“ERROR: ArkTS Compiler Error ERROR: /bin/sh: "xxxx/es2abc": Operation not permitted”的问题

**问题现象**

编译报错“ERROR: ArkTS Compiler Error ERROR: /bin/sh: "xxxx/es2abc": Operation not permitted”。

**问题原因**

由于获取SDK的方式是从网络上下载，mac的安全设置会给可执行文件添加来源于网络的标识（com.apple.quarantine），导致无法执行。

**解决方案**

执行命令删除可执行文件的com.apple.quarantine标识。

xattr -d com.apple.quarantine /path/to/es2abc

#### 如何解决编译报错“Cannot add xxxx items to index”的问题

**问题现象**

编译报错“Cannot add xxxx items to index”。

**问题原因**

被编译文件中某函数内部有大量object literal, array literal和string，导致item的数量超过了上限（65536）。

**解决方案**

排查相关文件，将存在上述原因的函数进行拆分。

#### 编译初始化报错“resource busy or locked, open 'xxx\\outputs\\build-logs\\build.log'”

**问题现象**

在升级DevEco Studio至5.0.3.403版本后，打开旧工程概率性报错：resource busy or locked, open 'xxx\\outputs\\build-logs\\build.log'。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b9/v3/2FV8WfSwQ_qhQo2q12r4fQ/zh-cn_image_0000002594634782.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=9ECF93EE1129ADF710A782156B8C39DCB2B1561F00F0C143F5F4B97A78030CFB)

**问题原因**

初始化时日志写入存在冲突，.hvigor目录中的build-log文件被占用导致了该报错。

**解决方案**

*   方法一：点击编辑器窗口上方的Sync Now。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5e/v3/tP6zOz0aS3u4_3Fo17Q5EA/zh-cn_image_0000002594474908.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=AD8E360E78AB1A438F6A0D5056C6D681D5DCFE4A01D7FDA96F2E5AA1556E2196)
    
*   方法二：点击工具栏**File > Sync and Refresh Project**。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9b/v3/vs7ZcZC-TRqnMrq64IoA3A/zh-cn_image_0000002625074425.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=A2465C8F671B54BBA1EC5D881CCE28139750D1884E636FF482E96C64B77BE53A)
    
*   方法三：如果方法1、2无法解决问题，可以手动删除工程目录下的.hvigor目录后重启执行Sync。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/62/v3/AVQPLBiwQIWe_AOXp2PjZw/zh-cn_image_0000002594474870.png?HW-CC-KV=V1&HW-CC-Date=20260612T073910Z&HW-CC-Expire=86400&HW-CC-Sign=BA933AA639B4407532CFA83942725FFDC65CEB8CEF94596F378B2210A5E7E398)
    

#### Mac环境下加载动态库，签名拦截导致未生效

**问题现象**

Mac环境下，在DevEco项目开发时，build-profile.json5中添加了如下的插桩配置，但是插桩功能未生效。

"transformLib": "<相对模块根路径的动态库路径，以./开头>"

**判断与验证**

1.  进入sdk中es2abc所在目录：\[DevEco-Studio安装目录\]/Contents/sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build-mac/bin。
2.  执行下列命令：
    
    ./es2abc --merge-abc --transform-lib <动态库路径> <测试js文件路径>
    
3.  如果提示类似如下报错信息，原因可能是es2abc和动态库文件不属于一个签名组。
    
    os::library\_loader::Load error: dlopen(..., 0x0001): 
    tried: '...' (code signature in <...> '...' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.)
    
4.  用下面命令查看es2abc和动态库文件的签名组信息，如果两个文件，一个有签名信息，一个没有签名信息，或者都有签名信息，但是签名信息中属性'TeamIdentifier'的值是不一样的，那就说明问题是签名组不一致导致的，可以使用"解决方案"提供的方式处理。
    
    codesign -dv --verbose=1 <es2abc路径>
    codesign -dv --verbose=1 <动态库路径>
    

**解决方案**

执行下列命令，将es2abc文件的签名替换成和动态库文件一样的用户签名。

codesign --remove-signature <es2abc路径>
codesign -s - -v <es2abc路径>