如何編譯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工具鏈。對(duì)于HarmonyOS SDK,在OpenHarmony SDK的基礎(chǔ)上,增加了simulator設(shè)備模擬器、系統(tǒng)鏡像等,后續(xù)預(yù)計(jì)會(huì)豐富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-dev2、將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都可以。但是,對(duì)于其他軟件,還是盡量和資料中提交到的軟件版本保持一致,否則可能會(huì)導(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 dash4、獲取源碼
記錄下獲取最新代碼,也可以參考官方資料頁面:[獲取源碼](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í)行成功后,會(huì)在源碼根目錄同級(jí)目錄下生成一個(gè)目錄openharmony_prebuilts,保存下載的工具軟件壓縮包;會(huì)在源碼根目錄下生成一個(gè)目錄prebuilts,有
bash build/prebuilts_download.sh執(zhí)行成功后,會(huì)在源碼根目錄同級(jí)目錄下生成一個(gè)目錄openharmony_prebuilts,保存下載的工具軟件壓縮包;會(huì)在源碼根目錄下生成一個(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會(huì)輸出到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的一些其他知識(shí)
1、ohos-sdk模塊配置
上文簡單介紹過,OpenHarmony SDK包含ets、js、native、previewer、toolchains等模塊,這些模塊定義在文件ohos_sdk_description_std.json。這個(gè)文件是個(gè)json數(shù)組,每個(gè)元素是個(gè)對(duì)象,包含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)用工程級(jí)build-profile.json5文件中,設(shè)置SDK版本,如下圖所示,然后點(diǎn)擊該文件右上角的Sync Now進(jìn)行同步,即可看到左側(cè)的External Libraries的ArkTS版本發(fā)生了變化。
如何編譯OpenHarmony SDK API-開源基礎(chǔ)軟件社區(qū)
如果使用的SDK不對(duì),會(huì)無法導(dǎo)入期望的模塊,如下圖:
如何編譯OpenHarmony SDK API-開源基礎(chǔ)軟件社區(qū)















 
 
 
















 
 
 
 