定数のエクスポート

共用体を使用しているなどの理由で、インターフェースが Java 互換でない場合、Java 環境への定数(列挙型値)のエクスポートが望ましいことがあります。このようなときには hidl-gen -Ljava-constants … を使用することができます。パッケージ内のインターフェース ファイルからアノテーション付きの列挙型宣言が抽出され、[PACKAGE-NAME]-V[PACKAGE-VERSION]-java-constants という名前の java ライブラリが生成されます。エクスポートする列挙型宣言ごとに、次のようにアノテーションを付けます。

    @export
    enum Foo : int32_t {
      SOME_VALUE,
      SOME_OTHER_VALUE,
    };
    

必要に応じて、この型を Java 環境にエクスポートする際の名前を、インターフェース宣言で選択された名前と異なるものにすることができます。そのためには、アノテーション パラメータ name を追加します。

    @export(name="JavaFoo")
    enum Foo : int32_t {
      SOME_VALUE,
      SOME_OTHER_VALUE,
    };
    

Java の規則や独自の設定に合わせて列挙型の値に共通のプレフィックスを追加したい場合は、アノテーション パラメータ value_prefix を使用します。

    // File "types.hal".

    package android.hardware.bar@1.0;

    @export(name="JavaFoo", value_prefix="JAVA_")
    enum Foo : int32_t {
      SOME_VALUE,
      SOME_OTHER_VALUE,
    };
    

生成される Java クラスは次のようになります。

    package android.hardware.bar.V1_0;

    public class Constants {
      public final class JavaFoo {
        public static final int JAVA_SOME_VALUE = 0;
        public static final int JAVA_SOME_OTHER_VALUE = 1;
      };
    };
    

types.hal で宣言された列挙型の Java 型宣言は、指定されたパッケージ内のクラス Constants 内でグループ化されます。インターフェースの子として宣言された列挙型は、そのインターフェースの Java クラス宣言の配下にグループ化されます。