前回の記事では Openharmony V3.1 のコンパイルと構築の手順を説明しましたが、標準システム、つまり L2 デバイスにモジュールを追加する方法と、Openharmony 上でHelloWorld をコンパイルして実行する方法については、この記事で説明しています。詳しく説明します。
1. 標準システムにモジュールを追加する
Openharmony でのモジュールの追加は次の 3 つの状況に分けられ、元の設定ファイルはさまざまな程度に変更される可能性があります。
元のコンポーネントにモジュールを追加する
新しいウィジェットを作成し、それにモジュールを追加します
新しいサブシステムを作成し、サブシステムのコンポーネントの下にモジュールを追加します。
モジュールを追加するプロセスは、以下の 3 つの方法で分析されます。
2. 元のコンポーネントにモジュールを追加します
1. モジュール ディレクトリで BUILD.gn を設定し、タイプに応じて対応するテンプレートを選択します
サポートされているテンプレートの種類:
ohos_executable #可执行程序
ohos_shared_library #动态库
ohos_static_library #静态库
# 预编译模板
ohos_prebuilt_executable #预编译可执行程序
ohos_prebuilt_shared_library #预编译动态库
ohos_prebuilt_etc #预编译配置
以下の例では、BUILD.gn ファイル内の各テンプレートの属性と設定項目について説明します。
例:
ohos_shared_library の例
import("//build/ohos.gni")
ohos_shared_library("helloworld") {
source = ["",""] # 包含的C或C++文件
include_dir = ["",""] # 包含的头文件
cflags = [] # 编译选项
cflags_c = []
cflags_CC = []
ldflags = []
configs = []
deps = [] # 部件内模块依赖
external_deps = [
"part_name:module_name",
]
# 跨部件模块依赖定义
# 定义格式为 "部件名:模块名称"
# 这里依赖的模块必须是部件声明在inner_kits中的模块
defines += ["",""] # 宏定义
output_name = "" # 可选,模块输出名
output_extension = "" # 可选,模块名后缀
module_install_dir = "" # 可选,缺省在/system/lib64或/system/lib下,模块安装路径,模块安装路径,从system/,vendor/后开始指定
relative_install_dir = "" # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置项不生效
part_name = "" # 必选,所属部件名称
subsystem_name = "" # 可选,子系统名称
}
ohos_executable の例
ohos_executable テンプレートの属性は、基本的に ohos_shared_library と同じです。
ohos_executable("helloworld") {
source = ["",""] # 包含的C或C++文件
include_dir = ["",""] # 包含的头文件
...
install_enable = true # 编译后的镜像烧录后,可执行模块默认是不安装在开发板内,如果要安装需要指定install_enable为true.
}
ohos_prebuilt_etc の例
ohos_prebuilt_etc は、開発ボードにプリコンパイルされたファイル (通常は xml、cfg などの構成ファイル) をインストールします。
ohos_prebuilt_etc("helloworld") {
source = ""
deps = [] # 部件内模块依赖
module_install_dir = "" # 可选,模块安装路径,从system/,vendor/后开始指定
relative_install_dir = "" # 可选,模块安装相对路径,相对于/system/etc;如果有module_install_dir配置时,该配置项不生效
part_name = "" # 必选,所属部件名称
}
2. モジュールが属するコンポーネントを含むbundle.jsonを変更します。
例として、base/account/os_account/bundle.json を取り上げます。
このモジュールの BUILD.gn ファイルが配置されているディレクトリは //base/account/os_account/ です。
次に、「sub_component」に「//base/account/os_account:helloworld」を追加します。
{
"name": "@ohos/os_account",
"description": "Allowing apps to use OS account-related functions",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "base/account/os_account"
},
...
"component": {
"name": "os_account_standard",
"subsystem": "account",
...
"build": {
"sub_component": [
"//base/account/os_account/services:services_target",
"//base/account/os_account/services/accountmgr/src/appaccount:app_account_service_core",
"//base/account/os_account/frameworks/appaccount/native:app_account_innerkits",
"//base/account/os_account/frameworks/osaccount/core:os_account_core",
"//base/account/os_account/frameworks/common:common_target",
"//base/account/os_account/frameworks/osaccount/native:os_account_innerkits",
"//base/account/os_account/interfaces/kits/napi/appaccount:appaccount",
"//base/account/os_account/interfaces/kits/napi/distributedaccount:distributedaccount",
"//base/account/os_account/interfaces/kits/napi/osaccount:osaccount",
"//base/account/os_account/sa_profile:account_sa_profile",
"//base/account/os_account/tools:os_account_tools",
"//base/account/os_account:helloworld"
],
...
}
}
}
この時はOpenharmonyで実行します。
./build.sh --product-name rk3568
コンパイルが完了すると、コンパイルされた実行可能ファイルとダイナミック ライブラリがディレクトリ //out/rk3568/account/os_account_standard/ に見つかります。
3. 新しいコンポーネントを作成し、それにモジュールを追加します
モジュール ディレクトリで BUILD.gn を構成し、タイプに応じて必要なテンプレートを選択します
この手順は、元のコンポーネントにモジュールを追加するのと基本的に同じですが、モジュールに対応する BUILD.gn ファイル内の part_name が新しいコンポーネントの名前であることに注意してください。
2.bundle.jsonを変更または新規作成します。
新しいコンポーネントを元のサブシステムに追加するには 2 つの方法があり、1 つは 2 番目のポイントで説明したように、元の Bundle.json ファイルにコンポーネントを追加する方法です。もう1つは、新しいものを作成することです。どちらの場合も、bundle.json ファイルは、対応するサブシステムが配置されているファイル ディレクトリにあることに注意してください。//build/subsystem_config.json でこのサブシステムに対応するパス情報を変更しない限り。Openharmony-Basics のコンパイルと構築を参照してください。
アカウント サブシステムを例として、新しいサブコンポーネント os_account_test を追加します。
まず、base/account の下に os_account_test ディレクトリを作成し、このディレクトリの下に新しい Bundle.json を作成します。内容は以下の通りです
{
"name": "@ohos/os_account",
"description": "Allowing apps to use OS account-related functions",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "base/account/os_account"
},
...
"component": {
"name": "os_account_test", # 新建的部件名称
"subsystem": "account", # 所属的子系统
...
},
"build": {
"sub_component": [ # 部件包含的模块的gn目标
...
],
"inner_kits": [
...
],
"test": [
...
]
}
}
}
BUILD.gn を追加
Base/account/os_account_test に新しい BUILD.gn を作成する場合は、次のように sub_component を追加します。
"//base/account/os_account_test:helloworld"
inner_kits とテスト
他のコンポーネントに提供するインターフェースがある場合はinner_kitsに記述する必要があり、テストケースがある場合はtestに記述する必要がありますが、Inner_kitsとtestは必須ではないので追加する必要はありません。
3. //productdefine/common/products/rk3568.json ファイルに「account:os_account_test」部分を追加します:{}
{
"product_name": "rk3568",
"product_company": "hihope",
"product_device": "rk3568",
"version": "2.0",
"type": "standard",
"product_build_path": "device/hihope/build",
"parts":{
"ace:ace_engine_standard":{},
"ace:napi":{},
"account:os_account_standard":{},
"account:os_account_test":{},
"barrierfree:accessibility":{},
......
}
}
この時点で、再コンパイルします。//out/rk3568/account/os_account_test/ ディレクトリで、新しく追加されたモジュールの下に実行可能ファイルまたは動的ライブラリを取得します。
さらに楽しいフォローアップ
1.Openharmonyのコンパイルと構築 - 上級パート2