Codename One ist eine mobile, plattformübergreifende Umgebung für Java- und Kotlin-Entwickler. Es kann Java-Bytecode in native ausführbare Betriebssystemdateien (iOS, Android, UWP usw.) kompilieren. Es handelt sich um eine vollständige mobile Plattform mit virtuellen Maschinen, Simulator, Designtools (visuelles Theme/Builder/CSS), IDE-Integrationen, Ports für mehrere Betriebssysteme und vielem mehr. Es bietet vollständigen Zugriff auf den zugrunde liegenden nativen Betriebssystemcode (z. B. Objective-C, C#, Dalvik/ART) über eine tragbare Abstraktion, die eine 100-prozentige Wiederverwendung des Codes ermöglicht.
Im Gegensatz zu Emulatoren, die Sie in Android usw. sehen können, verwendet Codename One einen Simulator. Dies bedeutet, dass es auch beim Debuggen schnell startet. Sie können IDE-Funktionen wie das Neuladen von Live-Code nutzen, um Code zur Laufzeit zu ändern usw.
Das bedeutet einen schnelleren Debugging-Zyklus und einen schnelleren Entwicklungsprozess!
Wählen Sie aus einer großen Auswahl an Geräte-„Skins“, um zu sehen, wie Ihre App auf bestimmten Geräten aussehen wird. Der Skin berücksichtigt Faktoren wie Auflösung und Gerätedichte, um eine pixelgenaue Darstellung Ihrer App zu ermöglichen, so wie sie auf dem echten Gerät erscheinen würde. Der Wechsel zwischen den Geräte-Skins erfolgt nahezu augenblicklich.
Hier können Sie Skins in ihrem eigenen Open-Source-Projekt bearbeiten und beisteuern.
Interagieren Sie zur Laufzeit mit den APIs Ihrer Anwendung über die interaktive Groovy-Konsole. Überprüfen Sie den Anwendungsstatus oder experimentieren Sie mit Änderungen, während die App ausgeführt wird.
Dadurch können Sie Probleme untersuchen und experimentieren, ohne auch nur den geringen Aufwand einer Neukompilierung in Kauf nehmen zu müssen.
Mit dem Simulator können Sie die Funktion „Geänderte Klassen neu laden“ in IntelliJ (in NetBeans „Codeänderungen anwenden“ genannt) nutzen, sodass Änderungen, die Sie an Ihrem Java-Quellcode vornehmen, sofort auf Ihre bereits laufende App im Simulator angewendet werden.
Beachten Sie, dass dies der interaktiven Konsole häufig überlegen ist, es jedoch Einschränkungen gibt, z. B. die Möglichkeit, Methoden hinzuzufügen/die Struktur des Codes zu ändern. Diese Beschränkungen gelten nicht für die interaktive Konsole!
Wenn Sie Änderungen am CSS-Stylesheet Ihrer App vornehmen, werden die Änderungen sofort im Simulator widergespiegelt. Dazu gehört das Ändern Ihres Designs, Ihrer Bilder, Schriftarten usw. Alle Änderungen werden beim Speichern sofort aktualisiert, ein erneutes Laden/Aktualisieren oder ähnliches ist nicht erforderlich!
Dies macht das Gestalten einer Anwendung bemerkenswert einfach und schnell.
Verwenden Sie den leistungsstarken Komponenteninspektor, um die Hierarchie der UI-Komponenten in Ihrer App zu durchsuchen. Mit diesem Tool können Sie ganz einfach herausfinden, woher die zusätzliche Polsterung kommt oder warum etwas nicht so ausgerichtet ist, wie Sie es möchten. Sie können auch die UIID (Selektor) einer Komponente zur Laufzeit ändern, um zu sehen, wie sie sich auf die Benutzeroberfläche auswirkt und um zu sehen, welche Komponente in der Hierarchie einem Element im Komponentenbaum zugeordnet ist (DOM-Äquivalent).
Sehen Sie sich mit dem Netzwerkmonitor alle Netzwerkverbindungen an, die Ihre App herstellt. Dieses wertvolle Tool ist praktisch, wenn Sie herausfinden möchten, warum eine HTTP-Anfrage bei Ihnen nicht funktioniert. Überprüfen Sie die Header und Textkörper sowohl der Anfrage als auch der Antwort. Sie können das Netzwerk sogar drosseln, um eine langsame Netzwerkverbindung zu simulieren.
Verwenden Sie das Tool Test Recorder, um Komponententests für Ihre App aufzuzeichnen. Sobald Sie mit der Aufzeichnung beginnen, werden Ihre Interaktionen in einem Komponententest gespeichert, der später abgespielt werden kann, um zu überprüfen, ob das Verhalten korrekt bleibt.
Anschließend können Sie die aufgezeichneten Tests mit Ihrem CI-Prozess verbinden, einschließlich automatisierter Gerätetests.
Codename One ist ein ausgereiftes Open-Source-Projekt, dessen Wurzeln auf Sun Microsystems (2006) zurückgehen, wo eine seiner Kernkomponenten entwickelt und als Open-Source-Lösung bereitgestellt wurde. In diesem Video erfahren Sie mehr über seine Geschichte und seine Funktionsweise.
Codename One-Apps funktionieren wie native Apps, da es sich um echte native Apps handelt.
Sie werden mithilfe der offiziellen Build-Tools der Zielplattform statisch in native Binärdateien kompiliert.
Auf Plattformen, die Java nicht nativ unterstützen, wie z. B. iOS, wird der JVM-Bytecode der App zunächst in eine Form transpiliert, die von den nativen Build-Tools akzeptiert wird. Unter iOS wird der JVM-Bytecode der App in einem echten Xcode-Projekt in C-Quellcode umgewandelt. Da Java auf Android nativ unterstützt wird, ist eine solche Transformation nicht erforderlich. Das App-JAR ist direkt in einem Android Studio Gradle-Projekt gebündelt, das direkt mit den Android SDK-Build-Tools erstellt werden kann.
Sie können auf das Bild klicken, um es zu vergrößern, oder hier eine PDF-Version ansehen.
TIPP: Wir stellen derzeit auf Maven um und haben eine neue, einfachere Methode zum Erstellen von Projekten entwickelt. Schauen Sie sich https://start.codenameone.com an, um jetzt loszulegen.
Es gibt viel über Codename One zu wissen. Dieses dreiminütige Video bietet einen sehr prägnanten Überblick auf hohem Niveau. Beachten Sie, dass es hier ähnliche Videos für Eclipse, IntelliJ/IDEA und Netbeans gibt:
Codename One kann problemlos mithilfe von Bibliotheken von Drittanbietern erweitert werden, die nativen Betriebssystemcode enthalten können. Eine ausführliche Liste dieser Bibliotheken (cn1libs) finden Sie hier. Die Bibliotheksliste wird automatisch basierend auf diesem Github-Projekt generiert.
Weitere Informationen zu Codename One und seinen Funktionen finden Sie auf der Hauptseite. Eine umfangreiche Liste mit Dokumentationen und Tutorials finden Sie hier.
Im Download-Bereich können Sie mit der Binärdatei und der Vogelperspektive beginnen. Weitere wichtige Links sind:
HINWEIS: Wir sind gerade dabei, von Ant auf Maven zu migrieren, was den Prozess für die Erstellung aus dem Quellcode vereinfacht. Anweisungen zum Erstellen älterer Ants finden Sie unter Ant Quick Start.
Die Einrichtung wird in diesem Artikel und Video ausführlich behandelt.
WICHTIG: Für die Erstellung von Codename One ist derzeit JDK 8 erforderlich. Sie können JDK 11 nicht verwenden, da einige Untermodule -source 1.5
und -target 1.5
verwenden müssen, um die Abwärtskompatibilität mit Teilen der Toolchain aufrechtzuerhalten.
git clone https://github.com/codenameone/CodenameOne
cd CodenameOne/maven
mvn install
Dadurch wird Codename One in Ihrem lokalen Maven-Repository erstellt und installiert. Dieser Vorgang kann eine Weile dauern, da Abhängigkeiten mit einer Größe von ca. 1 GB automatisch heruntergeladen werden.
Um die Archetyp-Projekte aus dem Quellcode zu erstellen, sollten Sie sich das Repository cn1-maven-archetypes ansehen und es auch erstellen:
git clone https://github.com/shannah/cn1-maven-archetypes
cd cn1-maven-archetypes
mvn install
Nachdem Codename One nun in Ihrem lokalen Maven-Repository installiert ist, können Sie diese Version in einem Projekt anstelle der Release-Version verwenden. Mit dem Codename One initializr kann schnell ein neues Testprojekt generiert werden.
Öffnen Sie nach dem Herunterladen und Extrahieren des Projekts dessen pom.xml-Datei und suchen Sie nach den Eigenschaften <cn1.version>
und <cn1.plugin.version>
. Ändern Sie diese dann so, dass sie auf die Version verweisen, die von mvn install
in Ihrem lokalen Maven-Repository installiert wurde. Die lokal erstellte Version ist normalerweise eine SNAPSHOT-Version (z. B. 7.0.21-SNAPSHOT).
Quellen beschaffen und aufbauen
$ git clone https://github.com/codenameone/CodenameOne
$ cd CodenameOne
$ ant
Ausführen von Unit-Tests
$ ant test-javase
Laufende Proben
Das Samples-Verzeichnis enthält eine wachsende Anzahl von Beispielanwendungen. Bei diesen Beispielen handelt es sich nicht um Demos, sondern um Beispiele für die Verwendung von APIs.
Sie können die Beispiel-Runner-App über die Befehlszeile starten, indem Sie Folgendes verwenden:
$ ant samples
Die iOS-VM von Codename One ist ziemlich einzigartig und ebenfalls Open Source. Weitere Informationen dazu finden Sie im entsprechenden Ordner in diesem Repository.
ParparVM ist eine einzigartig konservative VM, die Java-Bytecode in C-Code übersetzt. Dadurch werden native Leistung und Zugriff gewährleistet und gleichzeitig ein Sicherheitsnetz bereitgestellt. Dieser Ansatz gibt es nur bei Codename One und ist für die zukünftige Kompatibilität unerlässlich!
Apple neigt dazu, Dinge abrupt zu ändern, z. B. 64-Bit-Unterstützung, Bitcode usw. Da ParparVM ein Standard-Xcode-Projekt generiert, waren für keine dieser tektonischen Änderungen Codeänderungen erforderlich. Es ist, als ob Sie das Projekt selbst von Hand codiert hätten!
Sie können das resultierende Projekt sogar in xcode öffnen und es direkt auf dem iOS-Gerät debuggen oder profilieren. Dies liefert viele nützliche Informationen wie lesbare Callstacks und wertvolle/umsetzbare Leistungsverfolgung ...
Herkömmliche Compiler scheitern in diesen Fällen.
Codename One unterhält einen Zweig von iKVM, einer JVM für CLR. Dieser geänderte Port ermöglicht es uns, die Universal Windows Platform-Implementierung von Codename One nativ auf Windows 10-Geräten auszuführen.
Wir bei StackOverflow bieten Unterstützung, wenn Sie mit codenameone taggen. Sie können dort alles fragen und wir versuchen, sehr schnell zu reagieren. Der StackOverflow-Link dient auch als hervorragende Community-gesteuerte FAQ, da er Benutzerfragen buchstäblich in Antworten umwandelt.
Codename One verfügt über eine Diskussionsgruppe, in der Sie Fragen stellen können. Aufgrund der Natur dieser Gruppe versuchen wir jedoch, Diskussionen über die Quelle einzuschränken. Das Diskussionsforum ist für eine einfachere Nutzung gedacht und komplexere Quellcode-Hacks/native Kompilierung könnten dort zu Lärm führen.
Der Dank geht an diese wunderbaren Menschen (Emoji-Taste):
beazl-peter | liannacasper | sergeyCodenameOne | ThomasH99 | Javier Anton | Diamant | Francesco Galgani |
kutoman | ramsestom | Maaartinus | Durank | ddyer0 | carlosverdier | Robert Edelmann |
Adalbert393 | Steve Hannah | digappsepp | Pavneet Singh | vprise | JrmyDev | Terry Wilkinson |
Jaanus Hansen | Yaakov Gesher | Michael Münch | saeder | Miguel Muñoz | Ahmed Aboumalwa | Fabio |
Piotr | Matthias Bay | Sanny Sanoff | McSym28 | Eric Leong | David Day | Nick Price |
Ahnaf Bin Azad | Octavio E Anino | Yash Pickel | Nina | FercueNat | ImmediandoSrl | davideprimasc |
DB107 | Ikko Eltociear Ashimine |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art sind willkommen! ❤️