この記事は、Hongmeng OSアプリケーションの開発について学ぶためのビデオチュートリアルから洗練されたものです。
https://blog.csdn.net/dongyu1009/article/details/108685024
詳細を知りたい場合は、上記のWebページにアクセスして、ビデオチュートリアルスタディにアクセスしてください。
このドキュメントは長い間更新されています。ご注目ください。コメントや提案があれば、どうぞ提出してください、ありがとう!
1 Hongmeng OSとそのアーキテクチャ
1.1 Hongmeng OSとは何ですか?
Hongmeng OSは、Huaweiが独自に開発したオープンソースのオペレーティングシステムです。
一言で言うと、Hongmeng OSは、マイクロカーネルに基づいたフルシーンの分散オペレーティングシステムです。
- マイクロカーネル:セキュリティ、安定性、保守性を向上させます。
- 完全なシナリオ:モバイルデバイスに限らず、さまざまなハードウェアデバイスに適用できます。
- 分散:ユーザーにとって、Hongmeng OSを実行する複数のデバイスは、「スーパー仮想端末」を形成して、リソース、パフォーマンス、およびデータを共有できます。
Hongmeng OSアプリケーションはJava言語で開発する必要があり、その開発プロセスはAndroidとよく似ていますが、その基盤となるアーキテクチャはAndroidとは異なります。
1.2 Hongmeng OSのアーキテクチャ
2 DevEcoスタジオ
2.1 DevEco Studioとは
DevEco Studioは、IntelliJ IDEAコミュニティのオープンソースバージョンに基づいて構築された統合開発環境(IDE)です。
- DevEco Studio 1.0は、EMUIのカスタム開発に使用されます。
- DevEco Studio 2.0はHarmonyOSアプリケーションの開発に使用されます
2.2 DevEco Studioの機能
- スマートスクリーン、ウェアラブルデバイスなど、複数のデバイスの統合開発環境
- Java、Kotlin、C、C ++、JavaScriptなどを含む多言語コードの開発とデバッグをサポートします。
- FAおよびPAの迅速な開発をサポートします。
- マルチデバイスシミュレータをサポートします。現在、エミュレータはHuaweiの公式サーバーに配置されており、リモート接続を介してアクセスする必要があります。
2.3 DevEco Studioのインストール
ダウンロードアドレスは次のとおりです。https://developer.harmonyos.com/cn/develop/deveco-studio#download
JS設計インターフェースを使用する必要がある開発者は、Node.jsをダウンロードしてインストールする必要があります。
3基本的な概念と能力の使用法
3.1 Hongmeng OSアプリケーションパッケージ
HarmonyOSアプリケーションパッケージ(アプリケーションパッケージ)のサフィックスは.appで、これには複数のHAP(HarmonyOS機能パッケージ)を取得するためのものが含まれます。
HAPの2つのタイプ:エントリーとフィーチャー。
- エントリ:アプリケーションのメインモジュール。Windowsのexeファイルに相当します。同じデバイスタイプの場合は、エントリタイプのHAPが1つだけ必要です。これは、個別にインストールして実行できます。
- 機能:アプリケーションの動的機能モジュール。Windowsのdllファイルに相当します。UIインターフェース、クラスライブラリ、リソースなどを提供できます。
詳細については、公式の指示を参照してください:
3.2能力の概念と分類
能力は、Hongmeng OSアプリケーション開発の中核です。AndroidのActivityと同等ですが、Activityよりも強力で、UIインターフェースを提供するだけでなく、サービスとデータインターフェースも提供できます。
下の図に示すように、アビリティには2つのタイプのFAとPAが含まれ、PAには2つのタイプのサービスアビリティとデータアビリティが含まれます。
能力には、1つ以上の能力スライスが含まれます。AbilitySliceは、アプリケーションの単一ページとその制御ロジックの合計を指します。AbilitySliceページによって提供されるビジネス機能は、関連性が高いはずです。
詳細については、公式の指示を参照してください:
3.3能力のライフサイクル
- onStart():アビリティが作成されたときに1回だけトリガーされます。
- onActive():フォアグラウンドに入るとトリガーされます。
- onForeground():表示されるとトリガーされます。
- onBackground():非表示のときにトリガーされます。
- onInActive():交点が失われるとトリガーされます。
- onStop():アビリティが破壊されたときに1回だけトリガーされます。
詳細については、公式の指示を参照してください:
3.4能力ジャンプ
別の能力コードにジャンプします:
Intent secondIntent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.example.customtimer")
.withAbilityName("com.example.customtimer.SecondaryAbility")
.build();
secondIntent.setOperation(operation);
startAbility(secondIntent);
前の能力コードに戻る:
terminateAbility();
詳細については、公式の指示を参照してください:
4共通のコンポーネントとレイアウト
4.1共通コンポーネント-テキスト
テキストの作成:
// 创建文本对象
Text text = new Text(this);
// 设置布局参数设置
text.setLayoutConfig(config);
// 设置文本
text.setText("Hello, HarmonyOS!");
// 设置文字颜色
text.setTextColor(new Color(0xFF000000));
// 设置字体大小
text.setTextSize(50);
// 设置文字的居中方式
text.setTextAlignment(TextAlignment.CENTER);
// 在布局中添加文本框
myLayout.addComponent(text);
4.2共通コンポーネント-ボタン
ボタンの作成:
// 创建按钮
Button button = new Button(this);
// 设置按钮布局参数
LayoutConfig configButton = new LayoutConfig(LayoutConfig.MATCH_CONTENT, LayoutConfig.MATCH_CONTENT);
configButton.addRule(LayoutConfig.CENTER_IN_PARENT);
button.setLayoutConfig(configButton);
// 设置按钮文本
button.setText("我是一个按钮!");
// 设置按钮文本的字号
button.setTextSize(50);
// 监听按钮的单击事件
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
HiLog.info(lblInformation, "按钮已经被点击了!");
}
});
// 修改按钮的背景为灰色
ShapeElement shapeElement = new ShapeElement();
shapeElement.setRgbColor(new RgbColor(200, 200, 200));
button.setBackground(shapeElement);
// 在布局中添加按钮
myLayout.addComponent(button);
4.3線形レイアウト-DirectionalLayout
DirectionalLayoutは、内部コンポーネントを水平(水平)または垂直(垂直)に配置できます。
線形レイアウトの作成:
private DirectionalLayout myLayout = new DirectionalLayout(this);
線形レイアウトの方向を設定します。
myLayout.setOrientation(Component.HORIZONTAL);
中央揃えの方法はコンポーネントLayoutConfigのalignmentプロパティで設定でき、レイアウトの比率はウェイトで設定できます。
4.4相対レイアウトに依存するレイアウト
相対レイアウトを使用すると、各コンポーネントは、他の兄弟要素またはその親コンポーネントに対する相対位置を指定できます。
同じレベルのコンポーネントの位置関係を基準にして:
レイアウト位置(Java) | レイアウト位置(XML) | 解説 |
上記 | 上 | 同じレベルのコンポーネントの上側にあります。 |
未満 | 未満 | 同じレベルのコンポーネントの下側にあります。 |
開始 | 開始 | 同じレベルのコンポーネントの開始側にあります。 |
の終わり | の終わり | 同じレベルのコンポーネントの最後にあります。 |
の左 | の左 | 兄弟コンポーネントの左側にあります。 |
右の | 右の | 兄弟コンポーネントの右側にあります。 |
親コンポーネントとの相対的な位置関係:
レイアウト位置(Java) | レイアウト位置(XML) | 解説 |
ALIGN_PARENT_LEFT | align_parent_left | 親コンポーネントの左側にあります。 |
ALIGN_PARENT_RIGHT | align_parent_right | 親コンポーネントの右側にあります。 |
ALIGN_PARENT_START | align_parent_start | 親コンポーネントの先頭。 |
ALIGN_PARENT_END | align_parent_end | 親コンポーネントの端側。 |
ALIGN_PARENT_TOP | align_parent_top | 親コンポーネントの上側。 |
ALIGN_PARENT_BOTTOM | align_parent_bottom | 親コンポーネントの下にあります。 |
CENTER_IN_PARENT | center_in_parent | 親コンポーネントの中央。 |
5コンソール出力
5.1 HiLogおよびHiLogLabel
HiLogは、デバッグ、情報、警告、エラー、致命的、その他の方法を含むコンソール出力のデバッグに使用されます。
デバッグ方法 | 説明 |
debug(HiLogLabel label、String format、Object ... args) | デバッグ情報を出力する |
info(HiLogLabel label、String format、Object ... args) | 一般情報を出力する |
warn(HiLogLabelラベル、文字列形式、オブジェクト...引数) | 警告メッセージを出力する |
エラー(HiLogLabelラベル、文字列形式、オブジェクト...引数) | エラーメッセージを出力する |
fatal(HiLogLabelラベル、文字列形式、オブジェクト...引数) | 重大なエラーメッセージを出力する |
HiLogの出力には、HiLogLabelのサポートが必要です。
HiLogLabelの構築メソッドシグネチャは、パブリックHiLogLabel(int型、intドメイン、Stringタグ)です。各パラメータの意味は次のとおりです。
- タイプ:HiLogLabel类型、包括的HiLog.DEBUG、HiLog.ERROR、HiLog.FATAL、HiLog.INFO、HiLog.LOG_APP、HiLog.WARN。
- domain:サービスドメイン(Service Domain)を定義します。同様の出力では、同様のサービスドメインが使用されます。範囲は0x0〜0xFFFFFです。通常、最初の3桁はサブシステム(SubSystem)の名前で、最後の2桁は通常モジュール(Module)の名前です。
- tag:タグ名。
HiLogLabelは通常、静的変数として定義されます。一般的な方法は次のとおりです。
HiLogLabelの定義:
static final HiLogLabel lblInformation = new HiLogLabel(HiLog.LOG_APP, 0x00101, "测试");
HiLog出力方法:
HiLog.info(lblInformation, "Hi,Log!");
5.2 HiLogのフォーマット済み出力
HiLogはフォーマットされた出力をサポートしますが、基本的なJavaフォーマット文字列に基づいて、{private}および{public}識別子が追加されます。
HiLog.warn(label, "Failed to visit %{private}s, reason:%{public}d.", url, errno);
- {private}はプライベート出力を指定するために使用されます
- {public}は、公開出力として指定するために使用されます
6マルチスレッドとUIの更新
マルチスレッドは、ネットワークアクセスやデータベースアクセスなど、長時間待機するタスクを処理する必要があるタスクで使用できます。HarmonyOSでは、タスクディスパッチャー(TaskDispatcher)を使用して、さまざまなタスクを分散できます。タスクの優先度は、HIGH、DEFAULT、LOWに分けられます。
タスクディスパッチャー(TaskDispatcher)のタイプは次のとおりです。
- GlobalTaskDispatcher:グローバルコンカレントタスクディスパッチャー
- ParallelTaskDispatcher:並行タスクディスパッチャー
- SerialTaskDispatcher:シリアルタスクディスパッチャー
- SpecTaskDispatcher:独自のタスクディスパッチャー
タスクディスパッチャーを通じてUIを更新するためにUIスレッドに入るコードは次のとおりです。
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
// 更新UI界面
}
});
詳細については、公式の説明を参照してください: