Bir HIDL arayüz dosyasına göre, Java HIDL arka ucu Java arayüzleri oluşturur,
Saplama ve Proxy kodu. Tüm skaler HIDL türlerini destekler
([u
]int
{8,16,32,64}_t, float, double,
ve
enum
s), ayrıca dizeler, arayüzler, güvenli_birleşme türleri, struct
türleri ile desteklenen HIDL türlerinin dizileri ve vektörleri. Java HIDL arka ucu
birlik türlerini veya fmq türlerini DESTEKLEMEZ. Android
11 sürüm, memory
desteği ekler ve
handle
tür.
Java çalışma zamanı, imzasız tam sayı kavramını yerel olarak desteklemediğinden,
tüm imzasız türler (ve bunlara dayalı sıralamalar) sessizce
eşdeğeri imzalanır.Örneğin, uint32_t
değerindeki işaretin int
haline gelir.
Java arayüzü. Değer dönüşümü yapılmaz; uygulama uzmanının
Java tarafı, imzalı değerleri imzalanmamış gibi kullanmalıdır.
Numaralandırmalar
Enum'lar, Java enum sınıflarını oluşturmaz ancak bunun yerine iç sınıfa çevrilir sınıfları içerir. Sıralama sınıfı başka bir enum sınıfından türetildiğinde bu sınıfın depolama türünü devralır. İmzalanmamış bir tam sayı türüne dayalı numaralandırmalar, eşdeğerdir. Temel tür temel tür bir öğe olduğundan, enum alanları/değişkenleri, sıfır numaralandırıcı olmadığında bile sıfırdır.
Örneğin, şu türe sahip bir SomeBaseEnum
:
uint8_t
:
enum SomeBaseEnum : uint8_t { foo = 3 }; enum SomeEnum : SomeBaseEnum { quux = 33, goober = 127 };
... şu hale gelir:
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; }
Ve:
enum SomeEnum : uint8_t { FIRST_CASE = 10, SECOND_CASE = 192 };
... şu şekilde yeniden yazılır:
public final class SomeEnum { static public final byte FIRST_CASE = 10; // no change static public final byte SECOND_CASE = -64; }
Yaylı Çalgılar
Java'da String
, utf-8 veya utf-16'dır ancak utf-8'e dönüştürülür
ortak HIDL türü olarak bulunur. Ayrıca String
HIDL'ye geçirildiğinde boş olmamalıdır.
Herkese açık kullanıcı adı ve bellek
Android 11, handle
ve
memory
tür. Bunlar android.os.NativeHandle
diline çevrilir
Sırasıyla android.os.HidlMemory
. Boş herkese açık kullanıcı adı geçerli olarak kabul edilirken, null
değildir.
Oluşturulan sunucu kodunda, alınan bellek ve işleyici bağımsız değişkenleri yalnızca
yöntem çağrısı kapsamında geçerlidir. Sunucu uygulaması,
ömür boyu, yinelenen dup()
yöntemleri kullanılarak yinelenmelidir. İlgili içeriği oluşturmak için kullanılan
döndürülen örnek, yöntem çağrısı dışında kullanılabilir ve tamamlandığında uygun şekilde kapatılmalıdır
ekleyebilirsiniz.
Oluşturulan client kodunda, herkese açık kullanıcı adları ve bellek örnekleri Çağrılan yöntemin giriş bağımsız değişkenleri olarak gönderilen, yinelenmesi veya saklanması gerekmez geçerlidir. Ancak herkese açık kullanıcı adları için alınan çıkış bağımsız değişkenleri, otomatik olarak oluşturulmuş koda dayanır ve işlem tamamlandığında düzgün bir şekilde kapatılmalıdır. Bu durum, bağımsız değişkenler, yöntemin döndürülen değerleri olarak görünür (tek dönüş değeri durumunda) veya eşzamanlı geri çağırma stili (birden çok dönüş değeri durumunda kullanılır).
Çoğaltma ve kapatma hakkında daha fazla bilgi edinmek için Java sınıflarıyla ilgili belgelere göz atın.
Diziler ve vektörler
Diziler Java dizilerine, vektörler de
ArrayList<T>
burada T uygun nesne türüdür, muhtemelen
sarmalama skaler türleri (ör. vec<int32_t> =>
ArrayList<Integer>
) içerir. Örnek:
takeAnArray(int32_t[3] array); returnAVector() generates (vec<int32_t> result);
... şu hale gelir:
void takeAnArray(int[] array); ArrayList<Integer> returnAVector();
Yapılar
Yapılar, benzer bir düzenle Java sınıflarına dönüştürülür. Örneğin, örnek:
struct Bar { vec<bool> someBools; }; struct Foo { int32_t a; int8_t b; float[10] c; Bar d; };
... şu hale gelir:
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(); }
Bildirilen türler
types.hal
içinde tanımlanan her üst düzey türün kendi .java'sı olur
çıkış dosyası olarak ayarlayın (Java'nın gerektirdiği şekilde). Örneğin,
types.hal
dosyası, iki ekstra dosyanın oluşturulmasına neden oluyor (Foo.java
ve Bar.java):
struct Foo { ... }; struct Bar { ... struct Baz { }; ... };
Baz'ın tanımı Bar'ın statik iç sınıfındadır (Bar.java
).