如何编译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.rhkb.cn/news/423243.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟《经济学人》学英文:2024年09月07日这期 What to read about the British economy

What to read about the British economy Britain used to be the world’s richest country. These six books explain how it came to be, and why it is no longer 原文&#xff1a; IN RECENT YEARS the British economy has tended to be in the news for the wrong re…

逆向工程 反编译 C# net core

索引器访问 在您的代码中&#xff0c;您试图使用 configurationRoot.get_Item("AgileConfig:appId") 来访问配置项&#xff0c;但这里存在几个问题&#xff1a; 错误的访问方法&#xff1a;在 .NET 的 IConfigurationRoot 接口中&#xff0c;没有直接名为 get_Item 的…

kkFileView PDF Image Mode Preview BUG

kkFileView PDF & Image Mode Preview BUG lazyload.js officePicture.ftl pdf.ftl kkFileView getCorsFile?urlPath 会触发SSRF漏洞 kkFileView SSRF-CSDN博客 commonHeader.ftl initWaterMark() 修改代码的工作量&#xff0c;主要是先部署项目&#xff0c;解…

OpenAI全新发布o1模型:开启 AGI 的新时代

OpenAI全新发布o1模型&#xff1a;开启 AGI 的新时代 欢迎关注【youcans的AGI学习笔记】原创作品 2024年9月13日&#xff0c;OpenAI新模型o1 正式发布。o1 在测试化学、物理和生物学专业知识的基准 GPQA-diamond 上&#xff0c;全面超过了人类博士专家。 OpenAI 宣称&#xff…

VSCode C++ Tasks.json中的变量

前言 上文介绍了在VSCode中创建C项目和编译多文件的情况。本文将介绍Tasks.json中一些变量的含义&#xff1b; 内容 tasks.json文件 下文参考VSCode文档&#xff1a;Visual Studio Code 变量参考 预定义标量 ${userHome} - 用户主文件夹的路径${workspaceFolder} - 在 VS Co…

软件测试之测试用例详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条…

Mysql高级篇(中)——SQL性能分析

Mysql高级篇&#xff08;中&#xff09;—— SQL性能分析 一、&#xff08;了解&#xff09;MySQL Query Optimizer 的主要功能和原理二、&#xff08;了解&#xff09;MySQL 常见瓶颈三、关键字 EXPLAIN1、是什么2、基本语法3、EXPLAIN 执行信息详解&#xff08;1&#xff09…

HTML 转 PDF API 接口

HTML 转 PDF API 接口 网络工具 / 文件处理 支持网页转 PDF 高效生成 PDF / 提供永久链接。 1. 产品功能 超高性能转换效率&#xff1b;支持将传递的 HTML 转换为 PDF&#xff0c;支持转换 HTML 中的 CSS 格式&#xff1b;支持传递网站 URL&#xff0c;直接转换页面成对应的 …

代码随想录打卡Day31

又是难绷的一天啊&#xff0c;第二题和第三题看完视频才AC的&#xff0c;第一道题又被官方测试样例恶心了&#xff0c;下面细说。 56. 合并区间 这道题没有什么新的思路&#xff0c;还是先将区间按照区间左值排序&#xff0c;然后遍历向量中的每一个区间&#xff0c;如果和前…

在职研生活学习--20240907

开学第一天 9月7日&#xff0c;中南大学商学院迎来了一支充满活力的队伍——2024级MBA新生集体整装待发&#xff0c;我们满怀期待地登上了前往长沙望城柏乐园的大巴&#xff0c;准备开启一场为期两天一夜的素质拓展与团队建设之旅。 迎新幼儿园PPT 出发 抵达柏乐园&#xff0c;…

Docker torchserve 部署模型流程

1.拉取官方镜像 地址: https://hub.docker.com/r/pytorch/torchserve/tags docker pull pytorch/torchserve:0.7.1-gpu2. docker启动指令 CPU docker run --rm -it -d -p 8380:8080 -p 8381:8081 --name torch-server -v /path/model-server/extra-files:/home/model-serve…

食品分类2检测系统源码分享

食品分类2检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vi…

应用层协议 —— https

目录 http的缺点 https 安全与加密 运营商挟持 常见的加密方式 对称加密 非对称加密 数据摘要&#xff08;数据指纹&#xff09; 不安全加密策略 1 只使用对称加密 2 只使用非对称加密 3 双方都是用非对称加密 4 对称加密和非对称加密 解决方案 CA证书 http的缺点 我们可…

HarmonyOS开发实战( Beta5.0)骨架屏实现案例实践

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例介绍通过骨架屏提升加载时用户体验的方法。骨架屏用…

STM32+FATFS+SD卡+RTC(生成.CSV格式文件)

一、简介 实验目的&#xff1a;在SD卡上挂载文件系统&#xff0c;实时记录压力传感器采集到的数据&#xff1b;且在表格第一排记录采集时间&#xff1b; 因为前面文章包含了除RTC之外的所有的代码&#xff0c;此文章只放RTC代码。 二、工程源码 RTC.c #include "sys.h…

cocosCreator实现一个验证码弹窗验证功能

公开文章地址 在 Cocos Creator 中实现一个6位数的验证码输入弹窗功能。主要包含以下三点 1、 可以连续输入验证码 2、 可以粘贴验证码 3、 可以连续删除验证码 前言 引擎版本: Cocos Creator 2.7.2 开发语言: ts 效果图 实现思路 1、 在弹窗界面放置6个输入框的精灵&#x…

828华为云征文 | 使用华为云Flexus云服务器X安装搭建crmeb多门店商城教程

&#x1f680;【商城小程序&#xff0c;加速启航&#xff01;华为云Flexus X服务器助力您的业务腾飞】&#x1f680; 1、点击链接进入华为云官网&#xff0c;页面如下&#xff1a; 华为云Flexus云服务器X选购页面 https://www.huaweicloud.com/product/flexus-x.html 2、进…

Linux下编译Kratos

本文记录在Linux下编译Kratos的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、依赖与代码 1.1 安装依赖 apt-get update apt-get install vim openssh-server openssh-client ssh \build-essential …

初级练习[3]:Hive SQL子查询应用

目录 环境准备看如下链接 子查询 查询所有课程成绩均小于60分的学生的学号、姓名 查询没有学全所有课的学生的学号、姓名 解释: 没有学全所有课,也就是该学生选修的课程数 < 总的课程数。 查询出只选修了三门课程的全部学生的学号和姓名 环境准备看如下链接 环境准备h…

spring项目整合log4j2日志框架(含log4j无法打印出日志的情况,含解决办法)

Spring整合Log4j2的整体流程 Lo 1&#xff09;导入log4j-core依赖 <!--导入日志框架--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <ver…