如何编译OpenHarmony SDK API 原创 精华

zhushangyuan_
发布于 2023-7-25 21:36
浏览
3收藏

如何编译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版本发生了变化。

如何编译OpenHarmony SDK API-鸿蒙开发者社区

如果使用的SDK不对,会无法导入期望的模块,如下图:

如何编译OpenHarmony SDK API-鸿蒙开发者社区

4、参考资料

编译full-SDK

编译构建子系统

app_samples部件 系统特性

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2023-7-25 21:58:21修改
5
收藏 3
回复
举报
7条回复
按时间正序
/
按时间倒序
zhushangyuan_
zhushangyuan_

严格按官方资料操作比较重要,我本地也有nodejs不同版本的时候,编译sdk就报错:

Node.js version mismatch. Expected 14.21.1 but found v17.1.0:


还是使用感觉整洁的环境,使用工具提供的比较方便:


zhushy@DESKTOP-RPE9R4O:~/openharmony/prebuilts/build-tools/common/nodejs/current/bin$ ll
total 73660
drwxr-xr-x 2 zhushy zhushy     4096 Jul 25 20:32 ./
drwxr-xr-x 6 zhushy zhushy     4096 Nov  4  2022 ../
lrwxrwxrwx 1 zhushy zhushy       45 Nov  4  2022 corepack -> ../lib/node_modules/corepack/dist/corepack.js*
-rwxr-xr-x 1 zhushy zhushy 75417104 Nov  4  2022 node*
lrwxrwxrwx 1 zhushy zhushy       38 Nov  4  2022 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
lrwxrwxrwx 1 zhushy zhushy       38 Nov  4  2022 npx -> ../lib/node_modules/npm/bin/npx-cli.js*
lrwxrwxrwx 1 zhushy zhushy       33 Jul 25 20:32 rimraf -> ../lib/node_modules/rimraf/bin.js*
zhushy@DESKTOP-RPE9R4O:~/openharmony/prebuilts/build-tools/common/nodejs/current/bin$ ./node -v
v14.21.1
zhushy@DESKTOP-RPE9R4O:~/openharmony/prebuilts/build-tools/common/nodejs/current/bin$


回复
2023-7-26 08:48:01
红叶亦知秋
红叶亦知秋

很实用的教程,期待OpenHarmony SDK未来能更加丰富

1
回复
2023-7-26 10:10:13
zhushangyuan_
zhushangyuan_ 回复了 红叶亦知秋
很实用的教程,期待OpenHarmony SDK未来能更加丰富

一起见证

回复
2023-7-26 14:13:51
0aaron
0aaron

开源的魅力就在于可以定制自己想要的组件

回复
2023-7-27 11:58:51
zhushangyuan_
zhushangyuan_ 回复了 0aaron
开源的魅力就在于可以定制自己想要的组件

现在 知道如何编译了,就缺如何定制自己组件的教程了

回复
2023-7-27 15:33:11
zhushangyuan_
zhushangyuan_

会报 缺少如下依赖:

 gcc-arm-linux-gnueabi is not installed. please install it.


需要执行下:

sudo apt-get install gcc-arm-linux-gnueabi


1
回复
2023-7-27 21:46:19
zhushangyuan_
zhushangyuan_

++++++++++++++++++++++++++++++++++++++++

Your system shell isn't bash, we recommend you to use bash, because some commands may not be supported in other shells, such as pushd and shopt are not supported in dash.

You can follow these tips to modify the system shell to bash on Ubuntu:

[1]:Open the Terminal tool and execute the following command: sudo dpkg-reconfigure dash

[2]:Enter the password and select <no>

回复
2023-7-31 01:57:58
回复
    相关推荐