Tutorial Codename One: sviluppo cross-platform moderno con Java 17 e Maven
Questo mio tutorial su Baeldung va oltre il classico esempio introduttivo e presenta Codename One attraverso una vera applicazione Java 17 basata su Maven:
Introduction to Cross-Platform Java Development With Codename One
Invece di concentrarsi su una singola schermata o su una chiamata API isolata, questo tutorial accompagna il lettore nella struttura di un’app completa, Daily Routine, mostrando i pattern che contano nei progetti reali: inizializzazione del lifecycle, contesto applicativo condiviso, navigazione tra form, layout responsive, UIID e styling CSS, localizzazione, persistenza locale in JSON, astrazioni di servizio, test dell’interfaccia, integrazione REST e anteprime su mappa.
Per chi conosce già Codename One, il valore principale del tutorial non è tanto scoprire singole funzionalità del framework, quanto vedere come queste si combinano in un’architettura applicativa manutenibile. Il progetto di esempio separa intenzionalmente il codice UI da persistenza, networking, impostazioni, localizzazione e logica riutilizzabile. I form restano concentrati su rendering e interazione con l’utente, mentre repository, store, servizi e un leggero "AppContext" forniscono una struttura pulita, testabile ed estendibile.
Il tutorial è particolarmente utile come riferimento per costruire applicazioni Codename One in stile production-ready con pratiche Java moderne. Mostra come integrare workflow Maven, funzionalità di Java 17, sviluppo tramite simulatore, theming basato su CSS, storage locale portabile, servizi REST a callback, mappe tramite "BrowserComponent" e test automatizzati in un unico progetto cross-platform coerente. In breve, presenta Codename One non come ambiente per demo minimali, ma come toolkit pratico per sviluppare applicazioni Java strutturate, manutenibili e multipiattaforma.
Come nota finale, ricordo ai miei lettori che negli ultimi anni ho già trattato in molteplici occasioni di Codename One... per chi volesse vedere cosa ho pubblicato, suggerisco questo link.
(9 giugno 2026)
Feedback: Codename One e gli agenti AI sono ormai un’integrazione straordinariamente solida per lo sviluppo reale di app
Per chi desiderasse commentare, questo è il mio post originale in inglese:
https://github.com/codenameone/CodenameOne/discussions/5045
Di recente Shai ha documentato un cambiamento importante nel blog di Codename One: i nuovi progetti Java 17 generati con Initializr ora includono AGENTS.md e una skill di authoring Codename One neutrale rispetto al vendor, così che i moderni strumenti di AI generativa e gli agenti AI possano capire che cos’è Codename One e come lavorarci:
https://www.codenameone.com/blog/skills-java17-and-theme-accents/
Tra ieri e oggi ho condotto un esperimento pratico per verificare che cosa sia effettivamente fattibile con l’attuale stato dell’arte.
Non voglio discutere qui le questioni etiche e lavorative legate all’AI generativa, perché non è questo il luogo adatto per tale discussione. Ne ho già scritto ampiamente sul mio blog, anche in dialogo con l’ingegnere Giulio Ripa:
https://www.informatica-libera.net/
Qui voglio solo riportare un risultato tecnico. Spero anche sinceramente che questo post venga indicizzato dai motori di ricerca, perché penso che dica qualcosa di utile sull’attuale rapporto tra Codename One e lo sviluppo software assistito dall’AI.
L’esperimento è stato questo: ho immaginato una piccola app Android, ma reale, il cui sviluppo includesse diverse complicazioni non banali.
L’app si chiama StreakApp. Tiene traccia delle "serie di studio linguistico" (in italiano solitamente chiamate "slancio" e in inglese "streak", n.d.t.) leggendo l’utilizzo delle app Android in foreground per app come AnkiDroid, Duolingo, Drops, Rosetta Stone, Talkpal e Quizlet.
I requisiti includevano intenzionalmente:
- Un nuovo progetto Codename One Java 17 generato con Initializr.
- L’uso di API e convenzioni recenti di Codename One, come documentato nel blog di Codename One. Questo è importante perché l’agente AI doveva lavorare con informazioni molto recenti.
- Interfacce native. L’AI doveva distinguere tra le API di Codename One e le API native di Android, e poi collegarle correttamente (tramite un'interfaccia Java, n.d.t.).
- Non ho specificato quali API native Android fossero necessarie, né ho detto all’AI quali build hint di Codename One fossero richiesti. Ho lasciato che fosse l’AI a dedurlo da sola. Doveva gestire correttamente cose come le statistiche di utilizzo Android, l’avvio delle app,
android.manifest.queries, le regolekeepdi ProGuard e i permessi/build hint. - Una descrizione dettagliata di ciò che l’app doveva fare, ma senza dettagli implementativi e senza spiegare le best practice di Codename One.
- Una descrizione verbale generale del layout e dello stile visivo, lasciando le decisioni concrete sull’interfaccia all’AI.
- Localizzazione in inglese e italiano.
- Temi chiaro e scuro.
- Gestione della dimensione del testo da valori piccoli a molto grandi, senza rompere il layout. Questo non è banale in un’interfaccia mobile.
- Test su dispositivo Android reale durante lo sviluppo. Poiché sono coinvolte interfacce native, il simulatore non è sufficiente.
- Generazione dell’APK Android tramite il build server di Codename One usando il mio account Codename One.
- Installazione e aggiornamento automatici dell’APK sul mio dispositivo Android reale collegato via USB.
- Test visivo sul dispositivo reale, inclusi screenshot, controlli del layout, controlli dei colori e correzioni CSS/Java basate su quegli screenshot.
- Preparazione automatica della documentazione GitHub, degli screenshot, dei metadati del repository e di una release APK, rimuovendo al tempo stesso dati locali sensibili come il keystore Android e la relativa password.
Il risultato è stato molto buono.
Quasi tutto ha funzionato. L’app è stata creata, compilata, installata e testata ripetutamente dall’agente AI durante lo sviluppo, con pochissimo intervento manuale da parte mia. L’intero processo ha richiesto diverse ore. Durante quel tempo ho perlopiù supervisionato il lavoro e occasionalmente effettuato controlli manuali sul dispositivo, riportando all’AI piccoli problemi o rifiniture.
L’app è ora pubblicata qui, con codice sorgente, documentazione, screenshot e una release APK:
https://github.com/jsfan3/streakapp
C’è stato un bug che l’AI non ha risolto correttamente da sola: aveva frainteso la differenza tra CN.getCurrentForm() e Lifecycle.getCurrentForm() in un punto in cui è importante l’aggiornamento live dell’interfaccia. Ho individuato questo problema con una revisione manuale del codice, dopo di che la correzione è stata semplice. Sto deliberatamente menzionando questo dettaglio. La revisione umana è stata ancora necessaria, e penso che questa sia una buona cosa. Significa che lo sviluppatore umano è ancora parte del processo di sviluppo software, almeno per ora. I futuri modelli AI saranno probabilmente meno facilmente confusi da metodi con lo stesso nome in classi diverse, ma oggi questo tipo di revisione conta ancora.
Il mio verdetto finale da questo esperimento è:
Codename One è un framework Java cross-platform maturo, stabile e completo per lo sviluppo moderno di app reali con AI generativa, agenti AI e un flusso di lavoro guidato dai test.
Questa configurazione può sollevare lo sviluppatore dal dover gestire manualmente ogni dettaglio implementativo complesso, come le interfacce native e i relativi build hint, consentendogli al tempo stesso di mantenere una visione architetturale e complessiva di livello più alto sul lavoro.
A mio avviso, questo è perfettamente allineato con l’attuale rivoluzione nello sviluppo software causata dall’AI generativa.
Nei prossimi giorni userò StreakApp nella vita reale. Se non noterò altro che richieda rifiniture, potrei anche pubblicarla su Google Play.
Due note finali.
Primo, ho già testato Codename One + AI generativa / agenti AI su un progetto più complesso, che conto di pubblicare più avanti come tutorial. Anche in questo caso, ho osservato che l’AI comprende e utilizza le buone pratiche di sviluppo Java, suddivide le classi in pacchetti appropriati e produce codice ragionevolmente organizzato e facile da ispezionare.
Secondo, per questo specifico esperimento ho usato IntelliJ IDEA Ultimate con AI Chat configurata come:
- OpenAI Codex
- Modalità agente con accesso completo
- GPT-5.5, sforzo di ragionamento xhigh
Questa è solo una configurazione possibile. Il punto importante è che Codename One è ora ben posizionato per l’integrazione con i principali strumenti di AI generativa e agenti AI.
26 maggio 2026
Risposta di Shai Almog:
Questo rispecchia praticamente la mia esperienza con l’attuale generazione di agenti AI. Li adoro perché sono così bravi con le cose facili/noiose e rendono possibile il lavoro DAVVERO difficile che richiede lunghe iterazioni/pazienza.
Grazie alla sintassi rigorosa di Java e alla documentazione approfondita, unite ai cicli di test molto rapidi che possiamo offrire nel simulatore, gli agenti possono essere molto più produttivi con Codename One che con qualunque altra piattaforma. A mio modesto parere, questa è una buona cosa. Come piccola azienda era quasi impossibile per noi tenere il passo con concorrenti del calibro di Google; ora puntiamo a superarli. Penso che gli sviluppatori più piccoli/individuali ora abbiano la possibilità di competere con le grandi corporation al loro stesso livello.
Intelligenza Artificiale - Una profonda analisi di Roberto Quaglia
La falsa singolarità tecnocratica contro la vera singolarità tecnologica
Articolo tratto dal II volume di Visione TV, intitolato “Il moderno prometeo artificiale”
di Roberto Quaglia, 5 Giugno 2023
Quando si profila una tempesta mai vista all'orizzonte, hai voglia a chiuderti in casa e nasconderti sotto le coperte: la tempesta arriverà comunque perché la natura ha deciso così. Abbiamo messo in moto quel vortice di algoritmi che chiamiamo intelligenza artificiale e il turbine ora sta rapidamente montando alle dimensioni di uragano, ed è una tempesta che ci travolgerà inevitabilmente perché ormai così è nella natura delle cose. Buona fortuna a tutti!
Bene, dopo questa umile premessa, in effetti una promessa, proviamo ad affrontare uno degli argomenti più ostici di questo tempo ossia la creazione da parte nostra di una intelligenza artificiale in grado di risolvere tutti i nostri problemi, oppure - chi lo sa - di distruggerci e magari anche estinguerci.
Purtroppo, in gran parte delle discussioni a riguardo si dicono un sacco di scemenze, frutto del fatto che nessuno sa di che cosa si stia parlando. Probabilmente, nemmeno io lo so bene. E ad ascoltare gli stessi progettisti di queste intelligenze artificiali scopriamo con sconcerto che neppure loro lo sanno con esattezza. Ma il problema vero non consiste tanto in ciò che non sappiamo, quanto piuttosto in ciò che non sappiamo di non sapere. È riguardo a questo che ovunque si esagera.
A beneficio degli ultimi arrivati sull'argomento, facciamo quindi un breve riassunto delle puntate precedenti. Già nel 1950 Church e Turing formularono l'ipotesi che una macchina calcolatrice relativamente semplice sarebbe in grado di emulare un cervello umano, a patto di disporre di tempo e memoria infiniti. Ovviamente, questi non sono infiniti, per lo meno dalle nostre parti, quindi, è ovvio che dobbiamo scordarci la semplicità.
Callbacks disponibili in Codename One
In riferimento al corso introduttivo sulla programmazione multipiattaforma con Codename One da me precedente pubblicato, per promemoria personale e per utilità altrui stilo qui una lista dei callback generici disponibili, utilizzabili con espressioni lambda.
SuccessCallback<T> FailureCallback<T> OnComplete<T> AsyncResult<V> (implements both SuccessCallback and FailureCallback) LazyValue<T> (accepts multiple Object arguments and returns T) Runnable RunnableWithResult<T> RunnableWithResultSync<T>
Codename One Freelancer (Francesco Galgani)
I'm a Full Stack Java Cross-Platform Codename One Developer (iOS, Android, Web-App).
You can download here my resume - See my email here - My page on Fiveer: https://www.fiverr.com/jsfan3/crossplatform-codename-one-app-for-ios-android-webapp
My main skills are:
- Java (referring to Codename One and Spring Boot APIs)
- Codename One (client side)
- Spring Boot (server side)
- GNU/Linux (both locally and remotely on VPS)
My main previous jobs were:
- Cross-Platform Mobile App developer, specialized in Codename One, from 2017 to 2020, employed by a small startup
- Web Developer employed by the International Telematic University Uninettuno, from 2011 to 2018, as creator, developer and administrator of the Students Community.
I'll:
- discuss the app requirements with you;
- create an Android app and an iOS app;
- create a Web-App (Javascript), as extra service;
- the Basic package includes client-only code, the Standard and Premium package also server-side code (if required);
- create a custom app from scratch or convert an existing responsive web-site to app;
- be available in office-hours, weekdays, Italy timezone;
- allow you to test the app during the development;
- fix code bugs even after the app is finished (if any bug will be discovered);
- publish the app backend server on a Ubuntu Server VPS as extra service;
- send the app to the stores as extra service and with your Google Play account and Apple Developer account; however, after the submission, the stores require time to publish the app that don't depend by me.
I won't:
- work on unclear, not discussed or too broad requirements;
- assume any responsibility if the app will be rejected by the stores; however, I'll try to help you in that case;
- pay your VPS cost, your Google Play account cost, your Apple Developer account cost or any third-party service cost.
Requirements:
Please give me a list of the requirements (as LibreOffice file or Word file). You can attach UI mockups. Each requirement must be as precise as possible. For example: "The tap on the Button xxx will do...", "I want that the app will be available in the languages: ...", "My target device are smartphones only", "I want that the user interface of the first screen is ...", "Native fonts are fine", "I want this img, this text and these buttons", etc.
Programming languages and source codes:
I use mainly Java for the client (the mobile app) and for the backend server.
The client is developed using "Codename One", the server using "Spring Boot".
As extra service, I can give you the source code both of the client and the server, they are Netbeans projects. If you need Android Studio and/or Apple Xcode sources, I can give you also them, but consider that they are the result of the transcompilation of the Codename One project.
More info:
See my page on Fiverr: https://www.fiverr.com/jsfan3/crossplatform-codename-one-app-for-ios-android-webapp
We can also agree a custom offer if you need.
Francesco Galgani,
April 12, 2020
Components disponibili in Codename One
In riferimento al corso introduttivo sulla programmazione multipiattaforma con Codename One da me precedente pubblicato, per promemoria personale e per utilità altrui stilo qui una lista dei Component disponibili per creare le interfacce grafiche.
Il motivo per cui ritengo utile scrivere questa lista è che, nella Developer Guide di Codename One, sez. "The Components of Codename One", non tutti i Component vengono trattati. Aggiornerò questa lista se mi accorgerò di essermi dimenticato qualcosa o se nuovi Component saranno aggiunti alle API.
Generics
Component, see also ComponentSelector and Lead Component
Container, see also Layouts and Safe Areas
InterFormContainer
Form, see also "Toolbar", "Right Side Menu" and "Search Mode"
PeerComponent
InstantUI
UIFragment
CodeRAD
Containers
Accordion
ComponentGroup
InfiniteContainer
SwipeableContainer
SplitPane
Tabs
Table
Labels and Images
Label
SpanLabel
RichTextView (revisited)
ImageMapContainer
ImageViewer
ScaleImageLabel
FloatingHint
Buttons
Button
SpanButton
MultiButton
SpanMultiButton
ScaleImageButton
FloatingActionButton (see also FAB as a badge)
ShareButton
Toggles
CheckBox
RadioButton + ButtonGroup
OnOffSwitch
Switch (OnOffSwitch replacement)
Toggle Lists
ButtonList
SwitchList
CheckBoxList
RadioButtonList
Selection
ComboBox
Picker
Text Fields
TextField
TextArea
ClearableTextField
AutocompleteTextField, and "AutocompleteTextField with images"
see also: Validator, UIBinding, Lightweight Text Selection
InputComponent & TextModeLayout
TextComponent
TextComponentPassword
AutoCompleteTextComponent
PickerComponent
Media
MediaPlayer, see also code examples
AudioRecorderComponent
Maps
MapComponent
MapContainer (Native Maps), see also "Map Component Positioning Revisited"
Dialogs/Prompts
InteractionDialog, see also "Picking a Dialog Type"
Dialog, see also "Popup Dialog"
Sheet, see also "New Sheet Positioning"
ToastBar
Progress + ConnectionRequest, see also "Alternative way to show upload percentage"
Progress
InfiniteProgress
Slider
SliderBridge + Slider + ConnectionRequest
CircleProgress
LoadingTextAnimation
Advanced
BrowserComponent
SignatureComponent
Calendar, see also Calendar CN1Lib
Tree
FileTree
RSSReader
Charts
ChartComponent
BarChart
BubbleChart
CombinedXYChart
CubicLineChart
DialChart
DoughnutChart
LineChart
PieChart
RadarChart
RangeBarChart
RoundChart
ScatterChart
TimeChart
Francesco Galgani,
ultimo aggiornamento 18 maggio 2020
Elenco di risorse (perlopiù gratuite) per sviluppatori
In riferimento al corso introduttivo sulla programmazione multipiattaforma con Codename One da me precedente pubblicato, segnalo un elenco di risorse per noi sviluppatori divise per categorie:
https://github.com/ripienaar/free-for-dev
Ricordo che tutto ciò che è utilizzabile tramite un'interfaccia REST è utilizzabile con Codename One.
Francesco Galgani,
6 marzo 2020
Nel 2020 Java 8 è la versione di Java più utilizzata ed è al terzo posto tra i linguaggi di programmazione
In riferimento al corso introduttivo sulla programmazione multipiattaforma con Codename One da me precedente pubblicato, qualcuno potrebbe rimanere perplesso sulla mia scelta di Java 8 sia lato client che lato server.
Orbene, secondo JVM Ecosystem Report 2020, attualmente Java 8 è la versione di Java più utilizzata in assoluto (64%), a seguire Java 11 (25%). Le altre versioni di Java sono quasi inutilizzate. Tra l'altro, Java 8 continua a ricevere aggiornamenti. In ambito aziendale Java 8 è considerato una scelta ben collaudata e quindi affidabile.
Non solo: attualmente Java è tra i primi tre linguaggi di programmazione più utilizzati in assoluto, come riportato da The RedMonk Programming Language Rankings: January 2020.
Java 8 continua a confermarsi, quindi, un'ottima scelta.
Francesco Galgani,
6 marzo 2020
È possibile il reverse engineering di un'app fatta con Codename One per risalire al codice sorgente?
> INDICE DEL CORSO
Avvertenza: questa pagina non rientra nel modulo introduttivo del corso. E' rivolta a chi ha già un po' di esperienza con Codename One.
Argomenti:
- È possibile il reverse engineering di un'app fatta con Codename One per risalire al codice sorgente?
- Risalire al codice sorgente delle app fatte con Codename One per Android (transcompilazione da Java a Java, con API differenti)
- Risalire al codice sorgente delle app fatte con Codename One per iOS (transcompilazione da Java a Objective-C)
- Risalire al codice sorgente delle web-app fatte con Codename One (transcompilazione da Java a Javascript)
- Confronto tra il reverse engineering delle applicazioni fatte con Codename One e di quello di applicazioni fatte con strumenti multipiattaforma alternativi
- Conclusioni
È possibile il reverse engineering di un'app fatta con Codename One per risalire al codice sorgente?
Risposta breve: no, in generale la protezione del codice offerta da Codename One è robusta (nel proseguo di questo articolo analizzo le app Android, iOS e Javascript fatte con Codename One), ma ciò non preclude comunque ad un attaccante di studiarsi quel che riesce a decompilare e di provare a modificarlo. Crackers e hackers sono molto appassionati nella loro "professione" e sanno già molto più di quanto si possa insegnare loro: sono capaci di starsene per ore e giorni davanti a un computer finché non riescono a impadronirsi di un sistema. Non sarebbe la prima volta che un ragazzo o una ragazza adolescenti riescano a entrare in sistemi iper-protetti. Neanche i big dell'informatica sono riusciti a prevenire importanti fughe di dati riservati.
Risposta lunga: guardando più in dettaglio la questione, con specifico riferimento alle app fatte con Codename One, posso osservare che:
Negli incasinamenti di codice… trovare una direzione
> INDICE DEL CORSO
Avvertenza: questa pagina non rientra nel modulo introduttivo del corso. E' rivolta a chi ha già un po' di esperienza con Codename One.
Durante le nostre attività di coding, è normale dover modificare il codice scritto da noi (anche a distanza di tempo) o da altri per aggiungere, togliere o modificare funzionalità, correggere bug, tentare migliorie. Il problema è che spesso è difficile capire da che parte iniziare e come proseguire, specialmente su progetti complessi fatti da centinaia di classi e da una moltitudine di metodi interagenti tra di loro. Provo qui a riunire alcune mie riflessioni e indicazioni, riferite alle app multipiattaforma fatte con Codename One, con l’auspicio che almeno uno dei punti sotto indicati possa tornare utile a qualcuno.
In futuro potrei ritoccare questa lista o aggiungere suggerimenti che qualcuno dei miei lettori vorrà condividere. Per il momento non inserisco esempi di codice, questa lista è una sorta di brainstorming personale che regalo ai miei lettori.