49 votes

Comment fonctionne Codename One ?

Je suis en train de prospecter des alternatives pour développer pour plusieurs plateformes mobiles, et j'ai trouvé Codename One qui utilise Java comme lingua franca au lieu de HTML/CSS/JS ou de langages de script.

Ce que je n'ai pas trouvé, c'est comment ça marche. Est-ce qu'il intègre une JVM avec l'application pour iOS et Win7, et utilise Dalvik pour Android ? Est-ce qu'il traduit le code source en natif, et avons-nous accès à ce code source ? Y a-t-il une autre magie, étant donné qu'ils promettent "aucun compromis" ? Quelles sont les limitations dont je dois être conscient en codant du Java agnostique ?

Frappe préventive : c'est une question sur Codename One, pas à propos de la plateforme que je devrais choisir, ou si je devrais opter pour le natif ou le web.

77voto

Shai Almog Points 12260

Codename One a une approche SaaS optionnelle, ce qui pourrait (et va probablement) changer à l'avenir pour s'adapter à de meilleures architectures. Notez que Codename One fournit également une option pour construire hors ligne ce qui signifie que les entreprises dont la politique interdit ce type d'architecture en nuage peuvent toujours utiliser Codename One, moyennant quelques frais généraux/complexités supplémentaires. Cela signifie également que vous pouvez l'utiliser gratuitement sans jamais travailler avec les serveurs de construction.

Actuellement, sur Android, le code Java standard est exécuté tel quel. La syntaxe Java 8 est traduite à l'aide de retrolambda pour toutes les plateformes lorsqu'elle est utilisée. Cela lui permet d'être compatible avec toutes les versions d'Android ainsi qu'avec les autres ports.

Sur iOS Codename One construit et open sourced ParparVM qui est un VM très conservateur. ParparVM dispose d'un GC concurrent (non bloquant) et est entièrement écrit en Java/C. Cela signifie effectivement qu'un projet xcode est généré et compilé sur les serveurs de construction, de sorte que c'est effectivement comme si vous aviez codé à la main une application native et donc "future proof" pour les changements apportés par Apple. Par exemple, avec les récents changements de 64bit et de bitcode dans les builds iOS, ParparVM n'a pas eu besoin de modifications pour se conformer à ces changements.

Dans le passé, Codename One utilisait XMLVM pour générer du code natif de manière très similaire, mais la solution XMLVM était trop générique pour les besoins de Codename One.

Les versions d'iOS sont compilées et signées sur les Macs dans le nuage à l'aide de xcode (l'outil de construction officiel d'Apple). Cela les rend compatibles avec les changements actuels/futurs d'Apple et permet aux développeurs d'utiliser Windows/Linux tout en ciblant iOS. Vous pouvez en savoir plus sur la compatibilité de ParparVM avec iOS. aquí .

Dans le passé, Codename One a supporté Windows Phone en utilisant un traducteur C# qui s'appuyait sur XMLVM, mais ce n'était pas une approche idéale. Remarquez que le backend XMLVM qui traduit vers C# est très différent de celui qui était utilisé auparavant pour traduire vers iOS. Codename One a choisi de abandonnez cet ancien backend car il n'était pas aussi puissant que le nouveau backend UWP et ne correspondait pas aux objectifs de Microsofts, qui va de l'avant et se concentre sur les aspects suivants UWP (Universal Windows Platform) .

Pour le support de Windows 10 desktop et Mobile, Codename One utilise iKVM pour cible UWP (Universal Windows Platform) et a mis en libre accès les modifications apportées au code original d'iKVM dans la base de données de l'entreprise. Dépôt github de Codename One .

Notez que les constructions UWP sont réalisées sur des machines Windows 10 dans le nuage, ce qui permet aux développeurs d'utiliser Mac/Linux ou des versions plus anciennes de Windows pour créer des applications Windows natives...

Les cibles de construction JavaScript qui sont disponibles au niveau des abonnés de l'entreprise utilisent TeaVM pour effectuer la traduction de manière statique. TeaVM prend en charge le threading en utilisant JavaScript en décomposant l'application d'une manière assez élaborée. Pour prendre en charge l'interface utilisateur complexe, Codename One utilise l'API HTML5 Canvas qui offre une flexibilité absolue pour la création d'applications.

Pour les constructions de bureau, Codename One utilise javafxpackager Comme les machines Mac et Windows sont toutes deux disponibles dans le nuage, la nature spécifique de la plate-forme de l'application de l'UE est très importante. javafxpackager n'est pas un problème.

Codename One se distingue par son approche de l'interface utilisateur, qui repose sur une "architecture légère" permettant à l'interface utilisateur de fonctionner de manière transparente sur toutes les plateformes et d'être développée presque entièrement en Java. Cette architecture est complétée par la possibilité d'intégrer des widgets "lourds" parmi les widgets "légers". Vous pouvez en apprendre davantage à ce sujet dans ce article de blog . Notez qu'à ce moment-là L'appairage fait l'objet de quelques améliorations et prend désormais en charge des utilisations plus élaborées telles que la stratification.

Un composant léger est écrit entièrement en Java, ce qui permet aux développeurs de prévisualiser l'application avec précision dans les simulateurs et le constructeur d'interface graphique.

Codename One obtient des performances rapides en dessinant à l'aide des API de jeu natives de la plupart des plateformes, par exemple OpenGL ES sur iOS.

Les technologies de base de Codename One sont toutes des sources ouvertes, y compris la plupart des éléments développés par Codename One lui-même. ParparVM mais aussi le bibliothèque complète, ports de plate-forme, outil de conception , habillage des appareils etc. Vous pouvez en savoir plus sur l'utilisation des sources Codename One aquí .

Pour information, Shai Almog, l'auteur de cette réponse, est le PDG de Codename One.

3 votes

Merci de votre attention, Shai ! Je pense que vous devriez le mettre dans votre FAQ, nous savons qu'il n'y a pas d'autre solution. réel magie qui se produit et j'aimerais savoir comment le perception de la magie fonctionne. Je vais probablement l'essayer en phase d'évaluation !

4 votes

Il n'y a pas de phase d'évaluation pour Codename One, notre intention est de toujours avoir une option gratuite raisonnable pour les développeurs, sans conditions. Comme le produit est open source, il est important pour nous d'apporter une partie de cette liberté dans les services SaaS également.

0 votes

Désolé, je me suis mal exprimé :P Actuellement, je ne cherche que des alternatives, puis nous aurons une phase d'évaluation, pour voir comment les technologies répondent à nos besoins.

11voto

san Points 79

Codename one a adopté une approche très équilibrée de la portabilité. Je voudrais ajouter un commentaire pragmatique.

Du côté de l'interface utilisateur, CN1 peint toute son interface utilisateur sur une toile fournie par la plate-forme. Elle essaie d'imiter l'aspect et la convivialité natifs de la plate-forme, si vous le choisissez, mais elle n'a pas plus de succès que Swing avec son "aspect et la convivialité natifs de la plate-forme", parce que la plate-forme native change constamment, et que l'aspect et la convivialité "natifs" sont toujours en retrait et, dans la plupart des cas, ne sont pas tout à fait corrects.

Mais, si vous choisissez un look and feel indépendant de la plate-forme (ce qui est en quelque sorte la tendance actuelle), vous n'êtes en aucun cas limité par le jeu de composants par défaut de Codenameone : c'est exactement comme Swing avec son look and feel multiplateforme ("Metal", etc.). Ce qui est une bonne chose.

Du côté du langage : sur iOS, c'est java compilé en C qui est ensuite lié à l'Objective-C écrit à la main, et il n'y a pas de VM groupée, seulement une couche de portabilité. Le plus important ici est le fait que java est compilé en C et non en Objective-C, ce qui le rend plus rapide que le code Objective-C idiomatique, parce qu'il fait des invocations de méthodes virtuelles ou, plus souvent, directes, au lieu de la lenteur de la répartition des messages de l'Objective-C. Ce qui est une bonne chose.

Il peut également sembler un peu plus rapide sur Android, car, tout en utilisant Dalvik/Art, il n'utilise pas l'interface utilisateur native d'Android qui est encombrante par rapport à celle du CN1. La création d'une interface utilisateur dynamique peut donc être plus rapide en cours d'exécution, ce qui est une bonne chose.

L'un des points forts de l'approche CN1 est son émulateur (mis en œuvre sur un canvas JavaFX de bureau) que vous utilisez pour développer des logiciels. L'émulateur utilise le même code d'interface utilisateur et les mêmes API de portabilité que sur les plateformes mobiles et vous permet d'utiliser l'IDE de votre choix pour le débogage. Il redémarre rapidement, et le cycle édition-compilation-exécution est très durable par rapport à Android. Ce qui est bien.

Le deuxième point fort (le principal !) est la nature ouverte de leur bibliothèque d'interface utilisateur, tout le code natif et le traducteur bytecode vers C. Si vous faites quelques efforts, vous pouvez éviter de construire des ports Android/iOS sur leurs fermes et vous détacher de leur révision particulière du produit (mais pas de quelques services à valeur ajoutée qu'ils offrent, qui ne sont pas open source !) En fonction de votre situation, cela peut (ou ne peut pas !) être assez bon pour vous !

Le point faible de Codenameone est sa maturité moins qu'idéale, ce qui signifie que vous pouvez facilement vous tirer une balle dans le pied en utilisant des composants d'interface utilisateur de base, si vous les utilisez de la manière dont ils n'étaient pas destinés à être utilisés. Cela signifie également que sa couche de portabilité Java n'est pas assez grande (et comporte des trous) pour couvrir les besoins de tout le monde, et que vous devrez peut-être utiliser le langage natif à certains endroits, et porter d'autres bibliothèques purement Java également.

De plus, l'état actuel des performances graphiques n'est pas optimal ; si vous avez un tas de texte à l'écran, vous manquerez facilement la limite de temps de 16msec pour l'animation/peinture fluide, cela peut être contourné par le double-buffering, mais cela a aussi ses limites. Heureusement, il y a encore de la place pour l'optimisation dans l'implémentation sur les deux plateformes principales, espérons qu'ils vont l'améliorer.

Dans l'ensemble, Codenameone a un bon créneau en tant que cadre multiplateforme pour plusieurs classes d'applications ; vous pouvez trouver une valeur dans leurs services, aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X