如何編譯OpenHarmony SDK API
想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:
在OpenHarmony應(yīng)用開發(fā)時(shí),少不了和OpenHarmony SDK打交道。OpenHarmony SDK包含支持的編程語言(即ArkTS、JS、Native)的API和構(gòu)建工具,界面效果預(yù)覽器Previewer和toolchains工具鏈。對于HarmonyOS SDK,在OpenHarmony SDK的基礎(chǔ)上,增加了simulator設(shè)備模擬器、系統(tǒng)鏡像等,后續(xù)預(yù)計(jì)會豐富hms core相關(guān)的能力,如賬戶服務(wù)、地圖服務(wù)等。
OpenHarmony SDK是開源的,可以獲得代碼,因此可以在SDK里根據(jù)需要新增、修改一些代碼,然后編譯出定制的OpenHarmony SDK。也可以獲得最新的代碼,編譯出最新版本的OpenHarmony SDK,如 OpenHarmony SDK API 10 beta版本,來體驗(yàn)新版本。本文就介紹下如何編譯OpenHarmony SDK API。
一、環(huán)境準(zhǔn)備
可以參考官網(wǎng)資料站點(diǎn)設(shè)備開發(fā)文檔來準(zhǔn)備開發(fā)環(huán)境、獲取代碼。
1、安裝庫和工具集
使用如下apt命令安裝后續(xù)操作所需的庫和工具:
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
2、將Python 3.8設(shè)置為默認(rèn)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,預(yù)置的是python3.10,倒也沒有什么影響。Python版本3.8,3.10都可以。但是,對于其他軟件,還是盡量和資料中提交到的軟件版本保持一致,否則可能會導(dǎo)致一些意外。
3、將Ubuntu Shell環(huán)境修改為bash
執(zhí)行如下命令,確認(rèn)輸出結(jié)果為bash。
ls -l /bin/sh
如果輸出結(jié)果不是bash,需要將Ubuntu shell修改為bash。打開終端工具,執(zhí)行如下命令,然后選擇No,將Ubuntu shell由dash修改為bash。
sudo dpkg-reconfigure dash
4、獲取源碼
記錄下獲取最新代碼,也可以參考官方資料頁面:[獲取源碼](OpenAtom OpenHarmony)。
在Ubuntu環(huán)境下通過以下步驟獲取OpenHarmony源碼。
配置gitee用戶信息,替換下面的名稱和郵件。
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
執(zhí)行如下命令安裝碼云repo工具。下述命令中的安裝路徑以"~/bin"為例,請用戶自行創(chuàng)建所需目錄。
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添加到環(huán)境變量。
vim ~/.bashrc # 編輯環(huán)境變量
export PATH=~/bin:$PATH # 在環(huán)境變量的最后添加一行repo路徑信息
source ~/.bashrc # 應(yīng)用環(huán)境變量
通過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'
5、安裝編譯器及二進(jìn)制工具
在源碼根目錄下執(zhí)行prebuilts腳本,安裝編譯器及二進(jìn)制工具。
執(zhí)行成功后,會在源碼根目錄同級目錄下生成一個(gè)目錄openharmony_prebuilts,保存下載的工具軟件壓縮包;會在源碼根目錄下生成一個(gè)目錄prebuilts,有
bash build/prebuilts_download.sh
執(zhí)行成功后,會在源碼根目錄同級目錄下生成一個(gè)目錄openharmony_prebuilts,保存下載的工具軟件壓縮包;會在源碼根目錄下生成一個(gè)目錄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
二、編譯full-SDK
在官網(wǎng)資料編譯full-SDK內(nèi),提到編譯SDK需要執(zhí)行一些命令來需要的軟件包:
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
上述命令中,實(shí)際運(yùn)行時(shí),我的環(huán)境上不存在需要?jiǎng)h除的文件目錄clang-480513。執(zhí)行prebuilts_download.sh時(shí),也不需要指定-ndk參數(shù)。
執(zhí)行完畢上述命令,就可以構(gòu)建OpenHarmony Full SDK了。
./build.sh --product-name ohos-sdk --ccache
執(zhí)行成功后,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來使用了。
三、關(guān)于OpenHarmony SDK的一些其他知識
1、ohos-sdk模塊配置
上文簡單介紹過,OpenHarmony SDK包含ets、js、native、previewer、toolchains等模塊,這些模塊定義在文件ohos_sdk_description_std.json。這個(gè)文件是個(gè)json數(shù)組,每個(gè)元素是個(gè)對象,包含install_dir、module_label和target_os,片段如下:
[
{
"install_dir": "toolchains",
"module_label": "http://developtools/syscap_codec:syscap_tool_bin",
"target_os": [
"linux",
"windows",
"darwin"
]
},
......
{
"install_dir": "js/api",
"module_label": "http://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": "http://arkcompiler/ets_frontend/es2panda:es2abc_build_mac_ets",
"target_os": [
"darwin"
]
},
.....
]
2、如何編譯Public SDK
上文編譯的是Full SDK,如果只想編譯Public SDK,可以執(zhí)行如下命令:
./build.sh --product-name ohos-sdk --gn-args sdk_build_public=true
其中g(shù)n參數(shù):sdk_build_public定義在文件ohos_var.gni。
declare_args() {
sdk_build_public = false
}
該參數(shù)在文件BUILD.gn中使用:
if (sdk_build_public) {
public_sdk_config_parser = "http://build/ohos/sdk/parse_public_sdk.py"
ohos_sdk_pub_description_file =
"http://out/sdk-public/ohos_sdk_pub_description_std.json"
......
}
3、如何區(qū)分Public SDK和Full SDK
Public-SDK是提供給應(yīng)用開發(fā)的工具包,跟隨DevEco Studio下載,不包含系統(tǒng)應(yīng)用所需要的高權(quán)限API。Full-SDK是提供給OEM廠商開發(fā)應(yīng)用的工具包,不能隨DevEco Studio下載,包含了系統(tǒng)應(yīng)用所需要的高權(quán)限API。Public-SDK不支持開發(fā)者使用所有的系統(tǒng)API,包括animator組件、xcomponent組件、@ohos.application.abilityManager.d.ts、@ohos.application.formInfo.d.ts、@ohos.bluetooth.d.ts等,如工程必須依賴于系統(tǒng)API,需要替換為Full SDK。如果SDK名稱上不能區(qū)分,可以查看ets\api目錄下是否包含文件@ohos.application.abilityManager.d.ts,包含則為Full SDK,否則為Public SDK。
高權(quán)限API也可以從注釋中可以看出來,帶@systemapi標(biāo)記的就是高權(quán)限的系統(tǒng)接口。
/**
* 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;
4、Public SDK和Full SDK在IDE中的使用
如果需要在DevEco Studio中使用編譯的SDK,需要參考替換SDK相關(guān)文檔完成替換。在應(yīng)用工程級build-profile.json5文件中,設(shè)置SDK版本,如下圖所示,然后點(diǎn)擊該文件右上角的Sync Now進(jìn)行同步,即可看到左側(cè)的External Libraries的ArkTS版本發(fā)生了變化。
如何編譯OpenHarmony SDK API-開源基礎(chǔ)軟件社區(qū)
如果使用的SDK不對,會無法導(dǎo)入期望的模塊,如下圖:
如何編譯OpenHarmony SDK API-開源基礎(chǔ)軟件社區(qū)