Premiers pas avec Codename One

##Installation et configuration #Mise en place

Installation du nom de code One dans NetBeans

Ces instructions supposent que vous avez téléchargé une version récente de NetBeans (actuellement 8.x), que vous l’avez installée et lancée.

  • Sélectionnez l’option de menu Outils-> Plugins [![Outils->Option de menu Plugin][1]][1]

  • Sélectionnez l’onglet Plugins disponibles

  • Vérifiez le plugin CodenameOne [![Assistant d’installation du plug-in Netbeans][2]][2]

  • cliquez sur le bouton “installer” ci-dessous. Suivez les instructions de l’assistant pour installer le plugin [![Assistant d’installation du plugin Netbeans étape 2][3]][3]

Installation du nom de code One dans Eclipse

Démarrez Eclipse et cliquez sur Help->Install New Software. Vous devriez obtenir cette boîte de dialogue

[![Eclipse Installer un nouveau logiciel][4]][4]

Collez https://www.codenameone.com/files/eclipse/site.xml pour l’emplacement avec lequel travailler et appuyez sur Entrée.

Sélectionnez les entrées et suivez l’assistant pour installer [![L’assistant d’installation d’Eclipse sélectionne les entrées][6]][6]

Installation du nom de code One dans IntelliJ IDEA

Téléchargez et installez IntelliJ/IDEA. ** Notez qu’Android Studio ne fonctionnera pas. **

Installez le plugin en utilisant le Plugin Center

Utilisez la fonctionnalité de recherche dans le centre de plugins pour trouver et installer le plugin Codename One.

[1] : http://i.stack.imgur.com/Pnw9n.png [2] : http://i.stack.imgur.com/17BLM.png [3] : http://i.stack.imgur.com/NakDU.png [4] : http://i.stack.imgur.com/zdPEe.png [5] : http://i.stack.imgur.com/DfgaQ.png [6] : http://i.stack.imgur.com/AuCxh.png

Qu’est-ce que le nom de code One et comment ça marche ?

Codename One est un ensemble d’outils pour le développement d’applications mobiles qui tirent une grande partie de son architecture de Java.

L’énoncé de mission de Codename One est :

Unifiez la tâche complexe et fragmentée de la programmation des appareils mobiles dans un ensemble unique d’outils, d’API et de services. En conséquence, créez un plus approche gérable du développement d’applications mobiles sans sacrifier le pouvoir/contrôle accordé aux développeurs.

Cela signifie effectivement apporter ce vieux mantra Java “Write Once Run Anywhere” (WORA) aux appareils mobiles sans “le réduire” au plus petit dénominateur commun.

Comment fonctionne le nom de code One ?

Codename One unifie plusieurs technologies et concepts en une seule façade :

  • API - résume les différences entre les différents appareils.
  • Plugin - le seul logiciel installé sur les machines clientes, il inclut les fonctionnalités suivantes :
    • IDE integration - preferences, completion, the ability to send a native build
    • Simulator - native device simulator that runs locally and allows debugging the application
    • Designer/GUI Builder - high level tools
  • Serveurs de construction - Les serveurs de construction acceptent les constructions de périphériques natifs envoyées par le plug-in et convertissent les fichiers binaires (JAR, pas les sources) en applications natives, comme expliqué ci-dessous.
  • Serveurs cloud - Les serveurs cloud fournissent des fonctionnalités telles que la notification push, la journalisation cloud, etc.

[![La chaîne d’outils Codename One][1]][1]

## Pourquoi créer des serveurs ?

Les serveurs de build permettent de créer des applications iOS natives sans Mac et des applications Windows natives sans machine Windows. Ils suppriment le besoin d’installer/de mettre à jour des chaînes d’outils complexes et simplifient le processus de création d’une application native en un clic droit.

Par exemple : étant donné que la création d’applications iOS natives nécessite une machine Mac OS X avec une version récente de xcode, Codename One maintient ces machines dans le cloud. Lorsque les développeurs envoient une version iOS, un tel Mac sera utilisé pour générer le code source C à l’aide de [ParparVM][2] et il compilera ensuite le code source C à l’aide de xcode et signera le binaire résultant à l’aide de xcode. Vous pouvez installer le binaire sur votre appareil ou créer un binaire de distribution pour l’Appstore. Étant donné que le code C est généré, cela signifie également que votre application sera “à l’épreuve du temps” en cas de modifications d’Apple. Vous pouvez également injecter du code natif Objective-C dans l’application tout en la gardant 100% portable grâce à la capacité “d’interfaces natives” de Codename One.

Les abonnés peuvent recevoir le code source C en utilisant la fonction d’inclusion des sources de Codename One et utiliser ces sources pour l’analyse comparative, le débogage sur les appareils, etc.

Il en va de même pour la plupart des autres plates-formes. Pour Android, J2ME et Blackberry, le code Java standard est exécuté tel quel.

La syntaxe Java 8 est prise en charge via [retrolambda][3] installé sur les serveurs Codename One. Ceci est utilisé pour convertir le bytecode de manière transparente jusqu’aux niveaux de syntaxe Java 5. La syntaxe Java 5 est traduite dans le sous-ensemble cldc JDK 1.3 sur J2ME/Blackberry pour fournir ces fonctionnalités de langage et ces API sur tous les appareils. Cela se fait à l’aide d’un processeur de bytecode basé sur un serveur basé sur retroweaver et une grande quantité de code personnalisé. Notez que cette architecture est transparente pour les développeurs car les serveurs de build résument la plupart des différences douloureuses entre les appareils.

Pourquoi ParparVM

Sur iOS, Codename One utilise [ParparVM][2] qui traduit le bytecode Java en code C et dispose d’un GC non bloquant ainsi que d’un support 64 bit/bitcode. Cette machine virtuelle est entièrement open source dans le [référentiel git de Codename One][4]. Dans le passé, Codename One utilisait [XMLVM][5] pour générer du code natif d’une manière très similaire, mais la solution XMLVM était trop générique pour les besoins de Codename One. [ParparVM] [2] dispose d’une architecture unique de traduction de code en C (similaire à XMLVM), à cause de cela Codename One est la seule solution de ce type qui peut ** garantir ** la future compatibilité iOS puisque la chaîne d’outils iOS officiellement prise en charge est toujours utilisé à la place des comportements non documentés.

NOTE : XMLVM pourrait le garantir en théorie, mais il n’est plus maintenu.

Les principaux avantages de ParparVM par rapport aux autres approches sont :

  • Vraiment natif - puisque le code est traduit en C plutôt que directement en code ARM ou LLVM, l’application est “plus native”. Il utilise les outils et approches officiels d’Apple et peut bénéficier de leurs avancées, par ex. dernières capacités de bitcode ou de profilage.

  • Bibliothèque de classes plus petite - ParparVM inclut un très petit segment des JavaAPI complets, ce qui donne des binaires finaux plus petits que les alternatives par ordre de grandeur. Cela correspond directement aux performances et à la surcharge de mémoire.

  • Simple et extensible - pour travailler avec ParparVM, vous avez besoin d’une compréhension de base de C. Ceci est crucial pour le monde en évolution rapide du développement mobile, car Apple change les choses à gauche et à droite, nous avons besoin d’une machine virtuelle plus agile.

Windows Phone/UWP

Codename One a 2 principaux ports de machine virtuelle Windows et 3 ou 4 pipelines de rendu dans ces ports.

L’ancien port Windows Phone utilisait XMLVM pour traduire le bytecode Java en C#. Notez que le backend XMLVM qui se traduit en C# est très différent de celui qui était utilisé dans le passé pour traduire le code pour iOS.

Codename One cible désormais UWP en exploitant une version modifiée d’iKVM pour créer des applications universelles Windows natives.

Port Javascript

Le port JavaScript de Codename One est basé sur le travail incroyable du [projet TeaVM] [6]. L’équipe derrière TeaVM a effectivement construit une JVM qui traduit le bytecode Java en code source JavaScript tout en conservant la sémantique des threads en utilisant une approche très imaginative.

Le port JavaScript permet aux applications Codename One non modifiées de s’exécuter dans un navigateur de bureau ou mobile. Le port lui-même est basé sur l’API HTML5 Canvas pour fournir une implémentation parfaite au pixel près de l’API Codename One.

REMARQUE : Le port JavaScript n’est disponible que pour les abonnés Enterprise de Codename One.

Ordinateur de bureau, Android, RIM et J2ME

Les autres ports de Codename One utilisent les machines virtuelles disponibles sur les machines/environnements hôtes pour exécuter le runtime. https://github.com/orfjackal/retrolambda[Retrolambda] est utilisé pour fournir les fonctionnalités du langage Java 8 de manière portable, pour les appareils plus anciens, retroweaver est utilisé pour apporter les fonctionnalités Java 5.

Le port Android utilise les outils Android natifs, y compris l’environnement de construction progressive dans les dernières versions.

Le port de bureau crée une application JavaSE standard qui est fournie avec le JRE et un programme d’installation.

REMARQUE : Le port Desktop n’est disponible que pour les abonnés de niveau professionnel de Codename One.

Composants légers

Ce qui distingue Codename One, c’est l’approche qu’il adopte pour l’interface utilisateur, où il utilise une “architecture légère”, permettant ainsi à l’interface utilisateur de fonctionner de manière transparente sur toutes les plates-formes. En conséquence, la plupart de l’interface utilisateur est développée en Java et est donc remarquablement portable et débogable. L’architecture légère inclut toujours la possibilité d’intégrer des widgets “lourds” en place parmi les “légers”.

Origine de l’architecture légère

Les composants légers remontent aux frameworks Smalltalk, cette notion a été popularisée dans le monde Java par Swing. Le swing était la principale source d’inspiration du prédécesseur de Codename One, LWUIT. De nombreux frameworks ont adopté cette approche au fil des ans, notamment JavaFX et plus récemment Ionic dans le monde JavaScript.

Dans le nom de code One

Un composant léger est un composant entièrement écrit en Java, il dessine sa propre interface et gère ses propres événements/états. Cela présente d’énormes avantages de portabilité puisque le même code s’exécute sur toutes les plates-formes, mais il comporte de nombreux avantages supplémentaires.

Les composants légers sont personnalisables à l’infini en utilisant l’héritage standard et la gestion prioritaire de la peinture/des événements. Puisqu’un composant léger est entièrement écrit en Java, les développeurs peuvent prévisualiser l’application avec précision dans les simulateurs et le constructeur d’interface graphique. Cela évite de nombreux pièges courants des autres solutions WORA où le comportement spécifique à la plate-forme a déjoué tout effort économisé. Par conséquent, tout l’effort économisé dans le codage a été perdu dans le débogage des bizarreries des appareils ésotériques uniquement.

Codename One atteint des performances rapides en dessinant à l’aide des API de jeu natives de la plupart des plates-formes, par ex. OpenGL ES sur iOS.

Versions dans le nom de code One

L’une des choses déroutantes à propos de Codename One est les versions. Étant donné que Codename One est un produit SaaS, la gestion des versions n’est pas aussi simple qu’un surnom 2.x ou 3.x. Cependant, pour se conformer à cette convention, Codename One fait des versions versionnées qui contribuent à la confusion générale.

Lorsqu’une version de Codename One est publiée, le numéro de version fait référence aux bibliothèques au moment de la publication. Ces bibliothèques sont ensuite gelées et mises à la disposition des développeurs qui utilisent la fonctionnalité [Versioned Builds][7]. Le plugin, qui inclut le concepteur ainsi que tous les développements qui ne sont pas liés aux versions versionnées, continue avec ses mises à jour régulières immédiatement après sa sortie. Il en va de même pour les serveurs de build qui passent directement à leur cycle de mise à jour standard.

[1] : http://i.stack.imgur.com/PZeI9.png [2] : https://github.com/codenameone/CodenameOne/tree/master/vm [3] : https://github.com/orfjackal/retrolambda [4] : https://github.com/codenameone/CodenameOne/ [5] : http://www.xmlvm.org/ [6] : http://teavm.org [7] : https://www.codenameone.com/how-do-i—get-repeatable-builds-build-against-a-consistent-version-of-codename-one-use-the-versioning- feature.html