Firmare l'app

Android richiede che tutti gli APK siano firmati digitalmente con un certificato prima di essere installati su un dispositivo o aggiornati. Quando esegui il rilascio con Android App Bundles, devi firmare l'app bundle con una chiave di caricamento prima di caricarlo in Play Console e la firma dell'app di Google Play si occuperà di tutto il resto. Devi firmare manualmente gli APK per il caricamento delle app che vengono distribuite tramite APK sul Play Store o in altri store.

In questa pagina vengono illustrati alcuni concetti importanti relativi alla firma e alla sicurezza dell'app, alla firma dell'app per il rilascio su Google Play utilizzando Android Studio e alla configurazione della 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:

  1. Generare una chiave di caricamento e un archivio chiavi
  2. Firmare l'app con la chiave di caricamento
  3. Configurare la funzionalità di firma dell'app di Google Play
  4. Caricare l'app su Google Play
  5. Preparare e implementare la release dell'app

Se invece la tua app è già pubblicata nel Google Play Store con una chiave di firma dell'app esistente o se preferisci scegliere la chiave di firma dell'app per una nuova app anziché lasciare che sia Google a generarla, procedi nel seguente modo:

  1. Firma l'app con la chiave di firma dell'app.
  2. Carica la chiave di firma della tua app nella funzionalità di firma dell'app di Google Play.
  3. (Consigliato) Genera e registra un certificato di caricamento per i futuri aggiornamenti dell'app
  4. Caricare l'app su Google Play
  5. Preparare e implementare la release dell'app

In questa pagina viene spiegato anche come gestire le tue chiavi quando carichi l'app in 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 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 per la distribuzione. Inoltre, poiché gli app bundle rinviano la creazione e la firma degli APK in Google Play Store, devi configurare la funzionalità firma dell'app di Google Play prima di caricare l'app bundle. In questo modo potrai beneficiare dei seguenti vantaggi:

  • Utilizzare Android App Bundle e supportare le modalità di invio avanzate di Google Play. L'Android App Bundle semplifica le dimensioni della tua app, semplifica le release e consente di utilizzare moduli di funzionalità e offrire esperienze istantanee.
  • Aumenta la sicurezza della tua chiave di firma e consenti di usare una chiave di caricamento separata per firmare l'app bundle che carichi su Google Play.
  • L'upgrade della chiave consente di modificare la chiave di firma dell'app nel caso in cui quella esistente venga compromessa o sia necessario eseguire la migrazione a una chiave crittografica più efficace

La firma dell'app di Google Play utilizza due chiavi: la chiave di firma dell'app e la chiave di caricamento, descritte in maggiore dettaglio nella sezione Chiavi e archivi chiavi. Conservi la chiave di caricamento e la usi per firmare l'app da caricare 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. Utilizzando una chiave di caricamento separata, puoi richiedere la reimpostazione della chiave di caricamento in caso di perdita o compromissione della chiave.

Per le app per cui non è stata attivata la firma dell'app di Google Play, invece, se perdi la chiave di firma dell'app, perderai la possibilità di aggiornare l'app.

Figura 1. Firmare un'app con la firma dell'app di Google Play

Le chiavi sono archiviate nella stessa infrastruttura su cui Google archivia le proprie chiavi, dove sono protette dal Key Management Service di Google. Per saperne di più sull'infrastruttura tecnica di Google, leggi i white paper sulla sicurezza di Google Cloud.

Se usi la firma dell'app di Google Play, se perdi la chiave di caricamento o se la chiave viene compromessa, puoi richiedere la reimpostazione della chiave di caricamento in Play Console. Poiché la chiave di firma dell'app è protetta da Google, puoi continuare a caricare nuove versioni della tua app sotto forma di aggiornamenti per l'app originale, anche se modifichi le chiavi di caricamento. Per scoprire di più, leggi Reimpostare una chiave di caricamento privata persa o compromessa.

La prossima sezione 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, leggi l'articolo Firmare l'app per il rilascio.

Archivio 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 località) che contiene la chiave privata corrispondente.

Di seguito sono riportati i diversi tipi di chiavi che dovresti conoscere:

  • Chiave di firma dell'app: la chiave utilizzata per firmare gli APK installati sul dispositivo di un utente. Come parte del modello di aggiornamento sicuro di Android, la chiave di firma non cambia mai durante il ciclo di vita della tua app. La chiave di firma dell'app è privata e deve essere tenuta segreta. Tuttavia, puoi condividere il certificato generato utilizzando la chiave di firma dell'app.
  • Chiave di caricamento: la chiave che utilizzi per firmare l'app bundle o l'APK prima di caricarli per la firma dell'app con Google Play. Devi mantenere segreta la chiave di caricamento. Tuttavia, puoi condividere il certificato generato utilizzando la tua chiave di caricamento. Puoi generare una chiave di caricamento in uno dei seguenti modi:

    • Se scegli che sia Google a generare la chiave di firma dell'app per te quando esegui l'attivazione, la chiave che utilizzi per firmare l'app per la release è designata come chiave di caricamento.
    • Se fornisci la chiave di firma dell'app a Google quando attivi 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, continui a usare la chiave di firma dell'app come chiave di caricamento per firmare ogni release.

    Suggerimento: per proteggere le chiavi, ti consigliamo di assicurarti che la chiave di firma dell'app e la chiave di caricamento siano diverse.

Collaborazione con i provider 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. Vengono utilizzate per registrare chiavi pubbliche con i provider di API. È destinata alla condivisione, poiché non contiene la chiave privata.

Un'impronta digitale 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 fingerprint MD5, SHA-1 e SHA-256 dei certificati di firma dell'app e di caricamento sono disponibili nella pagina Firma dell'app di Play Console. È possibile elaborare altre fingerprint scaricando il certificato originale (.der) dalla stessa pagina.

Firma la build di debug

Durante l'esecuzione o il debug del tuo progetto dall'IDE, Android Studio firma automaticamente la tua app con un certificato di debug generato dagli strumenti dell'SDK Android. La prima volta che esegui o esegui il debug del tuo progetto in Android Studio, l'IDE crea automaticamente l'archivio chiavi e il certificato di debug in $HOME/.android/debug.keystore e imposta l'archivio chiavi e le password della chiave.

Poiché il certificato di debug viene creato dagli strumenti di compilazione e non è sicuro per definizione, la maggior parte degli store (incluso il Google Play Store) non accetta app firmate con un certificato di debug per la pubblicazione.

Android Studio archivia automaticamente le informazioni di firma di debug in una configurazione di firma, così non dovrai inserirle ogni volta che esegui il debug. Una configurazione di firma è un oggetto costituito da tutte le informazioni necessarie per firmare la tua app, tra cui la posizione dell'archivio chiavi, la password dell'archivio chiavi, il nome della chiave e la password della chiave.

Per ulteriori informazioni su come creare ed eseguire app per il debug, consulta Creare ed eseguire un'app.

Scadenza del certificato di debug

Il certificato autofirmato utilizzato per firmare la tua app per il debug ha una data di scadenza di 30 anni dalla data di creazione. Alla scadenza del certificato, viene visualizzato un errore di generazione.

Per risolvere questo problema, elimina il file debug.keystore archiviato in una delle seguenti posizioni:

  • ~/.android/ su OS X e Linux
  • C:\Documents and Settings\user\.android\ su Windows XP
  • C:\Users\user\.android\ su Windows Vista e Windows 7, 8 e 10

La prossima volta che crei ed esegui una versione di debug della tua app, Android Studio rigenera un nuovo archivio chiavi e una nuova chiave di debug.

Firma l'app per rilasciare su Google Play

Quando è tutto pronto per pubblicare l'app, devi firmarla e caricarla in uno store, ad esempio Google Play. La prima volta che pubblichi l'app su Google Play, devi configurare anche la firma dell'app di Google Play. La firma dell'app di Google Play è facoltativa per le app create prima di agosto 2021. Questa sezione mostra come firmare correttamente l'app per la release e configurare la firma dell'app di Google Play.

Generazione di una chiave di caricamento e di un archivio chiavi

Se non hai ancora una chiave di caricamento, utile durante la configurazione della firma dell'app di Google Play, puoi generarne una usando Android Studio nel seguente modo:

  1. Nella barra dei menu, fai clic su Build > Genera bundle/APK firmato.
  2. Nella finestra di dialogo Genera bundle o APK firmato, seleziona Android App Bundle o APK e fai clic su Avanti.
  3. Sotto il campo relativo a Percorso archivio chiavi, fai clic su Crea nuovo.
  4. Nella finestra Nuovo archivio chiavi, fornisci le seguenti informazioni per l'archivio chiavi e la chiave, come mostrato nella Figura 2.

    Figura 2. Crea una nuova chiave di caricamento e un nuovo archivio chiavi in Android Studio.

  5. Archivio chiavi

    • Percorso archivio chiavi:seleziona la località in cui creare l'archivio chiavi. Inoltre, è necessario aggiungere un nome file alla fine del percorso di posizione con l'estensione .jks.
    • Password: crea e conferma una password sicura per il tuo archivio chiavi.
  6. Chiave

    • Alias: inserisci un nome identificativo per la chiave.
    • Password: crea e conferma una password sicura per la tua chiave. Deve essere uguale alla password dell'archivio chiavi. (Per ulteriori informazioni, fai riferimento al 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, quindi puoi firmare gli aggiornamenti dell'app con la stessa chiave per tutta la durata dell'app.
    • Certificato: inserisci alcune informazioni su di te per il certificato. Queste informazioni non vengono visualizzate nella tua app, ma sono incluse nel certificato come parte dell'APK.
  7. Dopo aver compilato il modulo, fai clic su OK.

  8. Se vuoi creare e firmare la tua 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 l'archivio chiavi, fai clic su Annulla.

Firma l'app con la chiave

Se hai già una chiave di caricamento, utilizzala per firmare la tua app. Se invece la tua app è già firmata e pubblicata sul Google Play Store con una chiave di firma dell'app esistente, utilizzala per firmare l'app. In seguito puoi generare e registrare una chiave di caricamento separata con Google Play per firmare e caricare gli aggiornamenti successivi dell'app.

Per firmare la tua app utilizzando Android Studio, procedi nel seguente modo:

  1. Se al momento la finestra di dialogo Genera bundle o APK firmato non è aperta, fai clic su Crea > Genera bundle/APK firmato.
  2. Nella finestra di dialogo Genera bundle o APK firmato, seleziona Android App Bundle o APK e fai clic su Avanti.
  3. Seleziona un modulo dal menu a discesa.
  4. Specifica il percorso dell'archivio chiavi, l'alias della chiave e inserisci le password per entrambi. Se non hai ancora preparato l'archivio chiavi e la chiave di caricamento, innanzitutto genera una chiave di caricamento e un archivio chiavi, quindi torna per completare questo passaggio.

    Figura 3. Firma l'app con la chiave di caricamento.

  5. Tocca Avanti.

  6. Nella finestra successiva (mostrata nella figura 4), seleziona una cartella di destinazione per l'app firmata, seleziona il tipo di build e, se applicabile, scegli la versione o le versioni del prodotto.

  7. Se crei e firmi un APK, devi selezionare le versioni delle firme che vuoi che siano supportate dalla tua app. Per scoprire di più, consulta la pagina relativa agli schemi di firma dell'app

  8. Fai clic su Crea.

Figura 5. Fai clic sul link nel popup per analizzare o individuare il tuo app bundle.

Dopo che Android Studio ha completato la creazione dell'app firmata, puoi individuare o analizzare l'app facendo clic sull'opzione appropriata nella notifica popup, come mostrato nella figura 5.

Ora puoi attivare la firma dell'app di Google Play per la tua app e caricarla per il rilascio. Se non hai mai utilizzato la procedura di pubblicazione delle app, ti consigliamo di leggere la panoramica del lancio. In caso contrario, vai alla pagina relativa a come caricare l'app nella Play Console.

Utilizzare la firma dell'app di Google Play

Come descritto in precedenza in questa pagina, è necessario configurare la firma dell'app di Google Play per firmare l'app per la distribuzione tramite Google Play (ad eccezione delle app create prima di agosto 2021, per le quali potrebbe continuare la distribuzione di APK autofirmati). I passaggi da seguire variano a seconda che la tua app non sia stata ancora pubblicata su Google Play o sia già firmata ed sia 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, procedi come segue:

  1. Se non l'hai ancora fatto, genera una chiave di caricamento e firma la tua app con quella chiave di caricamento.
  2. Accedi a Play Console.
  3. Segui i passaggi per preparare e implementare la release in modo da creare una nuova release.
  4. Dopo aver scelto un canale di rilascio, 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 usi per firmare la tua prima release diventa la chiave di caricamento e dovresti usarla per firmare le release future.
    • Per usare la stessa chiave di un'altra app nel tuo account sviluppatore, seleziona Cambia la chiave di firma dell'app > Usa la stessa chiave di un'altra app in questo account, seleziona un'app e fai clic su Continua.
    • Per fornire la tua chiave di firma che Google potrà utilizzare durante la firma della tua app, seleziona Cambia la chiave di firma dell'app e scegli una delle opzioni di esportazione e caricamento che ti consentono di caricare in modo sicuro una chiave privata e il relativo certificato pubblico.

Nella sezione denominata App Bundle, fai clic su Sfoglia file per trovare e caricare l'app che hai firmato utilizzando la tua chiave di caricamento. Per scoprire di più sul rilascio dell'app, consulta l'articolo Preparare e implementare la release. Quando rilasci la tua app dopo aver configurato la firma dell'app di Google Play, Google Play genera (a meno che non carichi una chiave esistente) e gestisce la chiave di firma dell'app per te. Devi semplicemente firmare gli aggiornamenti successivi dell'app utilizzando la relativa chiave di caricamento 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 vuoi aggiornare un'app già pubblicata su Google Play utilizzando una chiave di firma dell'app esistente, puoi attivare la firma dell'app di Google Play procedendo nel seguente modo:

  1. Accedi a Play Console e vai alla tua app.
  2. Nel menu a sinistra, fai clic su Release > Configurazione > Firma dell'app.
  3. Se applicabile, leggi i Termini di servizio e seleziona Accetto.
  4. Seleziona una delle opzioni che descrive meglio la chiave di firma che vuoi caricare su Google Play e segui le istruzioni mostrate. Ad 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 caricare il file generato con la chiave criptata.
  5. Fai clic su Registrati.

Ora dovresti visualizzare una pagina con i dettagli relativi alla firma e al caricamento dei certificati della tua app. Google Play ora firma l'app con la chiave esistente quando esegue il deployment per gli utenti. Tuttavia, uno dei vantaggi più importanti della firma dell'app di Google Play è la possibilità di separare la chiave usata per firmare l'elemento caricato su Google Play dalla chiave usata da Google Play per firmare la tua app per la distribuzione agli utenti. Prova a seguire i passaggi nella sezione successiva per generare e registrare una chiave di caricamento separata.

Genera e registra un certificato di caricamento

Se pubblichi un'app non firmata da una chiave di caricamento, Google Play Console ti offre la possibilità di registrarne una per i futuri aggiornamenti dell'app. Anche se si tratta di un passaggio facoltativo, ti consigliamo di pubblicare l'app con una chiave diversa da quella utilizzata da Google Play per distribuire l'app agli utenti. In questo modo Google mantiene al sicuro la tua chiave di firma e hai la possibilità di reimpostare una chiave di caricamento privata persa o compromessa. Questa sezione descrive come creare una chiave di caricamento, generare un certificato di caricamento da tale chiave e registrare il certificato su Google Play per gli aggiornamenti futuri della tua app.

Di seguito sono descritte le situazioni in cui è disponibile 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 Google Play, ma che è stata firmata utilizzando la relativa chiave di firma.

Se non pubblichi un aggiornamento di un'app esistente per cui è già attivata la funzionalità di firma dell'app di Google Play e vuoi registrare un certificato di caricamento, completa i passaggi riportati di seguito e passa alla sezione su come reimpostare una chiave di caricamento privata persa o compromessa.

Se non l'hai ancora fatto, genera una chiave di caricamento e un archivio chiavi.

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 con Google quando ti viene richiesto in Play Console o quando reimposti la chiave di caricamento.

Eseguire l'upgrade della chiave di firma dell'app

In alcuni casi potresti voler modificare la chiave di firma dell'app. Ad esempio, perché vuoi una chiave crittograficamente più efficace o 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 per un'app già pubblicata.

Se pubblichi la tua app su Google Play, puoi eseguire l'upgrade della chiave di firma dell'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 chiave di firma dell'app precedente viene utilizzata per firmare gli aggiornamenti per gli utenti di versioni precedenti di Android.

Per scoprire di più, consulta l'articolo 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 la tua chiave privata è stata compromessa, puoi crearne una nuova e richiedere la reimpostazione della chiave di caricamento in Play Console.

Configura il processo di compilazione per firmare automaticamente la tua app

In Android Studio puoi configurare il tuo progetto in modo che firmi automaticamente la versione di release dell'app durante il processo di compilazione creando una configurazione di firma e assegnandola al tipo di build della release. Una configurazione di firma è composta da una posizione dell'archivio chiavi, una password dell'archivio chiavi, un alias chiave e una password della chiave. Per creare una configurazione di firma e assegnarla al tipo di build della release utilizzando Android Studio, completa i seguenti passaggi:

  1. Nella finestra Project (Progetto), fai clic con il pulsante destro del mouse sull'app e fai clic su Open Module Settings (Apri impostazioni modulo).
  2. Nella finestra Struttura del progetto, in Moduli nel riquadro a sinistra, fai clic sul modulo che vuoi firmare.
  3. Fai clic sulla scheda Firma, quindi su Aggiungi .
  4. Seleziona il file dell'archivio chiavi, inserisci un nome per questa configurazione di firma (puoi crearne più di una) e inserisci le informazioni richieste.

    Figura 7. La finestra per la creazione di una nuova configurazione di firma.

  5. Fai clic sulla scheda Tipi di build.
  6. Fai clic sulla build di release.
  7. In Configurazione di firma, seleziona la configurazione di firma appena creata.

    Figura 8. Seleziona una configurazione di firma in Android Studio.

  8. Fai clic su OK.

Ora, ogni volta che crei il tipo di build della tua release selezionando un'opzione in Build > Build Bundle/APK(s) in Android Studio, l'IDE firmerà automaticamente la tua app utilizzando la configurazione di firma da te specificata. Puoi trovare l'APK o l'app bundle firmato nella directory build/outputs/ all'interno della directory del progetto per il modulo che stai creando.

Quando crei una configurazione di firma, le informazioni di firma sono incluse in testo normale nei file di build Gradle. Se lavori in team o condividi il codice pubblicamente, è consigliabile mantenere al sicuro le informazioni di firma rimuovendole dai file di build e archiviandole separatamente. Puoi scoprire di più su come rimuovere le informazioni di firma dai file di build nella pagina Rimuovere le informazioni di firma dai file di build. Per scoprire di più su come proteggere le informazioni di firma, consulta la sezione Proteggi la chiave di seguito.

Firmare i diversi gusti di prodotto in modo diverso

Se la tua app utilizza le versioni di prodotto e vuoi firmare ogni versione in modo diverso, puoi creare configurazioni di firma aggiuntive e assegnarle in base alla versione:

  1. Nella finestra Project (Progetto), fai clic con il pulsante destro del mouse sull'app e fai clic su Open Module Settings (Apri impostazioni modulo).
  2. Nella finestra Struttura del progetto, in Moduli nel riquadro a sinistra, fai clic sul modulo che vuoi firmare.
  3. Fai clic sulla scheda Firma, quindi su Aggiungi .
  4. Seleziona il file dell'archivio chiavi, inserisci un nome per questa configurazione di firma (puoi crearne più di una) e inserisci le informazioni richieste.

    Figura 10. La finestra per la creazione di una nuova configurazione di firma.

  5. Ripeti i passaggi 3 e 4 secondo necessità finché non avrai creato tutte le configurazioni di firma.
  6. Fai clic sulla scheda Sapori.
  7. Fai clic sulla versione che vuoi configurare, quindi seleziona la configurazione di firma appropriata dal menu a discesa Configurazione di firma.

    Figura 11. Configura le impostazioni di firma in base alla versione del prodotto.

    Ripeti la procedura per configurare eventuali altri gusti di prodotto.

  8. Fai clic su OK.

Puoi anche specificare le impostazioni di firma nei file di configurazione di Gradle. Per ulteriori informazioni, consulta la pagina relativa alla configurazione delle impostazioni di firma.

Eseguire un report sulla firma

Per ricevere informazioni di firma per ogni variante della tua app, esegui l'attività Gradle signingReport in Android Studio:

  1. Seleziona Visualizza > Finestre degli strumenti > Gradle per aprire la finestra dello strumento Gradle.
  2. Seleziona YourApp > Tasks > android > signatureReport per eseguire il report.

Gestisci 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 il tuo archivio chiavi e la chiave di firma dell'app. Tieni presente che sei responsabile della sicurezza della chiave e dell'archivio chiavi. Inoltre, la tua app non potrà supportare Android App Bundle, Play Feature Delivery e Play Asset Delivery.

Quando sei pronto a creare la tua chiave e il tuo archivio chiavi, assicurati innanzitutto di scegliere una password efficace per l'archivio chiavi e una password efficace separata per ogni chiave privata archiviata nell'archivio chiavi. Devi conservare l'archivio chiavi in un luogo sicuro. Se perdi l'accesso alla chiave di firma dell'app o se la tua chiave viene compromessa, Google non può recuperare la chiave di firma dell'app per te e non potrai rilasciare nuove versioni della tua app agli utenti sotto forma di aggiornamenti dell'app originale. Per ulteriori informazioni, leggi la sezione Protezione della chiave di seguito.

Se gestisci autonomamente la tua chiave di firma e il tuo archivio chiavi dell'app, quando firmi l'APK lo firmerai localmente usando la chiave di firma dell'app e caricherai l'APK firmato direttamente sul Google Play Store per consentirne la distribuzione, come mostrato nella Figura 12.

Figura 12. Firmare un'app quando gestisci la tua chiave di firma dell'app

Quando utilizzi la firma dell'app di Google Play, Google protegge la chiave di firma e garantisce che le app siano firmate correttamente e possano ricevere aggiornamenti durante la loro durata. Tuttavia, se decidi di gestire autonomamente la chiave di firma dell'app, ci sono alcune considerazioni da tenere presenti.

Considerazioni sulla firma

Devi firmare l'app con lo stesso certificato per tutta la durata prevista. Esistono diversi motivi per cui dovresti farlo:

  • Upgrade dell'app: quando il sistema installa un aggiornamento di un'app, confronta i certificati della nuova versione con quelli della versione esistente. Il sistema consente l'aggiornamento se i certificati corrispondono. Se firmi la nuova versione con un certificato diverso, devi assegnare un nome di pacchetto diverso all'app: in questo caso, l'utente installa la nuova versione come un'app completamente nuova.
  • Modulabilità delle app: Android consente di eseguire gli APK firmati con lo stesso certificato nello stesso processo, se le app lo richiedono, in modo che il sistema le consideri come una singola app. In questo modo puoi eseguire il deployment della tua app in moduli e gli utenti possono aggiornare ciascuno dei moduli in modo indipendente.
  • Condivisione di codice/dati tramite autorizzazioni:Android fornisce l'applicazione forzata di autorizzazioni basate sulla firma, in modo che un'app possa esporre la funzionalità a un'altra app firmata con un certificato specificato. Firmando più APK con lo stesso certificato e utilizzando controlli delle autorizzazioni basati sulla firma, le tue app possono condividere codice e dati in modo sicuro.

Se prevedi di supportare gli upgrade per 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. Alla scadenza del periodo di validità della chiave, gli utenti non potranno più eseguire senza problemi l'upgrade alle nuove versioni della tua app.

Se prevedi di pubblicare le tue app su Google Play, la chiave che utilizzi per firmare l'app deve avere un periodo di validità che termini dopo il 22 ottobre 2033. Google Play applica questo requisito per garantire che gli utenti possano eseguire senza problemi l'upgrade delle app quando sono disponibili nuove versioni.

Tieni al sicuro la tua chiave

Se scegli di gestire e proteggere autonomamente la chiave di firma e l'archivio chiavi dell'app (anziché attivare la firma dell'app di Google Play), la protezione della chiave di firma dell'app è di importanza fondamentale sia per te che per l'utente. Se consenti a qualcuno di utilizzare la tua chiave o se lasci l'archivio chiavi e le password in una posizione non sicura, in modo che una terza parte possa trovarli e utilizzarli, la tua identità di creazione e la fiducia dell'utente vengono compromesse.

Se una terza parte dovesse riuscire a prendere la tua chiave di firma dell'app a tua insaputa o senza la tua autorizzazione, potrebbe firmare e distribuire app che sostituiscono malevolmente le tue app autentiche o le danneggiano. Questa persona potrebbe anche firmare e distribuire app con la tua identità che attaccano altre app o il sistema stesso oppure che danneggiano o rubano dati utente.

La chiave privata è necessaria per firmare tutte le versioni future dell'app. Se perdi o perdi la chiave, non potrai pubblicare aggiornamenti dell'app esistente. Non puoi rigenerare una chiave generata in precedenza.

La tua reputazione in qualità di entità sviluppatore dipende dalla protezione adeguata della chiave di firma dell'app, in ogni momento, fino alla scadenza della chiave. Ecco alcuni suggerimenti per preservare la sicurezza della chiave:

  • Seleziona password efficaci per l'archivio chiavi e la chiave.
  • Non dare o prestare a nessuno la tua chiave privata e non permettere a persone non autorizzate di conoscere il tuo archivio chiavi e le password della tua chiave.
  • Conserva il file dell'archivio chiavi contenente la tua chiave privata in un luogo sicuro.

In generale, se adotti precauzioni di buon senso durante la generazione, l'utilizzo e l'archiviazione della chiave, la chiave rimarrà sicura.

Rimuovi le informazioni di firma dai file di build

Quando crei una configurazione di firma, Android Studio aggiunge le informazioni di firma in testo normale ai file build.gradle del modulo. Se lavori in team o utilizzi open source il codice, devi spostare queste informazioni sensibili dai file di build in modo che non siano facilmente accessibili ad altri. A questo scopo, devi creare un file delle proprietà separato per archiviare le informazioni sicure e fare riferimento a quel file nei file di build come segue:

  1. Crea una configurazione di firma e assegnala a uno o più tipi di build. Queste istruzioni presuppongono che tu abbia configurato una configurazione di firma singola per il tipo di build della release, come descritto nella sezione Configurare il processo di build per la firma automatica dell'app qui sopra.
  2. Crea un file denominato keystore.properties nella directory principale del progetto. Questo file deve contenere le informazioni sulla firma, come segue:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. Nel file build.gradle del modulo, aggiungi il codice per caricare il file keystore.properties prima del blocco android {}.

    Trendy

    ...
    
    // 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 oppure sul server di build se utilizzi uno strumento di integrazione continua). In questo caso, devi modificare il codice riportato sopra per inizializzare correttamente keystorePropertiesFile utilizzando la posizione effettiva del file keystore.properties.

  4. Puoi fare riferimento alle proprietà archiviate in keystoreProperties utilizzando la sintassi keystoreProperties['propertyName']. Modifica il blocco signingConfigs del file build.gradle del modulo per fare riferimento alle informazioni sulla firma archiviate in keystoreProperties utilizzando questa sintassi.

    Trendy

    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
            }
        }
        ...
      }
  5. Apri la finestra dello strumento Genera varianti e assicurati che il tipo di build della release sia selezionato.
  6. Seleziona un'opzione in Crea > Bundle/APK di build per creare un APK o un app bundle della build della tua release. Dovresti vedere l'output della build nella directory build/outputs/ del tuo modulo.

Poiché i file di build non contengono più informazioni sensibili, ora puoi includerli nel controllo del codice sorgente o caricarli in un codebase condiviso. Assicurati di proteggere il file keystore.properties. Ciò può includere la rimozione dal sistema di controllo del codice sorgente.