Android richiede che tutti gli APK siano firmati digitalmente con un certificato prima di essere installati su un dispositivo o aggiornati. Quando pubblichi utilizzando Android App Bundles, devi firmare l'app bundle con una chiave di caricamento prima di caricarlo su Play Console, mentre la funzionalità di firma dell'app di Google Play si occupa del resto. Per le app distribuite tramite APK sul Play Store o su altri store, devi firmare manualmente gli APK per il caricamento.
Questa pagina illustra alcuni concetti importanti relativi alla firma e alla sicurezza delle app, come firmare l'app per la pubblicazione su Google Play utilizzando Android Studio e come configurare la firma dell'app di Google Play.
Di seguito è riportata una panoramica generale dei passaggi che potresti dover svolgere per firmare e pubblicare una nuova app su Google Play:
- Generare una chiave di caricamento e un archivio chiavi
- Firmare l'app con la chiave di caricamento
- Configurare la funzionalità di firma dell'app di Google Play
- Caricare l'app su Google Play
- Preparare e implementare la release dell'app
Se invece la tua app è già pubblicata sul Google Play Store con una chiave di firma dell'app esistente o se vuoi scegliere la chiave di firma dell'app per una nuova app anziché lasciare che sia Google a generarla, segui questi passaggi:
- Firma l'app con la chiave di firma dell'app.
- Carica la chiave di firma dell'app in Firma dell'app di Google Play.
- (Consigliato) Genera e registra un certificato di caricamento per gli aggiornamenti futuri della tua app
- Caricare l'app su Google Play
- Preparare e implementare la release dell'app
Questa pagina illustra anche come gestire le tue chiavi per il caricamento dell'app su altri store. Se non utilizzi Android Studio o preferisci firmare la tua app dalla riga di comando, scopri come utilizzare apksigner
.
Firma dell'app di Google Play
Con la funzionalità di firma dell'app di Google Play, Google gestisce e protegge automaticamente la chiave di firma della tua app e la utilizza per firmare gli APK da distribuire. Inoltre, poiché gli app bundle posticipano la compilazione e la firma degli APK al Google Play Store, devi configurare la Firma dell'app di Google Play prima di caricare l'app bundle. In questo modo, potrai usufruire di quanto segue:
- Utilizza Android App Bundle e supporta le modalità di caricamento avanzate di Google Play. Android App Bundle rende la tua app molto più piccola, semplifica le release e consente di utilizzare moduli di funzionalità e offrire esperienze istantanee.
- Aumenta la sicurezza della chiave di firma e rendi possibile l'utilizzo di una chiave di caricamento distinta per firmare l'app bundle caricato su Google Play.
L'upgrade della chiave ti consente di modificare la chiave di firma dell'app nel caso in cui quella esistente sia compromessa o se devi eseguire la migrazione a una chiave con una migliore crittografia.
Play App Signing utilizza due chiavi: la chiave di firma dell'app e la chiave di caricamento, descritte in modo più dettagliato nella sezione Chiavi e gmae. Mantieni la chiave di caricamento e utilizzala per firmare la tua app per il caricamento sul Google Play Store. Google utilizza il certificato di caricamento per verificare la tua identità e firma gli APK con la chiave di firma dell'app per la distribuzione, come mostrato nella Figura 1. Se utilizzi una chiave di caricamento separata, puoi richiedere una reimpostazione della chiave di caricamento se la chiave viene smarrita o compromessa.
In confronto, per le app che non hanno attivato la funzionalità Firma dell'app di Google Play, se perdi la chiave di firma dell'app, non potrai più aggiornarla.
Le tue chiavi vengono archiviate nella stessa infrastruttura utilizzata da Google per archiviare le proprie, dove sono protette da Key Management Service di Google. Puoi approfondire l'infrastruttura tecnica di Google leggendo i white paper sulla sicurezza di Google Cloud.
Se utilizzi la firma dell'app di Google Play, se perdi la chiave di caricamento o se questa viene compromessa, puoi richiedere un ripristino della chiave di caricamento in Play Console. Poiché la chiave di firma dell'app è protetta da Google, puoi continuare a caricare nuove versioni dell'app come aggiornamenti dell'app originale, anche se modifichi le chiavi di caricamento. Per scoprire di più, leggi l'articolo Reimpostare una chiave di caricamento privata smarrita o compromessa.
La sezione successiva descrive alcuni termini e concetti importanti relativi alla firma e alla sicurezza delle app. Se preferisci andare avanti e scoprire come preparare la tua app per il caricamento sul Google Play Store, vai a Firmare l'app per la release.
Archivi chiavi, chiavi e certificati
Gli archivi chiavi Java (.jks o .keystore) sono file binari che fungono da repository di certificati e chiavi private.
Un certificato di chiave pubblica (file .der
o .pem
), noto anche come certificato digitale o certificato di identità, contiene la chiave pubblica di una coppia di chiavi pubblica/privata, nonché alcuni altri metadati che identificano il proprietario (ad esempio nome e posizione) che detiene la chiave privata corrispondente.
Di seguito sono riportati i diversi tipi di chiavi che devi conoscere:
- Chiave di firma dell'app:la chiave utilizzata per firmare gli APK installati sul dispositivo di un utente. Nell'ambito del modello di aggiornamento sicuro di Android, la chiave di firma non cambia mai durante il ciclo di vita dell'app. La chiave di firma dell'app è privata e deve essere tenuta segreta. Tuttavia, puoi condividere il certificato generato con la chiave di firma dell'app.
Chiave di caricamento:la chiave che usi per firmare l'app bundle o l'APK prima di caricarlo per la firma dell'app con Google Play. Devi mantenere segreta la chiave di caricamento. Tuttavia, puoi condividere il certificato generato utilizzando la chiave di caricamento. Puoi generare una chiave di caricamento in uno dei seguenti modi:
- Se scegli di lasciare che sia Google a generare la chiave di firma dell'app al momento dell'attivazione, la chiave che utilizzi per firmare l'app per la release viene designata come chiave di caricamento.
- Se fornisci la chiave di firma dell'app a Google durante l'attivazione della funzionalità per la tua app nuova o esistente, hai la possibilità di generare una nuova chiave di caricamento durante o dopo l'attivazione per una maggiore sicurezza.
- Se non generi una nuova chiave di caricamento, continua a usare la chiave di firma dell'app come chiave di caricamento per firmare ogni release.
Suggerimento:per proteggere le tue chiavi, è buona norma assicurarti che la chiave di firma dell'app e la chiave di caricamento siano diverse.
Collaborazione con i fornitori di API
Puoi scaricare il certificato per la chiave di firma dell'app e la chiave di caricamento dalla pagina Release > Configurazione > Firma dell'app in Play Console. Viene utilizzata per registrare le chiavi pubbliche con i fornitori di API ed è pensata per essere condivisa, in quanto non contiene la tua chiave privata.
Una fingerprint del certificato è una rappresentazione breve e univoca di un certificato che viene spesso richiesta dai provider di API insieme al nome del pacchetto per registrare un'app allo scopo di utilizzare il loro servizio. Le impronte MD5, SHA-1 e SHA-256
degli certificati di firma dell'app e di caricamento sono disponibili nella pagina della firma dell'app
di Play Console. È possibile elaborare altre impronte scaricando il
certificato originale (.der
) dalla stessa pagina.
Firma la build di debug
Quando esegui il progetto o ne esegui il debug dall'IDE, Android Studio firma automaticamente l'app con un certificato di debug generato dagli strumenti SDK Android. La prima volta che esegui o esegui il debug del progetto in Android Studio, IDE crea automaticamente il keystore e il certificato di debug in $HOME/.android/debug.keystore
e imposta le password del keystore e delle chiavi.
Poiché il certificato di debug viene creato dagli strumenti di compilazione e non è sicuro per design, la maggior parte degli store (incluso il Google Play Store) non accetta app firmate con un certificato di debug per la pubblicazione.
Android Studio memorizza automaticamente le informazioni di firma di debug in una configurazione di firma, in modo da non doverle inserire ogni volta che esegui il debug. Una configurazione di firma è un oggetto costituito da tutte le informazioni necessarie per firmare l'app, inclusa la posizione dell'archivio chiavi, la password dell'archivio chiavi, il nome della chiave e la password della chiave.
Per ulteriori informazioni su come compilare ed eseguire app per il debug, consulta Compilare e eseguire l'app.
Scadenza del certificato di debug
Il certificato autofirmato utilizzato per firmare l'app per il debug ha una data di scadenza di 30 anni dalla data di creazione. Quando il certificato scade, viene visualizzato un errore di compilazione.
Per risolvere il problema, elimina semplicemente il file debug.keystore
archiviato in una delle seguenti posizioni:
~/.android/
su OS X e LinuxC:\Documents and Settings\user\.android\
su Windows XPC:\Users\user\.android\
su Windows Vista e Windows 7, 8 e 10
La prossima volta che esegui la compilazione di una versione di debug della tua app, Android Studio rigenera un nuovo archivio chiavi e una nuova chiave di debug.
Firmare l'app per la pubblicazione su Google Play
Quando è tutto pronto per la pubblicazione, devi firmare l'app e caricarla su un'app store, ad esempio Google Play. Quando pubblichi l'app su Google Play per la prima volta, devi anche configurare la funzionalità di firma dell'app di Google Play. La firma dell'app di Google Play è facoltativa per le app create prima di agosto 2021. Questa sezione spiega come firmare correttamente l'app per la release e configurare la funzionalità Firma dell'app di Google Play.
Generare una chiave di caricamento e un archivio chiavi
Se non hai già una chiave di caricamento, utile per la configurazione della firma dell'app di Google Play, puoi generarne una utilizzando Android Studio come segue:
- Nella barra dei menu, fai clic su Build > Genera bundle/APK firmato.
- Nella finestra di dialogo Genera bundle o APK firmato, seleziona Android App Bundle o APK e fai clic su Avanti.
- Sotto il campo Percorso del magazzino chiavi, fai clic su Crea nuovo.
Nella finestra Nuovo keystore, fornisci le seguenti informazioni per il keystore e la chiave, come mostrato nella figura 2.
Keystore
- Percorso del keystore:seleziona la posizione in cui deve essere creato il keystore.
Inoltre, alla fine del percorso della posizione deve essere aggiunto un nome file con l'estensione
.jks
. - Password:crea e conferma una password sicura per il tuo keystore.
- Percorso del keystore:seleziona la posizione in cui deve essere creato il keystore.
Inoltre, alla fine del percorso della posizione deve essere aggiunto un nome file con l'estensione
Chiave
- Alias:inserisci un nome che identifichi la chiave.
- Password:crea e conferma una password sicura per la chiave. Deve essere uguale alla password dell'archivio chiavi. Per ulteriori informazioni, consulta il problema noto.
- Validità (anni): imposta il periodo di tempo in anni durante il quale la chiave sarà valida. La chiave deve essere valida per almeno 25 anni, in modo da poter firmare gli aggiornamenti dell'app con la stessa chiave per tutto il ciclo di vita dell'app.
- Certificato:inserisci alcune informazioni su di te per il tuo certificato. Queste informazioni non vengono visualizzate nell'app, ma sono incluse nel certificato come parte dell'APK.
Una volta compilato il modulo, fai clic su OK.
Se vuoi compilare e firmare l'app con la chiave di caricamento, vai alla sezione su come firmare l'app con la chiave di caricamento. Se vuoi solo generare la chiave e il keystore, fai clic su Annulla.
Firmare l'app con la chiave
Se hai già una chiave di caricamento, utilizzala per firmare l'app. Se invece la tua app è già firmata e pubblicata nel Google Play Store con una chiave di firma dell'app esistente, utilizzala per firmare l'app. In un secondo momento, puoi generare e registrare una chiave di caricamento distinta con Google Play per firmare e caricare gli aggiornamenti successivi dell'app.
Per firmare l'app utilizzando Android Studio, segui questi passaggi:
- Se al momento non è aperta la finestra di dialogo Genera bundle o APK firmato, fai clic su Compila > Genera bundle/APK firmato.
- Nella finestra di dialogo Genera bundle o APK firmato, seleziona Android App Bundle o APK e fai clic su Avanti.
- Seleziona un modulo dal menu a discesa.
Specifica il percorso dell'archivio chiavi, l'alias per la chiave e inserisci le password per entrambi. Se non hai ancora preparato la chiave e l'archivio chiavi di caricamento, genera una chiave e un archivio chiavi di caricamento, quindi torna a completare questo passaggio.
Fai clic su Avanti.
Nella finestra successiva (mostrata in figura 4), seleziona una cartella di destinazione per l'app firmata, il tipo di compilazione e, se applicabile, le versioni del prodotto.
Se stai creando e firmando un APK, devi selezionare le versioni di firma che vuoi che la tua app supporti. Per scoprire di più, consulta la sezione relativa ai schemi di firma dell'app.
Fai clic su Crea.
Una volta che Android Studio ha completato la creazione dell'app firmata, puoi individuarla o analizzarla facendo clic sull'opzione appropriata nella notifica popup, come mostrato nella figura 5.
Ora puoi attivare la funzionalità di firma dell'app di Google Play per la tua app e caricarla per la release. Se non hai mai utilizzato la procedura di pubblicazione delle app, ti consigliamo di leggere la panoramica del lancio. In caso contrario, continua con la pagina su come caricare l'app su Play Console.
Utilizzare la firma dell'app di Google Play
Come descritto in precedenza in questa pagina, la configurazione della firma dell'app di Google Play è obbligatoria per firmare la tua app per la distribuzione tramite Google Play (tranne per le app create prima di agosto 2021, che possono continuare a distribuire APK con firma autografa). I passaggi da seguire dipendono dal fatto che l'app non sia ancora stata pubblicata su Google Play o che sia già firmata ed è stata pubblicata prima di agosto 2021 utilizzando una chiave di firma dell'app esistente.
Configura una nuova app
Per configurare la firma per un'app non ancora pubblicata su Google Play, procedo come segue:
- Se non l'hai ancora fatto, genera una chiave di caricamento e firma la tua app con questa chiave.
- Accedi alla Play Console.
- Segui i passaggi per preparare e implementare la release per creare una nuova release.
- Dopo aver scelto un canale di release, configura la firma dell'app nella sezione Firma dell'app come segue:
- Per fare in modo che Google Play generi una chiave di firma dell'app e la utilizzi per firmare la tua app, non devi fare nulla. La chiave che utilizzi per firmare la prima release diventa la chiave di caricamento e devi utilizzarla per firmare le future release.
- Per utilizzare la stessa chiave di un'altra app nel tuo account sviluppatore, seleziona Cambia chiave di firma dell'app > Utilizza la stessa chiave di un'altra app in questo account, seleziona un'app e poi fai clic su Continua.
- Per fornire la tua chiave di firma da far usare a Google per firmare la tua app, selezionate Cambia chiave di firma dell'app e una delle opzioni Esporta e carica che consente di caricare in sicurezza una chiave privata e il relativo certificato pubblico.
Nella sezione App bundle, fai clic su Sfoglia file per individuare e caricare l'app che hai firmato utilizzando la chiave di caricamento. Per maggiori informazioni sul rilascio dell'app, consulta la pagina Preparare e implementare la release. Quando pubblichi l'app dopo aver configurato la funzionalità di firma dell'app di Google Play, Google Play genera (a meno che tu non carichi una chiave esistente) e gestisce automaticamente la chiave di firma della tua app. Firma semplicemente gli aggiornamenti successivi dell'app utilizzando la chiave di caricamento dell'app prima di caricarla su Google Play.
Se devi creare una nuova chiave di caricamento per la tua app, vai alla sezione su come reimpostare una chiave di caricamento privata persa o compromessa.
Attivare un'app esistente
Se stai aggiornando un'app già pubblicata su Google Play utilizzando una chiave di firma dell'app esistente, puoi attivare la funzionalità di firma dell'app di Google Play come segue:
- Accedi a Play Console e vai alla tua app.
- Nel menu a sinistra, fai clic su Release > Configurazione > Firma dell'app.
- Se applicabile, leggi i Termini di servizio e seleziona Accetto.
- Seleziona una delle opzioni che descrive meglio la chiave di firma che vuoi caricare su Google Play e segui le istruzioni visualizzate. Per esempio, se utilizzi un archivio chiavi Java per la chiave di firma, seleziona Carica una nuova chiave di firma dell'app dall'archivio chiavi Java e segui le istruzioni per scaricare ed eseguire lo strumento PEPK, quindi carica il file generato con la chiave criptata.
- Fai clic su Registrati.
Dovresti visualizzare una pagina con i dettagli dei certificati di caricamento e firma della tua app. Ora Google Play firma la tua app con la chiave esistente quando la esegui il deployment per gli utenti. Tuttavia, uno dei vantaggi più importanti della firma dell'app di Google Play è la possibilità di separare la chiave che utilizzi per firmare l'elemento caricato su Google Play dalla chiave utilizzata da Google Play per firmare la tua app per la distribuzione agli utenti. Pertanto, ti consigliamo di seguire i passaggi indicati nella sezione successiva per generare e registrare una chiave di caricamento separata.
Generare e registrare un certificato di caricamento
Quando pubblichi un'app non firmata da una chiave di caricamento, Google Play Console offre la possibilità di registrarne una per gli aggiornamenti futuri dell'app. Anche se si tratta di un passaggio facoltativo, ti consigliamo di pubblicare l'app con una chiave separata da quella utilizzata da Google Play per distribuire l'app agli utenti. In questo modo, Google mantiene la tua chiave di firma al sicuro e hai la possibilità di reimpostare una chiave di caricamento privata smarrita o compromessa. Questa sezione descrive come creare una chiave di caricamento, generare un certificato di caricamento e registrarlo su Google Play per i futuri aggiornamenti della tua app.
Di seguito sono descritte le situazioni in cui viene visualizzata l'opzione per registrare un certificato di caricamento in Play Console:
- Quando pubblichi una nuova app firmata con una chiave di firma e attivi la funzionalità firma dell'app di Google Play.
- Quando stai per pubblicare un'app esistente che ha già attivato la funzionalità Firma dell'app di Play, ma è firmata utilizzando la relativa chiave di firma.
Se non stai pubblicando un aggiornamento di un'app esistente che ha già attivato la funzionalità Firma dell'app di Google Play e vuoi registrare un certificato di caricamento, completa i passaggi riportati di seguito e vai alla sezione su come ripristinare una chiave di caricamento privata persa o compromessa.
Se non l'hai ancora fatto, genera una chiave di caricamento e un keystore.
Dopo aver creato la chiave di caricamento e l'archivio chiavi, devi generare un certificato pubblico dalla chiave di caricamento utilizzando keytool
con il seguente comando:
$ keytool -export -rfc -keystore your-upload-keystore.jks -alias upload-alias -file output_upload_certificate.pem
Ora che hai il certificato di caricamento, registralo su Google quando richiesto in Play Console o quando reimposti la chiave di caricamento.
Eseguire l'upgrade della chiave di firma dell'app
In alcuni casi, potrebbe essere opportuno modificare la chiave di firma dell'app. Ad esempio, perché vuoi una chiave con una migliore crittografia o perché la tua chiave di firma è stata compromessa. Tuttavia, poiché gli utenti possono aggiornare la tua app solo se l'aggiornamento è firmato con la stessa chiave di firma, è difficile modificare la chiave di firma di un'app già pubblicata.
Se pubblichi la tua app su Google Play, puoi eseguire l'upgrade della chiave di firma per l'app pubblicata tramite Play Console. La nuova chiave viene utilizzata per firmare le installazioni e gli aggiornamenti dell'app su Android 13 e versioni successive, mentre la vecchia chiave di firma dell'app viene utilizzata per firmare gli aggiornamenti per gli utenti che utilizzano versioni precedenti di Android.
Per scoprire di più, consulta Eseguire l'upgrade della chiave di firma dell'app.
Reimpostare una chiave di caricamento privata persa o compromessa
Se hai perso la chiave di caricamento privata o se la chiave privata è stata compromessa, puoi crearne una nuova e richiedere una reimpostazione della chiave di caricamento in Play Console.
Configurare il processo di compilazione per firmare automaticamente l'app
In Android Studio, puoi configurare il progetto in modo che firmi automaticamente la versione release della tua app durante il processo di compilazione creando una configurazione di firma e assegnandola al tipo di compilazione della release. Una configurazione di firma è costituita da una posizione dell'archivio chiavi, dalla password dell'archivio chiavi, dall'alias della chiave e dalla password della chiave. Per creare una configurazione di firma e assegnarla al tipo di compilazione della release utilizzando Android Studio, completa i seguenti passaggi:
- Nella finestra Progetto, fai clic con il tasto destro del mouse sull'app e poi su Apri impostazioni del modulo.
- Nella finestra Struttura del progetto, fai clic sul modulo da firmare in Moduli nel riquadro a sinistra.
- Fai clic sulla scheda Firma, quindi su Aggiungi .
-
Seleziona il file del keystore, inserisci un nome per questa configurazione di firma (poiché puoi crearne più di una) e inserisci le informazioni richieste.
- Fai clic sulla scheda Tipi di build.
- Fai clic sulla build della release.
-
In Configurazione firma, seleziona la configurazione di firma appena creata.
- Fai clic su OK.
Ora, ogni volta che crei il tipo di build di release selezionando un'opzione in Build > Build bundle/APK in Android Studio, l'IDE firmerà automaticamente l'app utilizzando la configurazione di firma specificata. Puoi trovare l'APK o l'app bundle firmato nella directory build/outputs/
all'interno della directory del progetto del modulo in fase di compilazione.
Quando crei una configurazione di firma, le informazioni sulla firma vengono incluse in testo normale nei file di compilazione di Gradle. Se lavori in un team o condividi il tuo codice pubblicamente, devi mantenere al sicuro le informazioni di firma rimuovendole dai file di compilazione e archiviandole separatamente. Puoi scoprire di più su come rimuovere le informazioni di firma dai file di compilazione in Rimuovere le informazioni di firma dai file di compilazione. Per scoprire di più su come proteggere le informazioni di firma, consulta la sezione Proteggere la chiave di seguito.
Firmare ogni sapore del prodotto in modo diverso
Se la tua app utilizza i sapori del prodotto e vuoi firmare ogni sapore in modo diverso, puoi creare configurazioni di firma aggiuntive e assegnarle in base al sapore:
- Nella finestra Progetto, fai clic con il tasto destro del mouse sull'app e poi su Apri impostazioni del modulo.
- Nella finestra Struttura del progetto, fai clic sul modulo da firmare in Moduli nel riquadro a sinistra.
- Fai clic sulla scheda Firma, quindi su Aggiungi .
-
Seleziona il file del keystore, inserisci un nome per questa configurazione di firma (poiché puoi crearne più di una) e inserisci le informazioni richieste.
- Ripeti i passaggi 3 e 4 in base alle esigenze finché non avrai creato tutte le configurazioni di firma.
- Fai clic sulla scheda Flavors.
- Fai clic sul tipo che vuoi configurare, quindi seleziona la configurazione di firma appropriata dal menu a discesa Configurazione firma.
Ripeti la procedura per configurare eventuali altri tipi di prodotto.
- Fai clic su OK.
Puoi anche specificare le impostazioni di firma nei file di configurazione di Gradle. Per maggiori informazioni, vedi Configurare le impostazioni di firma.
Eseguire un report sulle firme
Per ottenere le informazioni sulla firma per ogni variante della tua app, esegui il compito GradlesigningReport
in Android Studio:
- Seleziona Visualizza > Finestre degli strumenti > Gradle per aprire la finestra dello strumento Gradle
- Seleziona La tua app > Attività > Android > signingReport per eseguire il report.
Gestire la tua chiave di firma
Se scegli di non attivare la firma dell'app di Google Play (solo per le app create prima di agosto 2021), puoi gestire la tua chiave di firma dell'app e il tuo keystore. Tieni presente che sei responsabile della protezione della chiave e del keystore. Inoltre, la tua app non potrà supportare Android App Bundle, Play Feature Delivery e Play Asset Delivery.
Quando è tutto pronto per creare la tua chiave e il tuo keystore, assicurati innanzitutto di scegliere una password sicura per il keystore e una password sicura separata per ogni chiave privata memorizzata nel keystore. Devi conservare il tuo keystore in un luogo sicuro. Se perdi l'accesso alla chiave di firma dell'app o se la chiave è compromessa, Google non può recuperarla per te e non potrai rilasciare nuove versioni dell'app agli utenti come aggiornamenti dell'app originale. Per ulteriori informazioni, consulta la sezione Mantenere la chiave al sicuro di seguito.
Se gestisci la tua chiave di firma dell'app e il tuo keystore, quando firmi l'APK, lo farai localmente utilizzando la chiave di firma dell'app e caricherai l'APK firmato direttamente sul Google Play Store per la distribuzione, come mostrato nella figura 12.
Quando utilizzi la firma dell'app di Google Play, Google protegge la tua chiave di firma e garantisce che le tue app siano firmate correttamente e in grado di ricevere aggiornamenti per tutta la loro durata. Tuttavia, se decidi di gestire autonomamente la chiave di firma dell'app, tieni presente alcune considerazioni.
Considerazioni sulla firma
Devi firmare l'app con lo stesso certificato per tutta la sua durata prevista. Ecco alcuni motivi per cui dovresti farlo:
- Upgrade dell'app:quando il sistema installa un aggiornamento di un'app, confronta i certificati nella nuova versione con quelli nella versione esistente. Il sistema consente l'aggiornamento se i certificati corrispondono. Se firmi la nuova versione con un certificato diverso, devi assegnare un nome del pacchetto diverso all'app. In questo caso, l'utente installa la nuova versione come app completamente nuova.
- Modularità dell'app:Android consente agli APK firmati dallo stesso certificato di essere eseguiti nello stesso processo, se le app lo richiedono, in modo che il sistema li tratti come una singola app. In questo modo puoi eseguire il deployment dell'app in moduli e gli utenti possono aggiornare ciascuno dei moduli in modo indipendente.
- Condivisione di codice/dati tramite autorizzazioni:Android fornisce l'applicazione delle autorizzazioni basata su firme, in modo che un'app possa esporre funzionalità a un'altra app firmata con un certificato specificato. Se firmi più APK con lo stesso certificato e utilizzi i controlli delle autorizzazioni basati sulla firma, le tue app possono condividere codice e dati in modo sicuro.
Se prevedi di supportare gli upgrade di un'app, assicurati che la chiave di firma dell'app abbia un periodo di validità superiore alla durata prevista dell'app. È consigliabile un periodo di validità di almeno 25 anni. Quando scade il periodo di validità della chiave, gli utenti non potranno più eseguire l'upgrade alle nuove versioni della tua app senza problemi.
Se prevedi di pubblicare le tue app su Google Play, la chiave che utilizzi per firmare la tua app deve avere un periodo di validità che termina dopo il 22 ottobre 2033. Google Play applica questo requisito per garantire che gli utenti possano eseguire facilmente l'upgrade delle app quando sono disponibili nuove versioni.
Proteggi la chiave
Se scegli di gestire e proteggere autonomamente la chiave di firma dell'app e il keystore (invece di attivare la funzionalità Firma dell'app di Google Play), la protezione della chiave di firma dell'app è di fondamentale importanza sia per te che per l'utente. Se consenti a qualcuno di utilizzare la tua chiave o se lasci il tuo keystore e le tue password in una posizione non protetta in cui una terza parte potrebbe trovarli e utilizzarli, la tua identità di autore e la fiducia dell'utente sono compromesse.
Se una terza parte dovesse riuscire a rubare la chiave di firma della tua app a tua insaputa o senza la tua autorizzazione, potrebbe firmare e distribuire app che sostituiscono deliberatamente le tue app autentiche o le danneggiano. Una persona del genere potrebbe anche firmare e distribuire app con la tua identità che attaccano altre app o il sistema stesso, o corrompere o rubare i dati utente.
La chiave privata è necessaria per firmare tutte le versioni future dell'app. Se la smarrisci o la smarrisci, non potrai pubblicare aggiornamenti per la tua app esistente. Non puoi rigenerare una chiave generata in precedenza.
La tua reputazione come entità sviluppatore dipende dalla corretta protezione della chiave di firma dell'app in ogni momento, fino alla scadenza della chiave. Ecco alcuni suggerimenti per mantenere al sicuro la chiave:
- Seleziona password complesse per il keystore e la chiave.
- Non donare o prestare a nessuno la tua chiave privata e non comunicare a persone non autorizzate le password dell'archivio chiavi e della chiave.
- Conserva il file dell'archivio chiavi contenente la chiave privata in un luogo sicuro.
In generale, se segui le precauzioni di buon senso durante la generazione, l'utilizzo e la memorizzazione della chiave, questa rimarrà al sicuro.
Rimuovere le informazioni sulla firma dai file di compilazione
Quando crei una configurazione di firma, Android Studio aggiunge le informazioni di firma in testo normale ai file build.gradle
del modulo. Se collabori con un team o rendi open source il tuo codice, devi rimuovere queste informazioni sensibili dai file di compilazione in modo che non siano facilmente accessibili ad altri. A tale scopo, devi creare un file properties separato per memorizzare le informazioni protette e fare riferimento a questo file nei file di compilazione come segue:
- Crea una configurazione di firma e assegnala a uno o più tipi di build. Queste istruzioni presuppongono che tu abbia configurato una singola configurazione di firma per il tipo di build della release, come descritto in Configura la procedura di compilazione per firmare automaticamente l'app, sopra.
- Crea un file denominato
keystore.properties
nella directory principale del progetto. Questo file deve contenere i dati di firma, come segue:storePassword=myStorePassword keyPassword=mykeyPassword keyAlias=myKeyAlias storeFile=myStoreFileLocation
- Nel file
build.gradle
del modulo, aggiungi il codice per caricare il filekeystore.properties
prima del bloccoandroid {}
.Groovy
... // Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. def keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties. def keystoreProperties = new Properties() // Load your keystore.properties file into the keystoreProperties object. keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { ... }
Kotlin
... import java.util.Properties import java.io.FileInputStream // Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. val keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties. val keystoreProperties = Properties() // Load your keystore.properties file into the keystoreProperties object. keystoreProperties.load(FileInputStream(keystorePropertiesFile)) android { ... }
Nota:puoi scegliere di archiviare il file
keystore.properties
in un'altra posizione (ad esempio nella cartella del modulo anziché nella cartella principale del progetto o sul server di compilazione se utilizzi uno strumento di integrazione continua). In questo caso, devi modificare il codice riportato sopra per inizializzare correttamentekeystorePropertiesFile
utilizzando la posizione effettiva del filekeystore.properties
. - Puoi fare riferimento alle proprietà memorizzate in
keystoreProperties
utilizzando la sintassikeystoreProperties['propertyName']
. Modifica il bloccosigningConfigs
del filebuild.gradle
del modulo per fare riferimento alle informazioni di firma memorizzate inkeystoreProperties
utilizzando questa sintassi.Groovy
android { signingConfigs { config { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } ... }
Kotlin
android { signingConfigs { create("config") { keyAlias = keystoreProperties["keyAlias"] as String keyPassword = keystoreProperties["keyPassword"] as String storeFile = file(keystoreProperties["storeFile"] as String) storePassword = keystoreProperties["storePassword"] as String } } ... }
- Apri la finestra dello strumento Varianti di build e assicurati che sia selezionato il tipo di build di release.
- Seleziona un'opzione in Build > Build bundle/APK per compilare un APK o un app bundle della build di release.
Dovresti vedere l'output della compilazione nella directory
build/outputs/
del tuo modulo.
Poiché i file di compilazione non contengono più informazioni sensibili, ora puoi includerli nel controllo del codice sorgente o caricarli in una base di codice condivisa. Assicurati di mantenere al sicuro il file keystore.properties
. ad esempio la rimozione dal sistema di controllo del codice sorgente.