在OpenHarmony应用开发时,少不了和OpenHarmony SDK打交道。OpenHarmony SDK包含支持的编程语言(即ArkTS、JS、Native)的API和构建工具,界面效果预览器Previewer和toolchains工具链。对于HarmonyOS SDK,在OpenHarmony SDK的基础上,增加了simulator设备模拟器、系统镜像等,后续预计会丰富 hms core 相关的能力,如账户服务、地图服务等。
OpenHarmony SDK是开源的,可以获得代码,因此可以在SDK里根据需要新增、修改一些代码,然后编译出定制的OpenHarmony SDK。也可以获得最新的代码,编译出最新版本的OpenHarmony SDK,如 OpenHarmony SDK API 10 beta版本,来体验新版本。本文就介绍下如何编译OpenHarmony SDK API。如有遗漏,欢迎留言补充。
1、环境准备
可以参考官网文档站点 设备开发文档 来准备开发环境、获取代码。
1.1 安装库和工具集
使用如下apt命令安装后续操作所需的库和工具:
sudo apt update
sudo apt install binutils binutils-dev git git-lfs gnupg
sudo apt install flex bison gperf build-essential zip curl
sudo apt install zlib1g-dev gcc-multilib g++-multilib
sudo apt install gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64
sudo apt install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt install lib32z1-dev ccache libgl1-mesa-dev libxml2-utils
sudo apt install xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip
sudo apt install ruby genext2fs device-tree-compiler make libffi-dev
sudo apt install e2fsprogs pkg-config perl openssl libssl-dev libelf-dev
sudo apt install libdwarf-dev u-boot-tools mtd-utils cpio doxygen
sudo apt install liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools
sudo apt install mtools default-jre default-jdk libncurses5 apt-utils
sudo apt install wget scons python3.8-distutils tar rsync git-core
sudo apt install libxml2-dev lib32z-dev grsync xxd libglib2.0-dev
sudo apt install libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs
sudo apt install squashfs-tools pcmciautils quota ppp libtinfo-dev
sudo apt install libtinfo5 libncurses5-dev libncursesw5 libstdc++6
sudo apt install gcc-arm-none-eabi vim ssh locales libxinerama-dev
sudo apt install libxcursor-dev libxrandr-dev libxi-dev
1.2 将Python 3.8设置为默认Python版本
查看Python 3.8的位置:
which python3
# 或
which python3.8
将Python和Python3切换为Python 3.8:
#{Python 3.8 路径}为上一步查看的Python 3.8的位置
sudo update-alternatives --install /usr/bin/python python {Python 3.8 路径} 1
sudo update-alternatives --install /usr/bin/python3 python3 {Python 3.8 路径} 1
本文使用Ubuntu 22.04.2 LTS,预置的是python3.10,倒也没有什么影响。Python版本3.8,3.10都可以。但是,对于其他软件,还是尽量和文档中提交到的软件版本保持一致,否则可能会导致一些意外。
1.3 将Ubuntu Shell环境修改为bash
执行如下命令,确认输出结果为bash。
ls -l /bin/sh
如果输出结果不是bash,需要将Ubuntu shell修改为bash。打开终端工具,执行如下命令,然后选择No,将Ubuntu shell由dash修改为bash。
sudo dpkg-reconfigure dash
1.4 获取源码
记录下获取最新代码,也可以参考官方文档页面:[获取源码]( OpenAtom OpenHarmony )。
在Ubuntu环境下通过以下步骤获取OpenHarmony源码。
配置gitee用户信息,替换下面的名称和邮件。
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
执行如下命令安装码云repo工具。下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
将repo添加到环境变量。
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
通过repo + https下载master分支最新代码:
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
1.5 安装编译器及二进制工具
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
执行成功后,会在源码根目录同级目录下生成一个目录openharmony_prebuilts,保存下载的工具软件压缩包;会在源码根目录下生成一个目录prebuilts,有
bash build/prebuilts_download.sh
执行成功后,会在源码根目录同级目录下生成一个目录openharmony_prebuilts,保存下载的工具软件压缩包;会在源码根目录下生成一个目录prebuilts,包含解压后的各种工具,如下:
zhushy@DESKTOP-RPE9R4O:~/openharmony/prebuilts$ tree -L 2
.
├── ark_tools
│ └── ark_js_prebuilts
├── build-tools
│ ├── common
│ └── linux-x86
├── clang
│ └── ohos
├── cmake
│ ├── linux-x86
│ └── windows-x86
├── develop_tools
├── bpftool
│ └── pahole
├── gcc
│ └── linux-x86
├── mingw-w64
│ └── ohos
├── python
│ └── linux-x86
└── rustc
├── linux-x86_64
├── rust-1.68.0-dev-x86_64-unknown-linux-gnu
├── rust-std-1.68.0-dev-aarch64-linux-ohos
└── rust-std-1.68.0-dev-armv7-linux-ohos
2、编译full-SDK
在官网文档 编译full-SDK 内,提到编译SDK需要执行一些命令来需要的软件包:
yes y | sudo apt install libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
rm -rf prebuilts/clang/ohos/darwin-x86_64/clang-480513
rm -rf prebuilts/clang/ohos/windows-x86_64/clang-480513
rm -rf prebuilts/clang/ohos/linux-x86_64/clang-480513
bash build/prebuilts_download.sh -ndk
prebuilts_download.sh apt-get update -qqy
apt-get install doxygen -y --force-yes
上述命令中,实际运行时,我的环境上不存在需要删除的文件目录clang-480513
。执行prebuilts_download.sh
时,也不需要指定-ndk
参数。
执行完毕上述命令,就可以构建OpenHarmony Full SDK了。
./build.sh --product-name ohos-sdk --ccache
执行成功后,OpenHarmony SDK会输出到out/sdk/packages/ohos-sdk/
:
zhushy@DESKTOP-RPE9R4O:~/openharmony$ tree out/sdk/packages/ohos-sdk/ -L 2
out/sdk/packages/ohos-sdk/
├── linux
│ ├── ets-linux-x64-4.0.9.5-Beta2.zip
│ ├── js-linux-x64-4.0.9.5-Beta2.zip
│ ├── native-linux-x64-4.0.9.5-Beta2.zip
│ ├── previewer-linux-x64-4.0.9.5-Beta2.zip
│ └── toolchains-linux-x64-4.0.9.5-Beta2.zip
└── windows
├── ets-windows-x64-4.0.9.5-Beta2.zip
├── js-windows-x64-4.0.9.5-Beta2.zip
├── native-windows-x64-4.0.9.5-Beta2.zip
├── previewer-windows-x64-4.0.9.5-Beta2.zip
└── toolchains-windows-x64-4.0.9.5-Beta2.zip
编译输出OpenHarmony SDK后,就可以替换SDK来使用了。
3、关于OpenHarmony SDK的一些其他知识
3.1 ohos-sdk模块配置
上文简单介绍过,OpenHarmony SDK包含ets、js、native、previewer、toolchains等模块,这些模块定义在文件 ohos_sdk_description_std.json 。这个文件是个json数组,每个元素是个对象,包含install_dir、module_label和target_os,片段如下:
[
{
"install_dir": "toolchains",
"module_label": "//developtools/syscap_codec:syscap_tool_bin",
"target_os": [
"linux",
"windows",
"darwin"
]
},
......
{
"install_dir": "js/api",
"module_label": "//interface/sdk-js:ohos_declaration_common",
"target_os": [
"windows",
"linux",
"darwin"
]
},
......
{
"install_dir": "ets/build-tools/ets-loader/bin/ark/build-mac/bin",
"module_label": "//arkcompiler/ets_frontend/es2panda:es2abc_build_mac_ets",
"target_os": [
"darwin"
]
},
.....
]
3.2 如何编译Public SDK
上文编译的是Full SDK,如果只想编译Public SDK,可以执行如下命令:
./build.sh --product-name ohos-sdk --gn-args sdk_build_public=true
其中gn参数:sdk_build_public
定义在文件 ohos_var.gni 。
declare_args() {
sdk_build_public = false
}
该参数在文件 BUILD.gn 中使用:
if (sdk_build_public) {
public_sdk_config_parser = "//build/ohos/sdk/parse_public_sdk.py"
ohos_sdk_pub_description_file =
"//out/sdk-public/ohos_sdk_pub_description_std.json"
......
}
3.3 如何区分Public SDK和Full SDK
Public-SDK是提供给应用开发的工具包,跟随DevEco Studio下载,不包含系统应用所需要的高权限API。Full-SDK是提供给OEM厂商开发应用的工具包,不能随DevEco Studio下载,包含了系统应用所需要的高权限API。Public-SDK不支持开发者使用所有的系统API,包括animator组件、xcomponent组件、@ohos.application.abilityManager.d.ts、@ohos.application.formInfo.d.ts、@ohos.bluetooth.d.ts等,如工程必须依赖于系统API,需要替换为Full SDK。如果SDK名称上不能区分,可以查看ets\api
目录下是否包含文件@ohos.application.abilityManager.d.ts
,包含则为Full SDK,否则为Public SDK。
高权限API也可以从注释中可以看出来,带@systemapi
标记的就是高权限的系统接口。
/**
* Updates the configuration by modifying the configuration.
*
* @permission ohos.permission.UPDATE_CONFIGURATION
* @param { Configuration } config - Indicates the new configuration.
* @param { AsyncCallback<void> } callback - The specified callback method.
* @syscap SystemCapability.Ability.AbilityRuntime.Core
* @systemapi
* @since 8
* @deprecated since 9
* @useinstead ohos.app.ability.abilityManager/abilityManager#updateConfiguration
*/
function updateConfiguration(config: Configuration, callback: AsyncCallback<void>): void;
3.4 Public SDK和Full SDK在IDE中的使用
如果需要在DevEco Studio中使用编译的SDK,需要参考替换SDK相关文档完成替换。在应用工程级build-profile.json5文件中,设置SDK版本,如下图所示,然后点击该文件右上角的Sync Now进行同步,即可看到左侧的External Libraries的ArkTS版本发生了变化。
如果使用的SDK不对,会无法导入期望的模块,如下图:
如果大家想更加深入的学习 OpenHarmony(鸿蒙南向) 开发的全栈内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:
OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy
《OpenHarmony源码解析》:https://qr18.cn/CgxrRy
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
系统架构分析:https://qr18.cn/CgxrRy
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy
OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy
写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
https://qr21.cn/FV7h05