JS FA (Feature Skills) 呼び出し PA (Particle Skills) は、JS 拡張機能に似た Web 開発パラダイムに基づいた Ark 開発フレームワークによって提供される言語間能力呼び出しメカニズムであり、JS 機能と Java の間の転送方法を確立するために使用されます。機能 呼び出し、返されたデータの処理、およびイベント レポートのサブスクライブを行うためのチャネル。開発者は、FA を使用して PA メカニズムを呼び出してアプリケーション開発を行うことができますが、このメカニズムを直接使用すると、開発者が多くのテンプレート コードを手動で記述する必要があり、テンプレート コードが業務コードと結合する可能性があるため、コードの保守性と可読性が低くなります。
開発効率を向上させるために、開発者は DevEco Studio 環境で js2java-codegen ツールを使用して JS FA 呼び出し PA コード (現在は InternalAbility 呼び出しメソッドのみをサポート) を自動的に生成し、FA 呼び出し PA アプリケーションの開発を迅速に完了できます。開発者は、このツールを使用して簡単な構成と注釈を追加するだけで、FA コール PA テンプレート コードのほとんどの記述を完了できます。同時に、ビジネス コードをテンプレート コードから効果的に分離し、コードの保守性と信頼性を高めます。 。
説明する
JS FAからPAへの呼び出しについて詳しくは、「JS FAからPAへの呼び出し方法」を参照してください。
js2java-codegen ツールの概要
js2java-codegen は、JS FA 呼び出し PA コードを自動的に生成するためにツール チェーンによって提供される補助開発ツールです。ユーザーが記述した業務コードとは別に、ユーザーのソースコードに基づいてFAがPAを呼び出すために必要なテンプレートコードを生成できます。
js2java-codegen ツールがサポートする FA 呼び出し PA の実装方式は InternalAbility 型であり、現在、Ability 型をサポートしていません。開発者は設定が完了したら、実際のビジネスロジックを含むInternalAbilityクラスと登録が必要なAbilityクラスを記述し、InternalAbilityクラスに対応するアノテーションを追加するだけで、js2java-codegenでFAの構築が完了します。コンパイルプロセス中に PA チャネルを呼び出します。その後、開発者は、JS 側で js2java-codegen ツールによって生成された JS インターフェイスを呼び出して、Java 側の機能を呼び出すだけで済みます。
js2java-codegen ツールによって生成されるテンプレート コードには、Java コードと JS コードが含まれます。このうち、Java コードはバイトコード ファイルに直接コンパイルされ、登録および登録解除ステートメントは対応するアビリティ クラスに自動的に追加されるため、開発者は注意を払う必要はありませんが、JS コードではコンパイルが必要です。ユーザーが手動で呼び出すため、開発者はコンパイル前に設定する必要があります。適切な JS コード出力パス。
この機能は、HarmonyOS SDK のツールチェーンのバージョン 2.2.0.3 以降でサポートされています。
注釈の説明
js2java-codegen ツールは、アノテーションを通じて情報を取得し、開発者が必要とするコードを生成します。したがって、ユーザーが開発を支援するためにこのツールを使用したい場合は、次の 3 つのアノテーションの使用法を理解する必要があります。
- @InternalAbility アノテーション
InternalAbility として使用され、実際のビジネス コードを含むクラス (略して InternalAbility クラス) のクラス アノテーション。ファイル内のパブリックのトップレベル クラスのみがサポートされ、インターフェイス クラスとアノテーション クラスはサポートされません。
パラメータ registerTo が含まれており、その値は登録されるアビリティ クラスの完全名です。特定の使用例については、Java 側のコード作成セクションを参照してください。
使用例は次のとおりです。これは、Service クラスが InternalAbility クラスであり、com.example パッケージにある Abability という名前の Abability クラスに登録されていることを意味します。
@InternalAbility(registerTo = "com.example.Ability")
public class Service{}
- @ExportIgnore アノテーション
メソッド アノテーションは、InternalAbility クラスの特定のメソッドに使用され、メソッドが呼び出しのために JS 側に公開されていないことを示します。パブリックメソッドに対してのみ有効です。
ユースケースは次のとおりです。これは、サービス メソッドが JS 側に公開されないことを意味します。
@ExportIgnore
public int service(int input) {
return input;
}
- @ContextInject アノテーション
SkillContext の注釈に使用されます。このクラスは HarmonyOS の Java API によって提供されており、開発者は API で提供される情報を取得できます。
使用例は次のとおりです。つまり、開発者は、abilityContext オブジェクトを使用して、API で提供される情報を取得できます。
@ContextInject
AbilityContext abilityContext;
新築
テンプレート コードを生成するツールの機能を体験したい場合は、DevEco Studio を使用して、JS フロント エンドを含む単純な携帯電話プロジェクトを作成し、それを使用して単純な FA 通話 PA アプリケーションを開発できます。
ツールスイッチとコンパイル設定
コードを生成する必要があるモジュールの下の build.gradle でスイッチを制御し、設定をコンパイルします。関数をすばやく検証したい場合は、エントリ モジュールの build.gradle を変更し、エントリ モジュールを通じて検証することを選択できます。
コンパイルパラメータは ohos ->defaultConfig にあります。次の設定を追加するだけです。開発者はここで JS テンプレート コード生成パスを設定する必要があります。これは、「jsOutputDir」に対応する値です。
// 在文件头部定义JS模板代码生成路径
def jsOutputDir = project.file("src/main/js/default/generated").toString()
// 在ohos -> defaultConfig中设置JS模板代码生成路径
javaCompileOptions {
annotationProcessorOptions {
arguments = ["jsOutputDir": jsOutputDir] // JS模板代码生成赋值
}
}
ツールスイッチはohosにあるので、以下のような設定を追加するだけです。値が true の場合はツールが有効になり、false または設定がない場合はツールが有効になりません。
compileOptions {
f2pautogenEnabled true // 此处为启用js2java-codegen工具的开关
}
Java側のコード記述
テンプレート コードの生成には、開発者が FA 呼び出し用の PA を提供する必要があるため、開発者は自分で InternalAbility クラスを作成し、そのクラスに @InternalAbility アノテーションを追加し、registerTo パラメーターを完全な名前に設定する必要があります。登録するアビリティクラス。(アビリティ クラスは、プロジェクト内の既存の MainAbility クラスを使用することも、新しいアビリティ クラスを作成することもできます)
呼び出すために FA に公開する必要がある InternalAbility クラスのメソッドは、パブリック型の非静的非 void メソッドのみにすることができ、それ以外の場合は公開されないことに注意してください。
単純な InternalAbility クラスは、MainAbility クラスと同じパッケージ内にある Service.java というファイル名でアノテーション付きで MainAbility クラスに登録されます。このクラスには、JS FA が呼び出す機能として add メソッドが含まれており、2 つの数値を加算する機能を実現しています。入力パラメータは 2 つの int パラメータで、戻り値は 2 つの数値の合計です。
package com.example.myapplication;
import ohos.annotation.f2pautogen.InternalAbility;
@InternalAbility(registerTo = "com.example.myapplication.MainAbility") // 此处registerTo的参数为项目中MainAbility类的全称
public class Service {
public int add(int num1, int num2) {
return num1 + num2;
}
}
コンパイル
js2java-codegen ツールはコンパイル プロセス中に自動的に呼び出され、テンプレート コードが自動的に生成され、チャネル確立プロセス全体が完了します。
メニュー バーで[Build] -> [Build HAP(s)/APP(s)] -> [Build HAP(s)] をクリックしてプロジェクトのコンパイルを完了します。js2java-codegen ツールは、実行中に PA チャネルの FA 呼び出しを完了します。コンパイルプロセスを確立します。
コンパイル プロセスでは、Java および JS のテンプレート コードが生成されます。JS テンプレート コードは、開発者がコンパイル設定で設定したパスにあり、その名前は InternalAbility クラスの名前に対応しています。一方、Java テンプレート コードは、エントリ > ビルド > 生成された > ソース > アノテーション > デバッグ > にあります。同じ名前の InternalAbility クラス package > InternalAbility class Name+Stub.java を作成すると、このクラスの呼び出しステートメントが MainAbility クラスのバイトコードに挿入されます。次の 2 つの図は、生成されたテンプレート コードの例です。
Java テンプレートのコード例
JSテンプレートのコード例
JS側のコード記述
ツールによって生成されたコードの使いやすさを簡単かつ直観的に確認するために、開発者は、entry > src > main > js >default > pages >index >index.js を変更することでJava 側の機能を呼び出し、その効果を表示することができます。フロントエンドページ。
JS側のFAインターフェースは、 import Service from '../../generated/Service.js' ;などのインポートで導入できます(from以降の値はコンパイル設定のパスと統一する必要があります。生成されたJSコードファイル名とクラス名はInternalAbilityクラス名と同じです。)
単純なindex.jsページは次のように実装されています。JS側インターフェースを呼び出し、1と10の2つのパラメータを渡し、返された結果をタイトルに出力します。これにより、アプリケーションが実行されている限り、 FA は PA を正常に呼び出します。
import Service from '../../generated/Service.js'; // 此处FA路径和类名对应之前的jsOutput路径以及InternalAbility的名字
export default {
data: {
title: "Result:"
},
onInit() {
const echo = new Service(); // 此处新建FA实例
echo.add(1,10)
.then((data) => {
this.title += data["abilityResult"]; // 此处取到运算结果,并加到title之后
});
}
}
結果の表示を容易にするために、同じディレクトリ内のindex.hmlにも少し変更を加えて、タイトルの内容のみがページに表示されるようにします。
<div class="container">
<text class="title">
{
{ title }}
</text>
</div>
結果検証
携帯電話エミュレータを起動し、起動が成功したらアプリケーションを実行します。次の表示が表示された場合は、js2java-codegen ツールが有効なテンプレート コードを生成し、FA が PA を呼び出すためのチャネルを正常に確立したことを意味します。
シミュレータ検証効果