定数のエクスポート

共用体を使用しているなどの理由でインターフェースが 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 クラス宣言の配下にグループ化されます。