Pubblicazione su Google Play Store

Android richiede che tutte le applicazioni siano firmate digitalmente con un certificato prima di poter essere installate. Al fine di distribuire la vostra applicazione Android tramite il Google Play Store, essa deve essere firmata con una chiave di rilascio che poi deve essere utilizzata per tutti gli aggiornamenti futuri. Dal 2017 è possibile per Google Play gestire le release di firma automaticamente grazie alla funzionalità App Signing by Google Play. Tuttavia, prima che il binario dell’applicazione venga caricato su Google Play, deve essere firmato con una chiave di caricamento. La pagina Signing Your Applications sulla documentazione di Android Developers descrive l’argomento in dettaglio. Questa guida copre il processo in breve, così come elenca i passi necessari per impacchettare il bundle JavaScript.

Generare una chiave di caricamento#

Puoi generare una chiave di firma privata usando keytool. Su Windows keytool deve essere eseguito da C:\Program Files\Java\jdkx.x.x_x\bin.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Copy

Questo comando ti chiede le password per il keystore e la chiave e per i campi Distinguished Name per la tua chiave. Poi genera il keystore come un file chiamato my-upload-key.keystore.

Il keystore contiene una singola chiave, valida per 10000 giorni. L’alias è un nome che userai più tardi quando firmerai la tua app, quindi ricordati di prendere nota dell’alias.

Su Mac, se non sei sicuro di dove sia la tua cartella JDK bin, esegui il seguente comando per trovarla:

/usr/libexec/java_home

Copia

Farà uscire la directory del JDK, che sarà qualcosa di simile a questo:

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

Copia

Naviga in quella directory usando il comando cd /your/jdk/path e usa il comando keytool con il permesso sudo come mostrato qui sotto.

sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Copy

Nota: Ricordati di mantenere il file keystore privato. Nel caso tu abbia perso la chiave di caricamento o sia stata compromessa dovresti seguire queste istruzioni.

Impostare le variabili di Gradle#

  1. Posiziona il file my-upload-key.keystore sotto la directory android/app nella cartella del tuo progetto.
  2. Modificare il file ~/.gradle/gradle.properties o android/gradle.properties, e aggiungere quanto segue (sostituire ***** con la password corretta del keystore, alias e password della chiave),

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Copy

Queste saranno variabili Gradle globali, che possiamo poi usare nella nostra configurazione Gradle per firmare la nostra app.

Nota sulla sicurezza: Se non sei entusiasta di memorizzare le tue password in chiaro, e stai usando macOS, puoi anche memorizzare le tue credenziali nell’app Keychain Access. Quindi puoi saltare le due ultime righe in ~/.gradle/gradle.properties.

Aggiungere la configurazione di firma alla configurazione Gradle della tua app#

L’ultimo passo di configurazione che deve essere fatto è quello di impostare le build di rilascio per essere firmate usando la chiave di caricamento. Modifica il file android/app/build.gradle nella cartella del progetto e aggiungi la signing config,

android {
defaultConfig { … }
signingConfigs {
release {
if (project.hasProperty(‘MYAPP_UPLOAD_STORE_FILE’)) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}

Copia

Generazione del rilascio AAB#

Esegui il seguente in un terminale:

cd android
./gradlew bundleRelease

Copia

Gradle’s bundleRelease metterà in bundle tutto il JavaScript necessario per eseguire la tua app nell’AAB (Android App Bundle). Se hai bisogno di cambiare il modo in cui il bundle JavaScript e/o le risorse disegnabili sono raggruppate (ad esempio se hai cambiato i nomi dei file/cartelle di default o la struttura generale del progetto), dai un’occhiata a android/app/build.gradle per vedere come puoi aggiornarlo per riflettere questi cambiamenti.

Nota: Assicurati che gradle.properties non includa org.gradle.configureondemand=true perché questo farà sì che la build di rilascio salti il bundling di JS e delle risorse nel binario dell’app.

L’AAB generato può essere trovato sotto android/app/build/outputs/bundle/release/app.aab, ed è pronto per essere caricato su Google Play.

Perché Google Play accetti il formato AAB l’App Signing by Google Play deve essere configurato per la tua applicazione sulla Google Play Console. Se stai aggiornando un’applicazione esistente che non utilizza App Signing by Google Play, controlla la nostra sezione sulla migrazione per sapere come eseguire la modifica della configurazione.

Testare la build di rilascio della tua applicazione#

Prima di caricare la build di rilascio sul Play Store, assicurati di testarla a fondo. Per prima cosa disinstalla qualsiasi versione precedente dell’app che hai già installato. Installala sul dispositivo usando il seguente comando nella root del progetto:

npx react-native run-android –variant=release

Copy

Nota che --variant release è disponibile solo se hai impostato la firma come descritto sopra.

Puoi terminare qualsiasi istanza di bundler in esecuzione, poiché tutto il tuo codice framework e JavaScript è incluso nelle risorse dell’APK.

Pubblicare su altri store#

Per impostazione predefinita, l’APK generato ha il codice nativo per entrambe le architetture CPU x86 e ARMv7a. Questo rende più facile condividere APK che funzionano su quasi tutti i dispositivi Android. Tuttavia, questo ha lo svantaggio che ci sarà del codice nativo inutilizzato su qualsiasi dispositivo, portando ad APK inutilmente più grandi.

Puoi creare un APK per ogni CPU cambiando la seguente linea in android/app/build.gradle:

– ndk {
– abiFilters “armeabi-v7a”, “x86”
– }
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

>

Copy

Carica entrambi questi file nei mercati che supportano il targeting del dispositivo, come Google Play e Amazon AppStore, e gli utenti otterranno automaticamente l’APK appropriato. Se vuoi caricare su altri mercati, come APKFiles, che non supportano APK multipli per una singola app, cambia anche la seguente linea per creare l’APK universale di default con binari per entrambe le CPU.

– universalApk false // Se vero, genera anche un APK universale
+ universalApk true // Se vero, genera anche un APK universale

Copy

Abilitare Proguard per ridurre la dimensione dell’APK (opzionale)#

Proguard è uno strumento che può ridurre leggermente la dimensione dell’APK. Lo fa rimuovendo le parti del bytecode Java di React Native (e le sue dipendenze) che la tua app non sta utilizzando.

IMPORTANTE: Assicurati di testare accuratamente la tua app se hai abilitato Proguard. Proguard spesso richiede una configurazione specifica per ogni libreria nativa che stai usando. Vedi app/proguard-rules.pro.

Per abilitare Proguard, modifica android/app/build.gradle:

/**
* Esegui Proguard per ridurre il bytecode Java nelle build di rilascio.
*/
def enableProguardInReleaseBuilds = true

Copy

Migrare le vecchie app Android React Native per usare App Signing by Google Play#

Se stai migrando dalla versione precedente di React Native è probabile che la tua app non usi la funzione App Signing by Google Play. Ti consigliamo di abilitarla per trarre vantaggio da cose come la divisione automatica delle app. Per migrare dal vecchio modo di firmare è necessario iniziare generando una nuova chiave di caricamento e quindi sostituire la configurazione di firma del rilascio in android/app/build.gradle per utilizzare la chiave di caricamento invece di quella di rilascio (vedere la sezione sull’aggiunta della configurazione di firma a gradle). Una volta fatto ciò, dovresti seguire le istruzioni del sito web della Guida di Google Play per inviare la tua chiave di rilascio originale a Google Play.

Permessi predefiniti#

Per impostazione predefinita, l’autorizzazione INTERNET viene aggiunta alla tua applicazione Android poiché quasi tutte le applicazioni la utilizzano. L’autorizzazione SYSTEM_ALERT_WINDOW viene aggiunta al tuo APK Android in modalità debug ma verrà rimossa in produzione.