由华为官方的 x64 Linux 版 Command Line Tools 26.0.0 Beta2 和 ARM64 鸿蒙版 OpenHarmony SDK 26.0.0.18 Beta 组合而来,打了自定义hvigorw补丁和ld.lld自动签名补丁,可在鸿蒙PC上原生运行,可打包出能正常运行的鸿蒙hap。
java,把系统伪装成Linux需要安装uname-is-linux,可通过brew安装brew install java uname-is-linux
# 把系统伪装成Linux,防止报错(重要,缺少这步会导致hvigorw把系统误认为macOS并加载不存在的dylib库)
export LD_PRELOAD="$HOME/.harmonybrew/opt/uname-is-linux/lib/libuname.so"
export TOOL_HOME="/path/to/output/command-line-tools"
export OHOS_SDK="$TOOL_HOME/sdk/default/openharmony"
export PATH="$TOOL_HOME/bin:$OHOS_SDK/toolchains/lib:$OHOS_SDK/native/build-tools/cmake/bin:$OHOS_SDK/native/llvm/bin:$PATH"
cd /path/to/harmony-project
hvigorw assembleHap
cd ~/.harmonybrew/bin
mv cat cat.bak
mv cp cp.bak
导致失败的具体案例: https://github.com/SwimmingTiger/WineHua/blob/1905986cdbeb162888db992ab6da695edcffc1e6/build-on-ohos.sh#L95
相关issue:
export LD_PRELOAD="$HOME/.harmonybrew/opt/uname-is-linux/lib/libuname.so",hvigorw会报错:Error Message: Failed to load the library '……/command-line-tools/sdk/default/hms/toolchains/lib/libimage_transcoder_shared.dylib', path invalid
此时请先结束所有的hvigor后台进程(killall -9 node,不加-9结束不掉),然后重新设置export LD_PRELOAD="$HOME/.harmonybrew/opt/uname-is-linux/lib/libuname.so"再构建:
killall -9 node
export LD_PRELOAD="$HOME/.harmonybrew/opt/uname-is-linux/lib/libuname.so"
hvigorw assembleHap
BiSheng 编译器中的 clang 部分已经由普通 llvm clang 符号连接取代,无法使用 BiSheng 特有功能。
以下库文件是 stub,需要用到它们的项目可能会出问题:
./sdk/default/hms/toolchains/lib/libastc_encoder_shared.so
./sdk/default/hms/toolchains/lib/libtextureSuperCompress.so
./sdk/default/hms/toolchains/lib/libastcCustomizedEncode.so
./sdk/default/hms/toolchains/lib/libhilog.so
./sdk/default/hms/toolchains/lib/liblz4_shared.so
./sdk/default/hms/toolchains/lib/libimage_transcoder_shared.so
brew或其他地方寻找替代:./codelinter/linter/performanceAgent/cppaudit
./codelinter/linter/performanceAgent/hpaudit
./emulator/Emulator
./emulator/emulator-crash-service
./emulator/lib/libQt5Core.so.5
./sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build/legacy_api8/bin/js2abc
./sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build/bin/profdump
./sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build/bin/merge_abc
./sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build/bin/ark_aot_compiler
./sdk/default/openharmony/js/build-tools/ace-loader/bin/ark/build/bin/merge_abc
./sdk/default/openharmony/js/build-tools/ace-loader/bin/ark/build/legacy_api8/bin/js2abc
./sdk/default/openharmony/native/build-tools/cmake/bin/cmake-gui
./sdk/default/openharmony/native/llvm/python3/bin/python3.12
./sdk/default/openharmony/native/llvm/bin/python/lib/python3.12/lldb/lldb-argdumper
./sdk/default/openharmony/toolchains/idl
./sdk/default/openharmony/toolchains/glslang_validator
./sdk/default/openharmony/toolchains/hnpcli
./sdk/default/openharmony/toolchains/spirv-remap
./sdk/default/openharmony/previewer/common/bin/Previewer
./sdk/default/hms/native/BinXO/binxo
./sdk/default/hms/toolchains/hilogtool
./sdk/default/hms/native/BiSheng/bin/llvm-bolt
./sdk/default/hms/native/BiSheng/bin/llvm-ifs
./sdk/default/hms/native/BiSheng/bin/clang-prob-annotate
./sdk/default/openharmony/native/build-tools/cmake/bin/ccmake
./sdk/default/openharmony/toolchains/diff
./sdk/default/hms/toolchains/syscap_tool