From f16c42333aa6b2de30a344dd68246d4a33d93e7d Mon Sep 17 00:00:00 2001 From: Android Partner Docs Date: Tue, 22 Aug 2017 10:41:24 -0700 Subject: Docs: Changes to source.android.com - 166080694 Devsite localized content from translation request a3d5a7... by Android Partner Docs - 166079245 Remove duplicate TOC entry to oob-users.html. by mheco - 166002955 Update builds for Oreo by Android Partner Docs - 165977566 Fixing bad conversion by hvm - 165977199 Edit links to point to public source files in AOSP. by cqn - 165962883 Add codename to CTS downloads page. by gdimino - 165955117 Integration of O branch into mainline. by gdimino - 165638251 Update July public Android security bulletin to remove QC... by Android Partner Docs - 165638198 Update June public Android security bulletin to remove QC... by Android Partner Docs - 165638174 Update May public Android security bulletin to remove QC ... by Android Partner Docs - 165638096 Update April public Android security bulletin to remove Q... by Android Partner Docs - 165528993 Update to Keymaster 2 and remove requirements language by daroberts - 165511119 Add Bluetooth verification / debug information by cqn - 165491345 Fixed link broken by file rename. by cqn - 165381648 Fixed broken image paths and renamed HCI Requirements file. by cqn - 165365185 Created high-level Bluetooth directory and added HTML ver... by cqn - 165335694 Devsite localized content from translation request 66a39c... by Android Partner Docs - 165246927 Update August 2017 bulletin with CVE-2017-0687 by daroberts PiperOrigin-RevId: 166080694 Change-Id: I2d3a8d77fa6a66c2099f13ba2e864545328fd17a --- en/devices/architecture/hidl-java/types.html | 161 +++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 en/devices/architecture/hidl-java/types.html (limited to 'en/devices/architecture/hidl-java/types.html') diff --git a/en/devices/architecture/hidl-java/types.html b/en/devices/architecture/hidl-java/types.html new file mode 100644 index 00000000..8cc2d258 --- /dev/null +++ b/en/devices/architecture/hidl-java/types.html @@ -0,0 +1,161 @@ + + + Data Types + + + + + + + +

Given a HIDL interface file, the Java HIDL backend generates Java interfaces, +Stub, and Proxy code. It supports all scalar HIDL types +([u]int{8,16,32,64}_t, float, double, and +enums), as well as strings, interfaces, struct types, and arrays +and vectors of supported HIDL types. The Java HIDL backend does NOT +support union types, native handles, shared memory, and fmq types.

+ +

As Java runtime does not support the concept of unsigned integers natively, +all unsigned types (and enums based on them) are silently treated as their +signed equivalents, i.e. uint32_t becomes an int in +the Java interface. No value conversion is performed; the implementor on the +Java side must use the signed values as if they were unsigned.

+ +

Enums

+

Enums do not generate Java enum classes but are instead translated into inner +classes containing a static constant definition for each enum case. If the enum +class derives from some other enum class, it inherits that class's storage type. +Enumerations based on an unsigned integer type are rewritten into their signed +equivalent.

+ +

For example, a SomeBaseEnum with a type of +uint8_t:

+ +
+enum SomeBaseEnum : uint8_t { foo = 3 };
+enum SomeEnum : SomeBaseEnum {
+    quux = 33,
+    goober = 127
+};
+
+ +

… becomes:

+ +
+public final class SomeBaseEnum { public static final byte foo = 3; }
+public final class SomeEnum {
+    public static final byte foo = 3;
+    public static final byte quux = 33;
+    public static final byte goober = 127;
+}
+
+ +

And:

+ +
+enum SomeEnum : uint8_t {
+    FIRST_CASE = 10,
+    SECOND_CASE = 192
+};
+
+ +

… is rewritten as:

+ +
+public final class SomeEnum {
+    static public final byte FIRST_CASE  = 10;  // no change
+    static public final byte SECOND_CASE = -64;
+}
+
+ +

Strings

+

Strings in Java are utf-8 or utf-16 but are converted to utf-8 +as the common HIDL type when transported. Additionally, a String +must not be null when passed into HIDL.

+ +

Arrays and vectors

+

Arrays are translated into Java arrays and vectors are translated into +ArrayList<T> where T is the appropriate object type, possibly +wrapping scalar types such as vec<int32_t> => +ArrayList<Integer>). For example:

+ +
+takeAnArray(int32_t[3] array);
+returnAVector() generates (vec<int32_t> result);
+
+ +

… becomes:

+ +
+void takeAnArray(int[] array);
+ArrayList<Integer> returnAVector();
+
+ +

Structures

+

Structures are translated into Java classes with a similar layout. For +example:

+ +
+struct Bar {vec<bool> someBools;
+  };
+  struct Foo {
+   int32_t a;
+   int8_t b;
+   float[10] c;
+   Bar d;
+  };
+
+ +

… becomes:

+ +
+class Bar {
+ public final ArrayList<Boolean> someBools = new ArrayList();
+};
+class Foo {
+ public int a;
+ public byte b;
+ public final float[] c = new float[10];
+ public final Bar d = new Bar();
+}
+
+ +

Declared types

+

Each top-level type declared in types.hal gets its own .java +output file (as required by Java). For example, the following +types.hal file results in two extra files being created (Foo.java +and Bar.java):

+ +
+struct Foo {
+ ...
+};
+
+struct Bar {
+ ...
+
+ struct Baz {
+ };
+
+ ...
+};
+
+ +

The definition of Baz lives in a static inner class of Bar (in Bar.java).

+ + + -- cgit v1.2.3