1. Ubuntu 20.04搭建OpenHarmony 6.0 Master分支环境全记录
作为一名长期从事嵌入式开发的工程师,最近在Ubuntu 20.04上搭建OpenHarmony 6.0的开发环境时遇到了不少坑。本文将详细记录整个环境搭建过程,特别是那些官方文档没有明确说明的细节问题和解决方案。
1.1 基础环境准备
首先需要确认系统版本和Python环境:
bash复制# 查看系统版本
lsb_release -a
# 输出示例:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
# 检查Python版本
python3 --version
which python3
# 输出示例:
Python 3.8.10
/usr/bin/python3
对于Python环境,建议使用系统自带的Python 3.8.10,并通过以下命令设置默认Python版本:
bash复制sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 100
sudo ln -s /usr/bin/python3 /usr/bin/python
1.2 安装必要工具链
开发OpenHarmony需要安装大量基础工具,以下是我整理的完整安装脚本:
bash复制#!/bin/bash
# 定义要安装的软件包列表
PACKAGES=(
apt-utils
vim
software-properties-common
openssh-server
iputils-ping
curl
net-tools
bsdmainutils
kmod
bc
rsync
gawk
ssh
ccache
zip
python-dev
make
m4
gcc-multilib
ca-certificates-java
unzip
python3-yaml
perl
openssl
libssl1.1
gnupg
xsltproc
x11proto-core-dev
tcl
python3-crypto
python-crypto
libxml2-utils
libxml2-dev
libx11-dev
libssl-dev
libgl1-mesa-dev
lib32z1-dev
lib32ncurses5-dev
g++-multilib
flex
bison
doxygen
git
subversion
tofrodos
pigz
expect
python3-xlrd
git-core
gperf
build-essential
zlib1g-dev
libc6-dev-i386
lib32z-dev
openjdk-8-jdk
ruby
mtools
python3-pip
gcc-arm-linux-gnueabi
genext2fs
liblz4-tool
autoconf
pkg-config
libglib2.0-dev
libmount-dev
libpixman-1-dev
libncurses5-dev
exuberant-ctags
silversearcher-ag
libtinfo5
device-tree-compiler
libelf-dev
dwarves
gcc-arm-none-eabi
default-jdk
u-boot-tools
mtd-utils
scons
automake
libtool
libgmp-dev
texinfo
mpc
autotools-dev
libmpc-dev
libmpfr-dev
patchutils
libexpat-dev
libfdt-dev
libncursesw5-dev
cmake
wget
)
# 安装所有包
sudo apt-get update
for pkg in "${PACKAGES[@]}"; do
sudo apt-get install -y $pkg
done
2. Node.js环境配置
OpenHarmony的构建工具需要Node.js环境,以下是配置步骤:
bash复制# 安装curl和wget
sudo apt update && sudo apt install -y curl wget
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 安装Node.js v16
nvm install 16
nvm use 16
nvm alias default 16
# 安装hpm-cli
npm uninstall -g @ohos/hpm-cli
npm cache clean --force
npm install -g @ohos/hpm-cli --registry=https://repo.huaweicloud.com/repository/npm/
npm config set registry https://repo.huaweicloud.com/repository/npm/
如果遇到hpm-cli安装报错,可以这样解决:
bash复制cd /home/user0/.nvm/versions/node/v16.20.2/lib/node_modules/@ohos/hpm-cli
npm init -y
npm install idempotent-babel-polyfill --registry=https://repo.huaweicloud.com/repository/npm/
cd ~
hpm --version
3. 源码下载与配置
3.1 安装repo工具
bash复制curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo
sudo mv ~/repo /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo
# 安装Python依赖
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
3.2 配置Git
bash复制sudo apt update
sudo apt install git -y
sudo apt install git-lfs -y
git lfs install
git config --global user.name "yourname"
git config --global user.email "youremail@example.com"
git config --global credential.helper store
3.3 下载源码
bash复制mkdir -p ~/openharmony6 && cd ~/openharmony6
repo init -u https://gitcode.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
bash ./build/prebuilts_download.sh
4. 常见编译问题解决
4.1 缺失libbundle_ndk.z.so
这个错误通常是因为缺少预编译的SDK组件。解决方法:
bash复制# 假设已经下载了commandline-tools-linux-x64-6.0.2.642.zip
unzip commandline-tools-linux-x64-6.0.2.642.zip -d temp_sdk
mkdir -p ~/openharmony6/prebuilts/ohos-sdk/linux/24/
cp -r ./temp_sdk/command-line-tools/sdk/default/openharmony/* ~/openharmony6/prebuilts/ohos-sdk/linux/24
# 设置权限
sudo chown -R user0:user0 ~/openharmony6/prebuilts/ohos-sdk/
chmod -R 755 ~/openharmony6/prebuilts/ohos-sdk/
# 验证
ls ~/openharmony6/prebuilts/ohos-sdk/linux/24/native/sysroot/usr/lib/aarch64-linux-ohos/ | grep libbundle_ndk
4.2 缺失json5模块
bash复制sudo pip install json5
python -c "import json5; print('安装成功')"
4.3 ohpm工具缺失
bash复制mkdir -p /home/user0/openharmony6/base/powermgr/prebuilts/tool/
cp -r /home/user0/openharmony6/prebuilts/tool/command-line-tools /home/user0/openharmony6/base/powermgr/prebuilts/tool/
# 设置权限
sudo chown -R user0:user0 /home/user0/openharmony6/base/powermgr/prebuilts/
chmod -R 755 /home/user0/openharmony6/base/powermgr/prebuilts/
4.4 SDK版本不匹配
如果遇到toolchains版本不匹配的问题,可以尝试:
bash复制cd ~/openharmony6/prebuilts/ohos-sdk/linux/
cp -rp 24/ 20/
5. 编译命令
完成上述所有配置后,可以尝试编译:
bash复制cd ~/openharmony6
hb clean --clean-all
hb build --prebuilt-sdk
6. 经验总结
在整个环境搭建过程中,我总结了以下几点经验:
-
网络问题:国内用户建议全部使用华为镜像源,可以显著提高下载速度并减少失败概率。
-
权限问题:所有操作建议在普通用户下进行,避免使用root用户。遇到权限问题时,使用chown和chmod修正。
-
版本匹配:特别注意Node.js、Python和SDK工具的版本要求,版本不匹配是大多数问题的根源。
-
磁盘空间:OpenHarmony源码及编译产物会占用大量磁盘空间,建议预留至少100GB空间。
-
文档参考:除了官方文档,华为开发者论坛和GitHub Issues中往往有最新的问题解决方案。
-
环境隔离:建议使用干净的Ubuntu系统或Docker容器进行开发,避免已有环境的影响。
-
编译时间:首次编译可能需要数小时,建议在性能较好的机器上进行,并保持网络稳定。
通过以上步骤和经验,应该能够在Ubuntu 20.04上成功搭建OpenHarmony 6.0的开发环境。如果在过程中遇到其他问题,建议查看详细的编译日志,并搜索相关错误信息,通常都能找到解决方案。
