往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
- startup子系统之syspara_lite系统属性部件 (1)
- startup子系统之syspara_lite系统属性部件 (2)
- startup子系统之bootstrap_lite服务启动引导部件(1)
- startup子系统之bootstrap_lite部件 (2)
- utils子系统之file文件操作部件
- utils子系统之KV存储部件 (1)
- utils子系统之KV存储部件 (2)
- utils子系统之KV存储部件 (3)
- build lite配置目录全梳理
- build lite编译构建过程
- XTS子系统之应用兼容性测试用例开发
- XTS子系统之应用兼容性测试套件(1)
- XTS子系统之应用兼容性测试套件(2)
- HPM包描述文件bundle.json
- build lite源码分析 之 hb命令__main__.py
- 持续更新中......
在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不对,会无法导入期望的模块,如下图: