HarmonyOS ラーニング パスの開発 - Java UI フレームワーク (PA コードを呼び出すための JS FA を自動生成するツールを使用)

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 を呼び出すためのチャネルを正常に確立したことを意味します。

シミュレータ検証効果

おすすめ

転載: blog.csdn.net/weixin_47094733/article/details/131249835