{"id":1934,"date":"2013-06-18T22:15:47","date_gmt":"2013-06-18T20:15:47","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=1934"},"modified":"2013-06-18T22:15:47","modified_gmt":"2013-06-18T20:15:47","slug":"mit-robovm-gehts-fr-java-in-das-ios-land","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/06\/mit-robovm-gehts-fr-java-in-das-ios-land\/","title":{"rendered":"Mit RoboVM geht&rsquo;s f&uuml;r Java in das iOS-Land"},"content":{"rendered":"<p>Normalerweise nimmt eine JVM den Bytecode der Hauptklasse, l\u00e4dt zur Laufzeit Klassendateien nach, interpretiert diese und \u00fcbersetzt sie Zwecks Optimierung in Maschinencode. Dem gegen\u00fcber steht ein anderer Ansatz, der sonst eher typisch f\u00fcr klassische Programmiersprachen ist, genannt ahead-of-time-Compilation. Bei diesem Verfahren ermittelt ein Werkzeug zun\u00e4chst alle abh\u00e4ngigen Typen und generiert dann direkt Maschinencode f\u00fcr eine Plattform &#8212; kein Interpreter ist somit n\u00f6tig. F\u00fcr Java sind solche Compiler selten, aber wer Java auf iOS-Ger\u00e4ten nutzen m\u00f6chte, kommt darum nicht herum, denn Apple gestattet keine interpretierten Sprachen auf den kleinen Ger\u00e4ten. Daf\u00fcr springt RoboVM (<a href=\"http:\/\/www.robovm.org\/\">http:\/\/www.robovm.org\/<\/a>) ein, eine Open-Source-Software unter der GPL- und Apache-Lizenz, die Java-Programme direkt in Maschinencode (ARM bzw. x86 Code) \u00fcbersetzt. Zum Bauen der Zieldateien nutzt RoboVM unterschiedliche Tools, um eine Kette von Schritten zu realisieren: Zun\u00e4chst \u00fcbersetzt ein installierter LLVM den Bytecode in Assembler-Code, dann folgt ein Tool, was Assembler-Code in Bin\u00e4rcode umsetzt, und dann ein Linker f\u00fcr den letzten Schritt, der das Ergebnis zusammensetzt; Assembler und Linker kommen vom GCC. Die \u00dcbersetzung ist kein gro\u00dfer Akt, denn f\u00fcr RoboVM ist ein Eclipse-Plugin verf\u00fcgbar, in dem die App auch \u2013 zumindest beim Mac \u2013 im Simulator gestartet werden kann.<\/p>\n<p>RoboVM bietet den Entwicklern die Standard-Klassen der Java-Bibliothek sowie sie auch bei Android verf\u00fcgbar sind und bildet die Klassen der iOS-Bibliothek (genannt Cocoa) auf Java ab. Weiterhin integriert es die Typen vom Android-Paket und die OpenGL ES API, sodass Android-Anwendungen auch unter iOS abgebildet werden k\u00f6nnen. Interessant wird das Projekt auch durch eine Umsetzung von JavaFX, sodass die propriet\u00e4ren Cocoa-Bibliotheken nicht verwendet werden m\u00fcssen, und es im Prinzip m\u00f6glich ist, die gleiche Java-Anwendung auf iOS oder Windows, Linux, \u2026 zum Laufen zu bringen. Bisher ist RoboVM in einer fr\u00fchen Phase.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Normalerweise nimmt eine JVM den Bytecode der Hauptklasse, l\u00e4dt zur Laufzeit Klassendateien nach, interpretiert diese und \u00fcbersetzt sie Zwecks Optimierung in Maschinencode. Dem gegen\u00fcber steht ein anderer Ansatz, der sonst eher typisch f\u00fcr klassische Programmiersprachen ist, genannt ahead-of-time-Compilation. Bei diesem Verfahren ermittelt ein Werkzeug zun\u00e4chst alle abh\u00e4ngigen Typen und generiert dann direkt Maschinencode f\u00fcr eine [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-1934","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1934"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1934\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}