当前位置: 首页 > article >正文

如何编译OpenHarmony SDK API

往期知识点记录:

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


http://www.kler.cn/a/303633.html

相关文章:

  • 力扣 LeetCode 239. 滑动窗口最大值(Day5:栈与队列)
  • SQL面试题——蚂蚁SQL面试题 会话分组问题
  • 2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享
  • 在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量
  • 动态规划问题-删除并获得点数(Java实现)
  • 使用Python实现对接Hadoop集群(通过Hive)并提供API接口
  • ‘“node“‘ �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���
  • 体育场座位【python实现】
  • 谷歌-BERT-“bert-base-chinese ”
  • 网络运维故障处理
  • Java | Leetcode Java题解之第396题旋转函数
  • 开源项目低代码表单FormCreate中通过接口加载远程数据选项
  • MySQL:undo log
  • 吴恩达大神神作经典珍藏版:《LLM大模型通关手册》面面俱到太全了!
  • Ubuntu 下载软件包时,提示 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
  • 【网络安全 | 甲方建设】SaaS平台、Jira工具及Jenkins服务器
  • LeetCode之字典树
  • SpringBoot3与SpringBoot2的区别
  • 内存魔术师:精通内存函数的艺术
  • 如何划分类/单一职权原则SRP
  • java重点学习-线程的并发安全(2)
  • 甘特图介绍
  • 解锁生活密码,AI答案之书解决复杂难题
  • 提取蛋白质复合体结构中组装体的变换矩阵
  • gitlab配置统一前缀路径源码版
  • 论文复现--基于LeNet网络结构的数字识别