Codename one ha adottato un approccio molto equilibrato alla portabilità. Vorrei aggiungere un commento pragmatico.
Dal lato dell'interfaccia utente, CN1 dipinge tutta la sua interfaccia utente sulla tela fornita dalla piattaforma. Cerca di imitare l'aspetto e l'aspetto nativo della piattaforma, se lo si sceglie, ma ha lo stesso successo di Swing con il suo "aspetto nativo della piattaforma", poiché la piattaforma nativa cambia costantemente e "nativo l & f" manca sempre e nella maggior parte dei casi non sembra giusto.
Ma, se si sceglie l'aspetto indipendente dalla piattaforma (che è il tipo di tendenza attuale), non si è limitati dal set di componenti predefinito di Codenameone impostato in alcun modo: è proprio come Swing con il suo aspetto multipiattaforma e sentire ("Metallo" ecc.). Che è buono.
Dal lato della lingua: su iOS è java compilato in C che è quindi legato a Objective-C scritto a mano e non raggruppa VM, ma solo livello di portabilità. La cosa più importante qui è il fatto che java è compilato in C e non in Objective-C, che rendono più veloce il codice Objective-C idiomatico, perché fa invocazioni di metodo virtuali o, più spesso, dirette invece di lenta distribuzione di messaggi Objective C. Che è buono.
Potrebbe anche sembrare un po 'più veloce su Android, perché, mentre si utilizza Dalvik/Art, non utilizza l'interfaccia utente nativa di Android, che è ingombrante rispetto a quella di CN1. Questo può rendere la creazione di UI dinamica più veloce in runtime, il che è positivo.
Uno dei punti di forza dell'approccio CN1 è il suo emulatore (implementato su tela JavaFX desktop) che si utilizza per sviluppare software. L'emulatore utilizza le stesse API di interfaccia utente e portabilità come sulle piattaforme mobili e consente di utilizzare IDE di scelta per il debug. Si riavvia rapidamente e il ciclo di modifica della compilazione è molto sostenibile rispetto ad Android. Che è buono.
Secondo punto molto forte (quello principale!) è la natura aperta della loro libreria UI, tutto il codice nativo e il traduttore bytecode-c. Se dedichi qualche sforzo, puoi evitare di costruire porte Android/iOS nelle loro fattorie e slegarti dalla loro particolare revisione del prodotto (ma non da alcuni servizi a valore aggiunto che offrono, che non sono open source!). A seconda della situazione, questo potrebbe (o non potrebbe!) Essere abbastanza buono per te!
Punto debole di Codenameone è la sua maturità meno-poi-ideale, il che significa che puoi facilmente spararti nel piede usando i componenti di base dell'interfaccia utente, se li usi nel modo in cui non erano destinati ad essere usati. Significa anche che il suo livello di portabilità java non è abbastanza grande (e ha dei buchi) per coprire le necessità di tutti, e potresti dover usare nativo in alcuni posti, e portare anche altre librerie java pure.
Inoltre, lo stato corrente delle prestazioni grafiche non è ottimale; se si ottiene un mucchio di testo sullo schermo, si perderà facilmente 16msec fluid animation/repaint time limit, questo può essere aggirato dal doppio buffering, ma ha anche i suoi limiti. Fortunatamente, c'è ancora spazio per l'ottimizzazione nell'implementazione su entrambe le piattaforme principali, si spera che lo miglioreranno.
Nel complesso, Codenameone ha una buona nicchia come framework multipiattaforma per diverse classi di applicazioni; puoi trovare un valore anche nei loro servizi.
Grazie per l'attenzione, Shai! Penso che dovresti metterlo nelle tue FAQ, sappiamo che non c'è nessuna magia _real_ e che ti piace sapere come funziona la magia _perceived_. Probabilmente farò un tentativo in fase di valutazione! –
Non esiste una fase di valutazione per Codename One, la nostra intenzione è di avere sempre un'opzione libera ragionevole per gli sviluppatori senza vincoli. Poiché il prodotto è open source, è importante per noi portare con sé parte di quella libertà anche nei servizi SaaS. –
Mi spiace, mi sono espresso male: P Attualmente sto solo cercando alternative, poi avremo una fase di valutazione, per vedere come le tecnologie soddisfano le nostre esigenze. –