导出常量

在接口不兼容 Java(例如由于使用联合类型而不兼容 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 类声明下。