如何办理编译过程内存过高
题目现象
编译构建时,内存或CPU占用过高,导致出现DevEco Studio运行卡顿、延迟等现象。
办理措施
- 在并行模式下执行hvigor构建,默认会有5个worker线程同时执行编译,且在编译的过程中,会在内存中添加一些缓存对象,用于提高后续增量编译的效率。
可以在hvigor-config.json5中添加配置。
- "properties": {
- // 配置为0,表示不启用内存缓存配置,默认为4,数值越低,内存中缓存数据越少
- "hvigor.pool.cache.capacity": 0,
- // 默认配置为cpu核数-1, 包含ohos.arkCompile.maxSize4,值越小,占用内存越少
- "hvigor.pool.maxSize" : 5,
- // 默认配置值为5, 值越小,占用内存越少
- "ohos.arkCompile.maxSize": 3,
- // 默认配置值为true, 表示开启内存缓存,占用内存较多,配置为false,关闭内存缓存,占用内存较少
- "hvigor.enableMemoryCache": false
- },
复制代码 说明
当配置项"hvigor.pool.maxSize"和"ohos.arkCompile.maxSize"的值改小,"hvigor.enableMemoryCache"改为false后,大概会导致编译时长增长,请耐心等待。
- 假如以上修改没有取得明显的效果,可以利用非并行的模式来执行编译。
- 在菜单栏点击“File > Settings > Build, Execution, Deployment > Build Tools > Hvigor”,取消勾选“Execute tasks in parallel mode (may require larger heap size)”。
- 流水线场景中,在命令行末了增长 --no-parallel,示例:
- hvigorw assembleHap --no-parallel
复制代码 说明
利用非并行模式编译,内存占用会减少,但大概会导致编译时长增长,请耐心等待。
构建报错“Cannot read properties of undefined(reading ‘xxx’)”
题目现象
编译构建时,出现报错“Cannot read properties of undefined(reading ‘xxx’)”。
办理措施
打开堆栈信息排查hvigorconfig.ts文件和hvigorfile.ts文件里的代码,内里是否利用了未界说的属性。
堆栈打开方法:项目根目录/hvigor/hvigor-config.json5文件中配置如下内容:
- "debugging": {
- "stacktrace": true /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */
- },
复制代码 假如上述文件中并未排查出题目,请及时向我们提单反馈。
请按照如下步骤举行操作:[提单链接],在线提单->HarmonyOS应用->应用工具平台->DevEco Studio。
构建报错“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就会出现报错。
办理措施
利用select、pickFirsts、pickLasts等配置选中要利用的so文件; select提供native产物的精准选择能力,优先级高于excludes、pickFirsts等配置项。pickFirsts、pickLasts按照.so文件的优先级顺序,打包最高优先级的.so文件,优先级顺序是指依赖收集的顺序,越晚被收集优先级越高。
基于上面的例子,可以在entry的build-profile.json5中添加配置select选中har模块中的so文件,package选中包名为“har”的模块, include选中“libhar.so”文件。
构建报错“input module releaseType is different”
题目现象
打包APP时,提示“input module releaseType is different”。
办理措施
根据报错日志的Warning信息所提示的模块名称,查抄模块间的apiReleaseType字段是否一致。
该apiReleaseType字段由编译构建工具自动生成,保存在HAP/HSP包的module.json文件中。如下图所示,起首确认各模块间该字段是否一致,假如存在不一致的情况,需要将应用的各个模块,利用相同版本的SDK重新打包,然后打包APP。
构建报错“debug is different”
题目现象
打包APP时,提示“debug is different”。
办理措施
根据报错日志的Warning信息所提示的模块名称,查抄模块间的debug字段是否一致,尤其需要关注当地模块和外部引用模块之间是否一致。
1.该debug字段由编译构建工具自动生成,保存在HAP/HSP包的module.json文件中,如下图所示,起首确认各模块间该字段是否一致。
2.编译工具根据设置的Build Mode选项生成debug标识,如图所示,可以通过此处举行设置。
构建报错“proxy data is duplicated”
题目现象
打包APP时,提示“uri datashareproxy://bundleName/** in proxy data is duplicated”。
办理措施
proxyData标识模块提供的数据代理列表,只允许entry和feature配置,不同的proxyData中配置的URI不可重复。遇到此题目,查抄模块间是否配置了相同uri的proxyData。
编译报错“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失败,从而署名失败。
场景
- 利用DevEco Studio生产密钥对时,DevEco Studio默认会调用软件内预置的JDK17,而用户利用当地的低版本JDK举行署名时则会报错。
- 用户当地利用高版本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)配对利用。
场景
- 当地生产署名材料时,未导出正确的keyalias对应的csr(证书请求文件),导致生成证书时,公钥与keyalias对应的私钥不匹配。
- 署名过程参数填写错误,利用了错误的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。
场景
- 证书被篡改。
- appCertPath参数中传入了非证书文件。
办理方案
请查抄证书文件是否正确。
编译报错“JS heap out of memory”
题目现象
编译构建时,出现报错“JS heap out of memory“。
办理措施
出现该报错的原因是hvigor运行时内存不足,在利用3.1.0及以上版本的hvigor时,可通过以下方式修改hvigor运行时内存的最大值。
勾选Enable the Daemon for tasks:
在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文件,并添加或修改以下行:
保存文件后,利用以下命令使更改生效:
编译报错“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)的现有工程在编译构建阶段,语法校验工具便会报错提示找不到对应的声明文件。
假如出现类似题目,可尝试通过如下方式举行办理:
- 在对应cpp目录下新建types/libxxx目录,并在该目录下新增index.d.ts用于声明native的范例符号;新增oh-package.json5配置文件用于校验工具的模块查询。
- 在native引用的模块内的oh-package.json5中添加native模块的当地依赖,并根据IDE提示点击Sync Now同步工程,下图以entry模块引用native模块为例。
- 场景二:
题目现象
引用三方包,构建失败,提示“Cannot find module ‘xxx’ or its corresponding type declarations”。
处置惩罚措施
进入对应模块级oh-package.json5文件或工程级oh-package.json5文件中查看三方包是否已安装,若未安装,需执行ohpm install安装;若已安装,需查看“main”字段是否配置正确,若未配置或配置错误,需配置为正确的入口文件。
- 场景三:
题目现象
引用的包路径被肴杂,代码中又是在引用包后面拼接了路径,导致模块引用不到而报错。
例如:
代码中这样引用
这样引用会找不到模块,导致报错。
处置惩罚措施
修改引用方式,改为推荐的引用方式。
- 场景四:
题目现象
被引用模块oh_package.json5配置有误,执行了ohpm install 而且成功地安装了依赖,但是还报错模块找不到。
被引用模块的 oh_package.json5 中配置了错误的types字段。
该字段优先于main字段。 假如 types 字段配置的不存在,就会报错模块找不到。
处置惩罚措施
假如该包中没有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”。
办理措施
该题目是由于工程引用了无对应实现文件的.d.ts声明文件:
- 通过在build目录中搜索’rollup_plugin_ignore_empty_module_placeholder’,找到报错的中间文件,并根据中间文件找到对应工程文件。
在输入栏中输入rollup_plugin_ignore_empty_module_placeholder,找到题目模块的中间文件。
- 在引用范例文件中通过添加type显式声明符号范例引用:
- export type {T} from './type';
复制代码
- 同时排查是否从d.ts/d.ets中引用值范例符号,克制在声明文件中声明值变量。
编译报错“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),并在引用时不指定后缀。
编译报错“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”。
处置惩罚措施
该题目是由于file1为当前工程外的代码:
请新建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 an resolved OhmUrl by filepath xxx”。
题目确认
- 进入上面报黄色的源码文件中,可以看到依赖有红色告警信息。
- 进入包下的oh-package.json5文件,查看依赖配置为devDependencies。
处置惩罚措施
- 向此包开辟团队提改进建议:运行时的依赖,不能配置在devDependencies中。
- 可在依赖上层引入对应devDependencies中的三方包规避此题目。
- 场景二:
题目现象
DevEco Studio编译失败,提示“ERROR: ArkTS:ERROR Failed to get a resolved OhmUrl by filepath xxx”。
题目确认
查看工程目录下的build-profile.json5文件中modules字段配置的srcPath路径是否与真实路径不相同,是否存在大小写不一致题目。
处置惩罚措施
将工程目录下的build-profile.json5文件中modules字段配置的srcPath路径与真实路径保持一致。
- 场景三:
题目现象
工程A以相对路径引用了工程B的模块,这种引用会导致报错。
处置惩罚措施
- 把工程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’”。
题目确认
- 排查yyy地点模块是否为字节码har,查看工程级build-profile.json5的useNormalizedOHMUrl是否为true(缺省默认值为false),假如为true则默认构建字节码har。
- 假如yyy地点模块是字节码har,请排查xxx依赖是否被配置在工程级oh_package.json5的dependencies,但没有配置在yyy模块级oh_package.json5的dependencies中。
处置惩罚措施
- 将xxx依赖配置到yyy模块oh_package.json5的dependencies中。
- 将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版本。
- 场景七:
题目现象:
DevEco Studio编译失败,提示 “ERROR: ArkTS:ERROR failed to execute es2abc ERROR: ArkTS:ERROR Failed to get a resolved OhmUrl by filepath xxx”。
处置惩罚措施
该题目是由于在工程中引用了非工程标准模块目录(即目录内无模块描述文件module.json5),如下图utils目录所示:
请新建Static Library模块,并将utils/common内里的代码迁徙至Static Library模块内,并利用HAP引用HAR方式举行模块间引用。
编译报错“Property xxx does not exist on type ‘typeof BuildProfile’.”
题目现象 1
利用了自界说参数BuildProfile,编译态无非常但编译构建失败,提示“Property xxx does not exist on type ‘typeof BuildProfile’.”。
处置惩罚措施
查抄在当前模块下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’.”。
处置惩罚措施
请查抄当前模块下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"错误通常表示链接器找不到特定符号的界说。这通常是由于源文件没有正确编译或链接,大概由于缺少须要的库文件。以下是如何定位和办理这个题目的步骤:
起首,查抄您的 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 SAHRED main.cpp myLibrary.cpp)
复制代码 确保在所有相关的源文件中正确界说了符号。例如,查抄 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
复制代码 确保所有源文件和库文件按照正确的顺序举行编译和链接。CMake 和 Ninja 通常会处置惩罚这个题目,但在手动编译时大概会出现题目。
偶然,构建文件大概会破坏或丢失符号界说。尝试清理构建目录并重新生成构建文件:
或手动删除模块下.cxx目录。
假如利用三方库,确保 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 SAHRED main.cpp myLibrary.cpp)
- # 链接三方库
- target_link_libraries(myProgram PUBLIC /path/to/external/library)
复制代码 为相识详细的编译和链接过程,可以启用更详细的输出。在 CMakeLists.txt 中添加以下内容:
- set(CMAKE_VERBOSE_MAKEFILE ON)
复制代码 Ninja 默认生成 .ninja_log 文件,此中包罗构建过程的详细信息。您可以查抄这个日志文件以相识构建过程中的题目。
- cat {module}/.cxx/default/default/arm64-v8a/.ninja_log
复制代码 查抄编译日志中是否存在符号地点的源文件或头文件。
利用 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"错误通常表示编译器无法辨认某个范例。这大概是由于范例未界说、未包罗相关的头文件,大概包罗的头文件路径不正确。以下是定位和办理这个题目的步骤:
确保所有须要的头文件都已正确包罗在源文件中。例如,假如您正在利用某个自界说范例或库提供的范例,请确保在利用该范例的文件中包罗了相关的头文件。
示例:
- // 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
复制代码 确保 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)
复制代码 偶然,构建文件大概会破坏或丢失符号界说。尝试清理构建目录并重新生成构建文件:
或手动删除模块下.cxx目录。
为相识详细的编译过程,可以启用更详细的输出。在 CMakeLists.txt 中添加以下内容:
- set(CMAKE_VERBOSE_MAKEFILE ON)
-
复制代码 Ninja 默认生成 .ninja_log 文件,此中包罗构建过程的详细信息。你可以查抄这个日志文件以相识构建过程中的题目。
- cat .cxx/default/default/arm64-v8a/.ninja_log
复制代码 可以在 CMakeLists.txt 文件中添加 message 函数来打印一些调试信息,以确保路径和变量正确设置。
示例:
- message(STATUS "Source directory: ${CMAKE_SOURCE_DIR}")
- message(STATUS "Include directories: ${CMAKE_INCLUDE_PATH}")
复制代码 结论
通过上述步骤,您可以定位和办理 unknown type name 题目。在利用 CMake、Ninja 和 LLVM 编译 C++ 项目时,确保所有头文件正确包罗并设置正确的头文件路径是关键。假如题目依旧存在,详细的编译输出日志通常能提供更多线索,帮助您找到具体的原因。
JDK版本不匹配导致编译失败
题目现象
通过命令行方式构建HarmonyOS应用或元服务过程中出现构建失败,现象如下图所示。
办理措施
该题目是由于JDK版本不匹配导致,当前配套的版本为JDK 17。因此,请根据如下方法举行修正:
- 下载并安装JDK 17版本。
- 修改JAVA_HOME环境变量,取值修改为JDK 17。
LABEL_VALUE_ERROR处置惩罚引导
题目现象
在工程同步、编译构建过程中,提示LABEL_VALUE_ERROR错误信息。
办理措施
该题目是由于config.json文件的资源引用规则变动导致,需要将“label”字段的取值,修改为资源引用方式。
- 在resources > base > element中的string.json中添加对应的字符串信息。
- 然后在config.json中重新引用该字符串资源。
应用/服务的启动界面信息缺失,提示"Schema validate failed"报错
题目现象
在工程同步大概编译构建时出现错误,提示“Schema validate failed”。
办理措施
在开辟应用/服务时,可以设置应用/服务的启动界面的图标及背景颜色,创建工程后自动设置了默认的启动界面信息,但若开辟者误删此中某个字段后将导致报错。下面以重新设置启动界面信息为例,开辟者可自界说启动界面的图标及背景颜色。
在开辟应用/服务时,为了提升应用/服务冷启动的性能,您可以通过如下方式设置应用/服务的启动界面的图标及背景颜色。
- 在模块下的resources > base > element下,点击右键选择New > Element Resource File创建资源文件。
- 在弹出的对话框中,“File name”开辟者可自界说,如color;“Root element”请选择color。
创建完成后,color.json文件如下图所示:
- 将[2]创建的color.json文件拷贝至模块的ohosTest > resources > base > element目录下。
- 在模块的src > main > module.json5文件的abilities数组中,添加startWindowIcon和startWindowBackground字段(若缺少任一字段,将出现ERROR: Schema validate failed报错)。此中,startWindowIcon字段索引模块下resources > base > media中的图标资源,startWindowBackground字段索引resources > base > element > color.json中的color。
- 在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"属性未配置。
- 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模块是否存在,出现该题目的原因大概为以下情况:
- 在feature模块的build-profile.json5文件中,entryModules字段配置的名称与现实entry模块的名称不一致。请将entryModules字段的值修改为entry模块的名称;
- 在项目级build-profile.json5文件的modules字段中,feature模块位于entry模块之前。由于DevEco Studio在举行编译时会按照从前往后的顺序举行配置,当配置feature模块时,尚未读取和配置entry模块,则会报entry模块不存在的错误。请在modules字段中将feature模块置于所依赖的entry模块之后。
编译报错“keystore password was incorrect”
题目现象
DevEco Studio编译时出现错误,提示“ERROR - hap-sign-tool: error: ACCESS_ERROR, code: 109. Details: Init keystore failed: keystore password was incorrect”错误信息。
报错原因
密钥库(p12)密码错误。
留意
密钥库密码和密钥密码是在创建p12文件时由开辟者自行输入的,请牢记该密码。DevEco Studio工程的build-profile.json5文件中有记载密码的密文,但署名工具需要输入密码明文,不能直接将build-profile.json5中的值用到署名工具中。
常见场景
- 密码输入错误。
- 命令行中需要输入明文密码,误输入了密文。
- 密钥(keyAlias)密码和密钥库(p12)密码记混。
办理措施
出现该题目的原因是署名文件中署名密码错误。
开辟者可通过重新自动署名办理该题目:
- 点击File > Project Structure > Project > Signing Configs,打开署名配置页面。
- 勾选“Automatically generate signing”(假如是HarmonyOS工程,需同时勾选“Support HarmonyOS”),等待重新署名,然后点击OK即可。
编译报错“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.
- Module: (xxx) and Module: (xxx) have the same moduleName, please check deviceType or distroFilter of the module.
- Module: (xxx) and Module: (xxx) have the same packageName, please check deviceType or distroFilter of the module.
- Module: (xxx) and Module: (xxx) have the same ability name.
办理措施
出现该题目的原因是打包时工程未满意HAP唯一性校验逻辑,请根据[HAP唯一性校验逻辑]修改工程,满意校验逻辑即可正常打包。
编译报错“Failed to generate test project build system”
题目现象
执行多模块native模块构建时,提示“Failed to generate test project build system.”错误信息。
办理措施
请删除报错模块下的.cxx文件夹,然后选中需要构建的模块,执行Make Module ${moduleName} 完成单独构建,避免同时构建多个模块。
C/C++项目三方依赖库未打包入HAP
题目现象
C/C++项目依赖三方so时,在打包生成HAP后,发现三方so未打包到HAP中。
办理措施
当前DevEco Studio对C/C++项目三方so的寻址方式有限,如出现三方so未打包到HAP中,请尝试修改so引入方式。
- 界说一个别名(如jsbind_shared_lib_tracing),代表将要引入的三方so。
- 利用SHARED IMPORT将三方so界说为动态引入。
- 利用IMPORTED_LOCATION界说引入so的具体位置。
- 将界说的三方so声明给目的。
- 再次打包生成HAP,确认三方so是否打包到HAP中。
Static Library模块中src/main/cpp目录下的文件未打包进HAR
题目现象
点击Build > Make Module ${libraryName} 编译构建生成HAR后,发现构建产物中未出现cpp目录下的文件。
办理措施
假如利用的Hvigor为2.5.0-s及以上版本,在编译构建HAR的过程中,只会将dependencies内处于本模块路径下的当地依赖也打包进.har文件中,devDependencies里的依赖不会打包进.har文件中。
请将相应的当地依赖移至dependencies中后重新编译。
工程编译告警提示“ArkTS:WARN: For details about ArkTS syntax errors”
题目现象
工程构建时,提示“ArkTS:WARN: For details about ArkTS syntax errors, see FAQs”。
办理措施
出现该告警说明当前工程存在不符合ArkTS语法规范的写法,请根据ERROR报错中括号内的语法规则如(arkts-no-var),查看[从TypeScript到ArkTS的适配规则]中对应的说明,修改为ArkTS规范写法。
编译报错“ninja: error: mkdir(xxx): No such file or directory”
题目现象
Native工程编译报错,同时出现以下告警和报错信息。
出现工程目录长度凌驾250字符的告警,示例如下:
出现编译报错“ninja: error: mkdir(xxx): No such file or directory”,示例如下:
办理措施
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字符,以现实为准
- 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字符的告警,示例如下:
出现编译报错“(is the command line too long?)”,示例如下:
办理措施
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字符,以现实为准
- 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时出现以下报错信息。
办理措施
OpenHarmony SDK提供的CMake交叉编译配置文件(ohos.toolchain.cmake)中,限制了搜索路径为CMAKE_SYSROOT。
假如开辟者需要添加搜索路径,可在CMakeList.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的资源。
办理措施
请确保符合以下条件:
- 资源需放置在目录resource/base路径下。
- 模块B已安装。
- 模块A中不能利用相对路径引用模块B的资源,应直接通过界说的模块名称来引用。
题目现象
引用模块的方式不对,假如引用的是一个其他模块的代码,也会报资源找不到。
办理措施
在oh_package.json5中引入该模块。通过界说的模块名称来引用。
如下图所示:
题目现象
HSP A 申请了某个权限,这个权限举行了资源的引用,在所有依赖A的组件举行构建时,报错 A 引用的资源找不到。
办理措施
手动在引用方配置对应资源可以办理此题目。
构建报错“ERROR: Task xxx was not found in the project xxx”
题目现象
命令行手动执行构建命令时,构建失败,提示“ERROR: Task xxx was not found in the project xxx.”
题目确认
- 执行hvigorw tasks命令,查看对应命令是否存在。
- 查看对应工程中module.json5文件中“type”字段是否为命令执行模块。比如图中执行assembleHar命令,是对工程中的har模块举行打包,若module.json5文件中的“type”字段不是"har"范例,则会出现上述错误提示。
办理措施
- 执行正确命令。
- 查看对应工程中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”。
题目原因
从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”。
题目原因
从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.”。
题目原因
从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中的IDE图标打开DevEco Studio,构建报错 The path XX is not writable. please choose a new location.”。
题目原因
在mac上直接打开dmg 中IDE图标进入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’”。
外链图片转存失败,源站大概有防盗链机制,建议将图片保存下来直接上传
办理措施
可接纳以下两种方式办理该题目:
- 在HAP中配置与HSP相同的自界说参数BuildProfileFileds。
- 将与HSP相同的自界说参数BuildProfileFileds配置到工程级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] 为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的时间配置利用。
- {
- "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目录。
常见场景
办理方案
根据报错的资源id全局搜索,查看报错的资源是否存在。
如何办理编译报错“Error: cJSON_Parse failed, please check the JSON file.”的题目
题目现象
编译报错“Error: cJSON_Parse failed, please check the JSON file”。
图1
报错原因
module.json文件格式不正确。
常见场景
- json文件内末尾多了逗号。
- 根标签不是大括号{}。
办理方案
查抄报错指向的json文件格式,比如是否末尾多了逗号,根标签是否为大括号{}。
如何办理编译报错“Error: ‘XXX’ only contain [a-zA-z0-9_].”的题目
题目现象
编译报错“Error: ‘XXX’ only contain [a-zA-z0-9_]”。
图2
办理方案
查抄文件名是否合法,文件名只能包罗大小写字母、数字、下划线。
如何办理三方包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)。
办理方案
修改代码:
- 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不报错,但是编译报错。
办理方案
假如文件中不包罗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文件缺少范例注解。
办理方案
报错位置添加范例注解。
如何办理编译报错"arkts-no-any-unknown" 和 "Cannot find module ‘xx’ or its corresponding type declarations"的题目
题目现象
编译报错"arkts-no-any-unknown" 和 “Cannot find module ‘xx’ or its corresponding type declarations”。
题目 原因
大小写敏感导致模块找不到。常见于图片中的两种错误同时出现,且仅在Linux系统出现,win/mac不报错。
办理方案
办理引用中的大小写题目。
如何办理编译报错“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 iteral和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’。
题目原因
初始化时日志写入存在冲突,.hvigor目录中的build-log文件被占用导致了该报错。
办理方案
- 方法一:点击编辑器窗口上方的Sync Now。
- 方法二:点击工具栏File > Sync and Refresh Project。
- 方法三:假如方法1、2无法办理题目,可以手动删除工程目录下的.hvigor目录后重启执行Sync。
Mac环境下加载动态库,署名拦截导致未生效
题目现象
Mac环境下,在DevEco项目开辟时,build-profile.json中添加了如下的插桩配置,但是插桩功能未生效。
- "transformLib": "<相对模块根路径的动态库路径,以./开头>"
复制代码 判断与验证
- 进入sdk中es2abc地点目录:[DevEco-Studio安装目录]/Contents/sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build-mac/bin。
- 执行下列命令:
- ./es2abc --merge-abc --transform-lib <动态库路径> <测试js文件路径>
复制代码 - 假如提示类似如下报错信息,原因大概是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.)
复制代码
- 用下面命令查看es2abc和动态库文件的署名组信息,假如两个文件,一个有署名信息,一个没有署名信息,大概都有署名信息,但是署名信息中属性’TeamIdentifier’的值是不一样的,那就说明题目是署名组不一致导致的,可以利用"办理方案"提供的方式处置惩罚。
- codesign -dv --verbose=1 <es2abc路径>
- codesign -dv --verbose=1 <动态库路径>
复制代码 办理方案
执行下列命令,将es2abc文件的署名替换成和动态库文件一样的用户署名。
- codesign --remove-signature <es2abc路径>
- codesign -s - -v <es2abc路径>
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |