Gibt es eine universelle oder "fette" Klassendatei für Java?

8

Eine fette Binärdatei ist eine Binärdatei, die auf mehr als einer Architektur ausgeführt werden kann. Im Grunde besteht es aus einem Programm, das zweimal für jede Architektur einmal kompiliert und dann in dieselbe Datei geschrieben wird. Das wohl bekannteste Beispiel sind die "universellen" Binaries von Apple, die es ermöglichen, Programme für Intel- und Power-PC-Architekturen zu kompilieren und von derselben ausführbaren Datei auszuführen.

Dies war für Java nie ein Problem, da Java auf der JVM ausgeführt wird, sodass es von jedem von JVM unterstützten Computer ausgeführt werden kann. Allerdings ist Android jetzt sehr beliebt, und die VM von Android (Dalvik) ist nicht mit der JVM kompatibel. Gibt es eine Möglichkeit, den Code zweimal zu kompilieren und eine Klassendatei zu erstellen, die sowohl von der JVM als auch von Dalvik ausgeführt werden kann? Und wenn nicht, ist das überhaupt möglich?

    
Hassan 01.08.2012, 18:50
quelle

1 Antwort

5

Antwort: Ja.

Sie können eine universelle .jar -Datei erstellen, die sowohl JVM-freundliche .class -Dateien als auch eine Android-freundliche classes.dex -Datei enthält. Das Tool dx , das im Android SDK enthalten ist, gibt solche Dateien aus, wenn Sie die Befehlszeilenoption --keep-classes verwenden.

Beachten Sie, dass solche .jar -Dateien zwar auf JVMs und auf Android-Geräten konsumiert werden können, der Code auf diese Weise jedoch nicht sehr nützlich ist. Android-Anwendungen sind als .apk -Dateien verpackt und enthalten eine Android-Manifest-XML-Datei. Sie verwenden Android-spezifische APIs wie Activity , die auf der JVM nicht verfügbar sind.

Eine universelle .jar -Datei wäre meistens nützlich, wenn Sie das Laden einer Bibliothek in Runtime-Klassen durchführen möchten.

    
Jesse Wilson 03.08.2012, 01:16
quelle

Tags und Links