前言
本文章主要介绍基于linux环境openHarmony的整仓代码编译(以rk3568为例)遇到的问题。
前提
openHarmony代码代码已下载,并执行prebuilts。
详细参考:openHarmony整仓代码下载
编译步骤
在Linux环境进行如下操作
1. 源码根目录,执行编译命令
./build.sh --product-name rk3568 --ccache
2. 检查编译结果
log中显示如下:
[OHOS INFO] rk3568 build success
[OHOS INFO] Cost Time: 1:54:38
=====build successful=====
2024-11-01 19:02:48
++++++++++++++++++++++++++++++++++++++++
编译所生成的文件都归档在out目录下,结果镜像输出在out/rk3568/packages/phone/images 目录下。
编译问题
1. FetchError: network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium
(1) 现象
大致报错如下所示
[26798/84913] ACTION //base/powermgr/power_manager/power_dialog:power_dialog_hap_compile_app(//build/toolchain/ohos:ohos_clang_arm)
FAILED: obj/base/powermgr/power_manager/power_dialog/power_dialog_hap/unsigned_hap_path_list.json
...
ohpm DEBUG: start updateLock, pid: 2173433
ohpm ERROR: ETIMEDOUT network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium, please check the network connectivity to the registry https://ohpm.openharmony.cn/ohpm/
ohpm DEBUG: getOverrideDepFile with key: @ohos/hypium.
ohpm ERROR: missing: @ohos/hypium@1.0.6, required by @
ohpm DEBUG: Executor e(this,void0,void 0,(function*(){const e=yield this.createChildNode({depth:i+1,childName:r,childSpec:n,depType:d,parent:t});yield p(e,i+1)})) execute failed: FetchError: network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium, will retry after 1000 ms with 1 retries remaining.
ohpm DEBUG: PackageLockerManager start building nodeData @ohos/hypium@1.0.6.
ohpm DEBUG: DepNodeDataBuilder start fetching depNode metadata, fetchRequest: {
"name": "@ohos/hypium",
"fetchSpec": "1.0.6",
"rootDir": "/home/OH_code/OH_code_all/base/powermgr/power_manager/power_dialog",
"where": "/home/OH_code/OH_code_all/base/powermgr/power_manager/power_dialog",
"parentSaveRoot": "/home/OH_code/OH_code_all/base/powermgr/power_manager/power_dialog"
}.
ohpm INFO: MetaDataFetcher fetching meta info of package '@ohos/hypium' from https://ohpm.openharmony.cn/ohpm/
ohpm DEBUG: start update lock...
ohpm DEBUG: end update lock...
ohpm DEBUG: start updateLock, pid: 2173433
ohpm DEBUG: start update lock...
ohpm DEBUG: end update lock...
ohpm DEBUG: start updateLock, pid: 2173433
ohpm DEBUG: start update lock...
ohpm DEBUG: end update lock...
ohpm DEBUG: start updateLock, pid: 2173433
ohpm DEBUG: start update lock...
ohpm DEBUG: end update lock...
ohpm DEBUG: start updateLock, pid: 2173433
ohpm ERROR: ETIMEDOUT network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium, please check the network connectivity to the registry https://ohpm.openharmony.cn/ohpm/
ohpm DEBUG: getOverrideDepFile with key: @ohos/hypium.
ohpm ERROR: missing: @ohos/hypium@1.0.6, required by @
ohpm ERROR: Found exception: FetchError: network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium, reached retry limit or non retryable error encountered.
ohpm DEBUG: Executor found task execute failed, exit process!
ohpm DEBUG: Executor Run completed in 121s 68ms
ohpm ERROR: ERUNNING execute tasks failed, FetchError: network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium
ohpm DEBUG: removeLock succeed, filepath: /home/OH_code/OH_code_all/base/powermgr/power_manager/power_dialog/oh-lock.lock.
ohpm ERROR: Install failed, detail: FetchError: network timeout at: https://ohpm.openharmony.cn/ohpm/@ohos/hypium
[0/0]
Traceback (most recent call last):
File "/home/OH_code/OH_code_all/out/rk3568/../../build/scripts/compile_app.py", line 298, in <module>
sys.exit(main(sys.argv[1:]))
^^^^^^^^^^^^^^^^^^
File "/home/OH_code/OH_code_all/out/rk3568/../../build/scripts/compile_app.py", line 288, in main
make_env(options.build_profile, cwd, options.ohpm_registry, options)
File "/home/OH_code/OH_code_all/out/rk3568/../../build/scripts/compile_app.py", line 92, in make_env
raise Exception('ReturnCode:{}. ohpm install failed. {}'.format(
Exception: ReturnCode:1. ohpm install failed.
[26799/84913] ACTION //foundation/resourceschedule/memmgr/interface/innerkits:memmgrclient__check(//build/toolchain/ohos:ohos_clang_arm)
[26800/84913] ACTION //foundation/resourceschedule/memmgr/interface/innerkits:memmgrclient__notice(//build/toolchain/ohos:ohos_clang_arm)
...
[91m[OHOS ERROR][0m Traceback (most recent call last):
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/containers/status.py", line 47, in wrapper
[91m[OHOS ERROR][0m return func(*args, **kwargs)
[91m[OHOS ERROR][0m ^^^^^^^^^^^^^^^^^^^^^
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/ohos_build_module.py", line 70, in run
[91m[OHOS ERROR][0m raise exception
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/ohos_build_module.py", line 67, in run
[91m[OHOS ERROR][0m super().run()
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/interface/build_module_interface.py", line 70, in run
[91m[OHOS ERROR][0m raise exception
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/interface/build_module_interface.py", line 68, in run
[91m[OHOS ERROR][0m self._ninja()
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/util/timer_util.py", line 30, in inner
[91m[OHOS ERROR][0m res = func(*arg, **kwarg)
[91m[OHOS ERROR][0m ^^^^^^^^^^^^^^^^^^^
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/interface/build_module_interface.py", line 125, in _ninja
[91m[OHOS ERROR][0m self._target_compilation()
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/modules/ohos_build_module.py", line 106, in _target_compilation
[91m[OHOS ERROR][0m self.target_compiler.run()
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/services/ninja.py", line 38, in run
[91m[OHOS ERROR][0m self._execute_ninja_cmd()
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/services/ninja.py", line 69, in _execute_ninja_cmd
[91m[OHOS ERROR][0m SystemUtil.exec_command(
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/util/system_util.py", line 77, in exec_command
[91m[OHOS ERROR][0m LogUtil.get_failed_log(log_path)
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/util/log_util.py", line 193, in get_failed_log
[91m[OHOS ERROR][0m LogUtil.get_compiler_failed_log(log_path)
[91m[OHOS ERROR][0m File "/home/OH_code/OH_code_all/build/hb/util/log_util.py", line 180, in get_compiler_failed_log
[91m[OHOS ERROR][0m raise OHOSException(
[91m[OHOS ERROR][0m exceptions.ohos_exception.OHOSException: COMPILE Failed! Please check error in /home/OH_code/OH_code_all/out/rk3568/error.log, and for more build information in /home/OH_code/OH_code_all/out/rk3568/build.log
[91m[OHOS ERROR][0m
[91m[OHOS ERROR][0m Code: 4000
[91m[OHOS ERROR][0m
[91m[OHOS ERROR][0m Reason: COMPILE Failed! Please check error in /home/OH_code/OH_code_all/out/rk3568/error.log, and for more build information in /home/OH_code/OH_code_all/out/rk3568/build.log
[91m[OHOS ERROR][0m
[91m[OHOS ERROR][0m Error Type: Ninja build error
[91m[OHOS ERROR][0m
[91m[OHOS ERROR][0m Description: An unknown error occurred while executing 'ninja -C'.
[91m[OHOS ERROR][0m
[91m[OHOS ERROR][0m Solution: no solution
[91m[OHOS ERROR][0m
(2) 解决方案
a. 修改build/build_scripts/build.sh
将其中 function init_ohpm() 中的 “ohpm config set registry https://repo.harmonyos.com/ohpm/” 替换为 “ohpm config set registry https://ohpm.openharmony.cn/ohpm/”。
root@Ubuntu :~/OH_code/OH_code_all/build$ git diff
diff --git a/build_scripts/build.sh b/build_scripts/build.sh
index b7304c8f..04a3ad9b 100755
--- a/build_scripts/build.sh
+++ b/build_scripts/build.sh
@@ -141,7 +141,8 @@ function init_ohpm() {
chmod +x ${OHPM_HOME}/init
${OHPM_HOME}/init > /dev/null
echo "[OHOS INFO] Current ohpm version is $(ohpm -v)"
- ohpm config set registry https://repo.harmonyos.com/ohpm/
+ # ohpm config set registry https://repo.harmonyos.com/ohpm/
+ ohpm config set registry https://ohpm.openharmony.cn/ohpm/
ohpm config set strict_ssl false
ohpm config set log_level debug
popd > /dev/null
root@Ubuntu :~/OH_code/OH_code_all/build$
b. 修改~/.ohpm/.ohpmrc
root@Ubuntu :~$ git diff
registry=https://ohpm.openharmony.cn/ohpm/
strict_ssl=false
publish_registry=https://ohpm.openharmony.cn/ohpm/
log_level=debug
fetch_timeout=60000
max_concurrent=50
retry_times=1
retry_interval=1000
resolve_conflict=true
install_all=true
enable_cross_process_lock=true
enforce_dependency_key=false
ensure_dependency_include=false
disallow_nested_package=false
odm_r2_project_root=false
compability_log_level=warn
use_stream_threshold_size=5
root@Ubuntu :~$
如果需要设置proxy,还需要在~/.ohpm/.ohpmrc中加入以下字段
http_proxy=http://{用户名}:{密码}@{IP}:{端口}/
https_proxy=http://{用户名}:{密码}@{IP}:{端口}/