"normales" Javaprogramm auf Android zum Laufen bringen
-
Hallo zusammen,
ich habe derzeit ein Problem mit der Kompatibilität zwischen javax.* und Android.
Vorweg:
Mir ist klar, dass man für Javaprogramme die auf Android laufen sollen, normalerweise eine eigene SDK, eigene Entwicklungsumgebung etc. braucht.Nur, so einfach geht das in meinem Fall nicht^^
Ich habe hier etwa ein dutzend relativ komplexe Java-Webanwendungen (Java Applets, mit bissl Javascript und HTML drum herum), die ich auf Windows7, für den Internetexplorer mit Net Beans IDE entwickelt habe.Ich muss diese Programme jetzt auf einem Tablet PC mit Android zum laufen bringen.
Ich habe nicht damit gerechnet, dass das auf Anhieb klappt.
Wenn ich die entsprechenden Links im Google Chrome Browser auf dem Android Tablet aufrufe, dann wird kein einziges Java-Steuerelement angezeigt.Nachdem ich mich etwas eingelesen hatte, fand ich schnell raus dass es unter Android die Pakete SWING und AWT nicht gibt, was wohl der Grund dafür ist.
Gut, ich könnte natürlich jetzt nochmal bei 0.0 anfangen und alle Programme in einer Android SDK neu entwickeln, aber ist ein wahnsinns Aufwand.
Deshalb meine Frage:
- Gibt es so eine Art Emulator oder ähnliches, mit der man AWT- und SWING Programm dennoch auf Android ausführen kann?Was würdet ihr an meiner Stelle machen?
Was kann man tun, dass man ein "normales" Javaprogramm auf einem Android zum laufen bringt?thx
-
So viel zur "Plattformunabhängigkeit" von Java. Bwahahaha.
Sorry lieber TE, aber das musste nun sein.Die Klassen sind einfach nicht vorhanden und portieren scheint nicht so einfach möglich zu sein - du wirst also um das neu schreiben nicht herumkommen.
-
Aber was spricht eigentlich dagegen, diese Klassen zu transportieren?
Kann man nicht "einfach" dieses Framework auf den Tablet PC kopieren?Und es gibt sicher keinen Emulator?
-
Glasux schrieb:
Aber was spricht eigentlich dagegen, diese Klassen zu transportieren?
Kann man nicht "einfach" dieses Framework auf den Tablet PC kopieren?AWT stellt praktisch die Schnittstelle zu den GUI-Funktionen das Systems her. Das heißt, dass dafür eine Menge nativer, systemabhängiger Code benötigt wird. Um AWT unter Android nutzen zu können, müsste dieser Code entsprechend angepasst werden. Das ist keine Trivialität.
Swing beinhaltet selbst glaube ich keinen nativen Code, basiert aber auf AWT. Deshalb hat man da das gleiche Problem.
-
Aber gibts da echt gar keinen workaround?
Denn ich bin ja sicher nicht der erste mit diesem Problem?
-
Sieht nicht so aus, und nein, du bist nicht der erste mit dem Problem:
http://www.google.com/search?sclient=psy&hl=en&site=&source=hp&q=java swing on android&pbx=1&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=MfG SideWinder
-
Meine Anwendungen basieren großteils auf vorgefertigte Java-Steuerelemente aus xMII (SAP MII).
Gibt es in der xMII Workbench eine Möglichkeit, sie irgendwie Android-kompatibel zu machen?
Ich habe alle Einstellungen durchgeschaut, aber ich finde nichts.Gibt es unter Android eigentlich ein eigenes(?) xMII?
-
Wenn man es gewagt ausdrücken möchte, dann ist es so, dass das Java unter Android und das "normale" Java nur die Syntax gemeinsam haben.
Apps werden unter Android zwar in Java programmiert, jedoch hat dies nichts mit Java ME oder dem gewohnten Java zu tun. Das sieht man schon daran, dass Java-Klassen in einen eigenen Byte-Code (den sogenannten Dex-Code), übersetzt werden. Die Android-eigene JVM, die Dalvik-Virtual-Machine, arbeitet auch nach einem anderen Prinzip (registerbasiert statt stackbasiert, Sandbox-Prozesse, für mobil optimiert), als die herkömmlichen JVMs. Das heißt, herkömmlicher Byte-Code ist prinzipiell erst mal völlig inkompatibel zu Dex-Byte-Code.
Für Android wurde eine Großteil der Java-Standard-Klassen nachimplementiert, wobei denen die Apache-Harmony-Implementierung zu Grunde liegt - soweit ich weiß.
Deswegen kann man grundlegend vom Gefühl her so programmieren, wie man es von Java gewohnt ist. Wenn es spezieller wird, wird es aber schwierig. Das fängt bei der Abndroid-GUI an, geht über eigene HTTP-Client-Klassen und hört bei fehlender DB-Treiber-Unterstützung (!) noch lange nicht auf. Alles, was man für Smartphone/Tablet-Apps braucht und Sinn macht gibt es aber entweder nachimplementiert oder Android-spezifisch.Es gibt (zum Glück) auch die Möglichkeit, herkömmliche JAR-Libs in Dex-Code zu übersetzen, unter der Voraussetzung, dass die JARs nur Klassen verwenden, die es auch unter Android gibt bzw. die ebenfalls nach Dex-Code übersetzt werden. Beispielsweise habe ich schon erfolgreich die Jsch-Lib (SSH-Verbindungen) in einer Android-App benutzt.
Da Android z. B. ein anderes GUI- und Benutzerführungskonzept (z. B. Activities) verfolgt als andere Systeme - insbesondere als Desktop-Systeme (was ja für Smartphones auch logisch ist) - wurden Bibliotheken wie AWT oder Swing nicht portiert. Wenn das überhaupt sinnvoll und möglich wäre.
Aus diesen und noch mehr Gründen können herkömmliche Java-Anwendungen, seien es Applets oder Java-ME-Anwendungen, nicht ohne Weiteres unter Android ausgeführt werden.
(Mit SAP MII kenne ich mich nicht aus.)