In questo articolo non mi limiterò solo a descrivere i passaggi necessari per la pubblicazione della vostra app ibrida, creata ad esempio con Apache Cordova o Ionic, sul Play Store di Android ma, ove possibile, cercherò di dare dei suggerimenti nel tentativo di migliorare il percorso verso la pubblicazione e gli eventuali aggiornamenti futuri dell'applicazione.
Ovviamente credo di poter dare per scontato che arrivati a questo punto l'ambiente di sviluppo sia già stato precedentemente configurato a dovere, in alternativa trovate i passaggi per la configurazione nella prima parte di una qualsiasi delle seguenti guide:
COME CREARE UN'APP IBRIDA CON IONIC IN 3 SEMPLICI PASSAGGI
COME CREARE UN'APPLICAZIONE IBRIDA PER DISPOSITIVI ANDROID
Per prima cosa, una volta che la versione della vostra app è pronta per la pubblicazione potrebbe essere buona norma crearsi una copia di backup della cartella principale in modo da mantenerne l'originale per le successive modifiche e test e quella copiata (da rinominare appendendendo ad esempio il numero della versione: _v01) sia per gli opportuni adeguamenti alla pubblicazione (che vediamo a breve) che come archivio di versione rilasciata.
Dal Prompt dei comandi (command line, CLI) spostarsi nella cartella del progetto che si intende pubblicare e rimuovere i plugin che sono stati utilizzati solo per le fasi test e debug ma che non dovrebbero essere in produzione, ad esempio il plugin per il debug in console:
cordova plugin rm cordova-plugin-console
Se è il primo rilascio dell'app potete ignorare il passaggio descritto in questo paragrafo altrimenti è necessario ricordare che è obbligatorio modificare il valore di version nel file config.xml con un numero crescente altrimenti in fase di caricamento dell'APK sul Play Store si riceverà un errore simile al seguente: DEVI UTILIZZARE UN ALTRO CODICE DI VERSIONE PER IL TUO APK.
A questo punto per pubblicare l'app sul Play Store è necessario generare una build di rilascio, per farlo eseguire da CLI il seguente comando:
cordova build --release android
L'APK verrà generato al seguente path: platforms/android/build/outputs/apk
Accedendo al percorso troverete un file con un nome simile al seguente: platforms/android/build/outputs/apk/android-release-unsigned.apk
E' il momento di generare la chiave privata (keystore) relativa alla vostra app utilizzando il comando keytool fornito con l'installazione del JDK. Se eseguendo il comando da CLI questo strumento non dovesse essere trovato significa che l'installazione dell'ambiente di sviluppo non è stata effettuata a dovere, nel caso rimando pertanto agli articoli linkati ad inizio guida dove trovate tutte le informazioni necessarie (se nonostante ciò non riuscite a risolvere lasciate un commento in fondo all'articolo e cercherò di aiutarvi).
Il comando per generare il keystore è il seguente:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Per una più facile gestione ed identificazione consiglio di sostituire al termine 'my-release-key.keystore' il nome della vostra app, ad esempio 'nomeapp.keystore' e ad 'alias_name' un nome che vi ricordate, che nel caso specifico potrebbe essere 'nomeapp' (senza gli apici).
Una volta dato l'invio per eseguire il comando vi verrà chiesto di immettere una password, salvatievi da qualche parte il nome dell'alias e la password per futuri utilizzi del keystore. Successivamente vengono richieste altre informazioni quali nome, organizzazione, località, ... alle quali basta rispondere e premere Invio.
Al termine verrà creato un file con il nome indicato (nomeapp.keystore) nella directory corrente (quella da cui è stato lanciato il comando).
ATTENZIONE: salvarsi una copia del file keystore da qualche parte in quanto, se doveste perderlo, non potrete pubblicare aggiornamenti alla vostra app ma sarete costretti a generare un nuovo keystore e dare un nome di package diverso alla vostra app per effettuare una pubblicazione ex-novo sul Play Store (perdendo di conseguenza le informazioni relative a download, statistiche, recensioni, ecc...).
E' giunto il momento di firmare l'APK con il keystore tramite il comando jarsigner:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name
L'ultimo passaggio prima della pubblicazione è quello di effettuare un'allineamento dell'apk, con il comando zipalign, per ottimizzarlo:
zipalign -v 4 android-release-unsigned.apk nomeapp.apk
Il tool zipalign.exe si trova al path /android/sdk/build-tools/VERSION/zipalign dove VERSION indica il numero di versione del build-tools che trovate dentro la relativa cartella.
Eseguendo questo comando dalla directory della vostra app è probabile che vi venga restituito un errore simile al seguente:
"zipalign" non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.
Nel caso dovesse succedervi trovate la soluzione in questo articolo.
A questo punto otterrete il vostro file nomeapp.apk pronto per essere pubblicato sul Play Store (se non avete ancora un account sviluppatori dovete collegarvi alla Google Play Store Developer Console e creare un account che costa 25$ una tantum. Dopodichè accedendo alla Console per gli Sviluppatori non vi sarà difficile trovare le evidenti Call to Action per Aggiungere una nuova applicazione e Caricare un APK).
Buonasera, ho letto tutta la guida e finalmente sono riuscito ad creare un apk. Il problema adesso e che non riesco a generare la chiave, mi esce questo messaggio \:
***
"keytool" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
***
Cosa puo essere ? Grazie
Ciao franco,
quell'errore significa che stai cercando di eseguire il programma 'keytool' ma evidentemente non hai configurato tra le variabili d'ambiente la cartella che lo contiene.
Nel caso tu volessi verificare la sua presenza per capire se effettivamente le variabili d'ambiente sono state impostate correttamente o meno, dovresti trovarlo nella cartella del jdk di Java, ovvero in un pattern simile al seguente:
C:/Program Files/Java/jdk1.6.0_26/bin/keytool.exe
Allora il keytool.exe è presente nella cartella c\:/programmi/java/jdk1.8.0_144/bin , Nelle variabili di sistema ho creato
NOME \: JAVA_HOME
e
VALORE \: C\:programmijavajdk1.8.0_144..... dove sbaglio ? Grazie
OK, scoperto l'arcano,ho risolto aggiungendo /bin alla path. Aggiungo che per firmare con jarsinger il file del .apk deve trovarsi nella cartella principale.
Ottimo franco, sono contento che tu sia riuscito a risolvere!
Grazie per la dritta aggiuntiva, sicuramente potrà essere utile a qualcuno che si troverà in una situazione simile.
Ricevo questo errore da cosa dipende?
Illegal option\: -HelloWorld-release-unsigned.apk
Please type jarsigner -help for usage
Ciao Antonio,
probabilmente stai utilizzando un'opzione non prevista per jarsigner e la console ti suggerisce di digitare il comando 'jarsigner -help' per prendere visione delle opzioni disponibili.
Grazie michele per la velocità con cui hai risposto, comunque ho seguito la tua guida passo per passo, quando uso questo comando:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name
Mi rilascia questo errore soluzioni?
Ciao Antonio,
ma il tuo apk si chiama 'HelloWorld-release-unsigned.apk'?
salve. ho un problema sulla pagina facebook..non riesco a unirla..mi dice che è in sospeso un'unione. come risolvare cio?
Ciao stefy,
la tua domanda non è proprio pertinente a questo articolo... ti consiglio di dare uno sguardo ai commenti dell'articolo più calzante alla la tua richiesta dove trovi varie indicazioni sull'argomento, ovvero il seguente: https://www.michelepisani.it/articoli/unire-due-pagine-facebook-problemi-errori-e-soluzioni/.
Ho 2 progetti ionic 2 che debuggati funzionano perfettamente sia su web che sul device android, installando andorid.debug.apk, ma non capisco perchè sul cellulare l'apk dell'uno è visto come aggiornamento dell'apk dell'altro
Ciao Michele,
Ho pubblicato uns cordova app su googje play.
Tuttavia cercandola per nome o argomenti correlati. Non esce proprio nella ricerca.
Hai qualche suggerimento?
Grazie mille
Alessandro
Ciao Alessandro,
se dal pannello di Google Play l'app risulta effettivamente pubblicata direi che è solo una questione di tempo e risulterà visibile e scaricabile nel breve periodo.
Grazie mille Michele.
Un caro saluto
Alessandro
Grazie Michele per questo articolo che mi ha aiutato non poco nella pubblicazione della mia prima app.
Aggiungerei un paio di indicazioni che potrebbero essere utili a qualcuno.
1) E' necessario inserire preventivamente nella variabile di ambiente "path" i path di:
keytool.exe
jarsigner.exe
zipalign.exe
2) Effettuando la firma e l'allineamento, il nome dell'app dev'essere preceduto dal suo path relativo;.
Nel mio caso(e penso anche di altri):
platformsandroidappuildoutputsapk eleaseapp-release-unsigned.apk
Inoltre, è utile inserire lo stesso path anche nel nel nome definitivo dell'applicazione che compare nel comando di allineamento. Altrimenti l'app allineata verrà posizionata nella cartella root del progetto Cordova.
Con questo spero di aiutare qualcuno a risparmiare qualche ora di lavoro!
Grazie Lorenzo!
Mi fa piacere che l'articolo ti sia stato utile e soprattutto ti ringrazio per il contributo che hai dato.
Sicuramente ci sono stati aggiornamenti in questi anni dove io sono passato ad altro core business, quindi grazie ancora per la conferma di validità del contenuto e per il tuo update! Questo è lo spirito giusto!