如何编译OpenHarmony SDK API

往期知识点记录:

在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不对,会无法导入期望的模块,如下图:

相关推荐
东胜物联1 分钟前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g
stm32发烧友4 分钟前
基于STM32的智能家居环境监测系统设计
stm32·嵌入式硬件·智能家居
sanzk3 小时前
华为鸿蒙应用开发
华为·harmonyos
SoraLuna8 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos
hairenjing11238 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
ClkLog-开源埋点用户分析9 小时前
ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
华为·开源·开源软件·harmonyos
mg6689 小时前
鸿蒙系统的优势 开发 环境搭建 开发小示例
华为·harmonyos
模拟IC攻城狮9 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
lqj_本人9 小时前
鸿蒙next选择 Flutter 开发跨平台应用的原因
flutter·华为·harmonyos
lqj_本人9 小时前
使用 Flutter 绘制一个棋盘
harmonyos