Configura la tua build

Il sistema di build di Android compila le risorse e il codice sorgente dell'app e le pacchettizza in APK o Android App Bundle che puoi testare, implementare, firmare e distribuire.

In Panoramica della compilazione di Gradle e Struttura della compilazione di Android, abbiamo discusso i concetti di compilazione e la struttura di un'app per Android. Ora è il momento di configurare la compilazione.

Glossario delle build Android

Gradle e il plug-in Android per Gradle ti aiutano a configurare i seguenti aspetti della compilazione:

Tipi di build

I tipi di build definiscono determinate proprietà utilizzate da Gradle durante la compilazione e il packaging dell'app. In genere, i tipi di build sono configurati per le diverse fasi del ciclo di vita dello sviluppo.

Ad esempio, il tipo di build di debug attiva le opzioni di debug e firma l'app con la chiave di debug, mentre il tipo di build di release può ridurre, offuscare e firmare l'app con una chiave di release per la distribuzione.

Per compilare l'app, devi definire almeno un tipo di build. Android Studio crea i tipi di build di debug e release per impostazione predefinita. Per iniziare a personalizzare le impostazioni di pacchettizzamento per la tua app, scopri come configurare i tipi di compilazione.

Versioni del prodotto
Le varianti del prodotto rappresentano le diverse versioni della tua app che puoi rilasciare agli utenti, ad esempio le versioni senza costi e a pagamento. Puoi personalizzare le varianti di prodotto per utilizzare codice e risorse diversi, condividendo e riutilizzando le parti comuni a tutte le versioni dell'app. Le varianti di prodotto sono facoltative e devi crearle manualmente. Per iniziare a creare diverse versioni della tua app, scopri come configurare i flavor dei prodotti.
Creare varianti
Una variante di build è un prodotto combinato di tipo di build e variante di prodotto ed è la configurazione utilizzata da Gradle per compilare l'app. Con le varianti di build, puoi compilare la versione di debug delle varianti di prodotto durante lo sviluppo e le versioni di release firmate delle varianti di prodotto per la distribuzione. Anche se non configuri direttamente le varianti di build, configuri i tipi di build e le versioni del prodotto che le formano. La creazione di tipi di compilazione o varianti di prodotto aggiuntivi comporta anche la creazione di varianti di compilazione aggiuntive. Per scoprire come creare e gestire le varianti di build, consulta la panoramica su come configurare le varianti di build.
Voci manifest
Puoi specificare valori per alcune proprietà del file manifest nella configurazione della variante di compilazione. Questi valori di compilazione sostituiscono i valori esistenti nel file manifest. Questo è utile se vuoi generare più varianti della tua app con un nome dell'applicazione, una versione minima dell'SDK o una versione dell'SDK di destinazione diversa. Quando sono presenti più manifest, lo strumento di unione dei manifest unisce le impostazioni dei manifest.
Dipendenze
Il sistema di compilazione gestisce le dipendenze del progetto dal file system locale e dai repository remoti. Ciò significa che non devi manualmente cercare, scaricare e copiare i pacchetti binari delle dipendenze nella directory del progetto. Per scoprire di più, consulta Aggiungere dipendenze di compilazione.
Firma
Il sistema di compilazione ti consente di specificare le impostazioni di firma nella configurazione della compilazione e può firmare automaticamente la tua app durante la procedura di compilazione. Il sistema di compilazione firma la versione di debug con una chiave e un certificato predefiniti utilizzando credenziali note per evitare la richiesta di una password al momento della compilazione. Il sistema di build non firma la versione di release, a meno che non definisci esplicitamente una configurazione di firma per questa build. Se non hai una chiave di release, puoi generarne una come descritto in Firmare l'app. Le build di release firmate sono obbligatorie per la distribuzione delle app tramite la maggior parte degli store.
Riduzione del codice e delle risorse
Il sistema di compilazione ti consente di specificare un file di regole di ProGuard diverso per ogni variante di compilazione. Durante la compilazione dell'app, il sistema di compilazione applica il insieme di regole appropriato per ridurre il codice e le risorse utilizzando i propri strumenti di riduzione integrati, come R8. La riduzione del codice e delle risorse può contribuire a ridurre le dimensioni dell'APK o dell'AAB.
Supporto di più APK
Il sistema di build ti consente di creare automaticamente diversi APK che contengono ciascuno solo il codice e le risorse necessarie per una specifica densità dello schermo o ABI (Application Binary Interface). Per ulteriori informazioni, consulta Creare più APK. Tuttavia, la pubblicazione di un singolo AAB è l'approccio consigliato, in quanto offre la suddivisione per lingua oltre che per densità dello schermo e ABI, evitando al contempo la necessità di caricare più elementi su Google Play. Tutte le nuove app inviate dopo agosto 2021 devono obbligatoriamente utilizzare gli AAB.

Versioni Java nelle build Android

Indipendentemente dal fatto che il codice sorgente sia scritto in Java, Kotlin o in entrambi, in diversi punti devi scegliere una versione del linguaggio JDK o Java per la tua build. Per maggiori dettagli, consulta la sezione Versioni Java nelle build Android.

File di configurazione di compilazione

La creazione di configurazioni di compilazione personalizzate richiede di apportare modifiche a uno o più file di configurazione di compilazione. Questi file di testo normale utilizzano un linguaggio specifico del dominio (DSL) per descrivere e manipolare la logica di compilazione utilizzando lo script Kotlin, una variante del linguaggio Kotlin. Puoi anche utilizzare Groovy, un linguaggio dinamico per la Java Virtual Machine (JVM), per configurare le build.

Non è necessario conoscere Kotlin Script o Groovy per iniziare a configurare la compilazione, perché il plug-in Gradle per Android introduce la maggior parte degli elementi DSL di cui hai bisogno. Per scoprire di più sul DSL del plug-in Android Gradle, consulta la documentazione di riferimento del DSL. Lo script Kotlin si basa anche sul DSL Kotlin di Gradle sottostante

Quando avvii un nuovo progetto, Android Studio crea automaticamente alcuni di questi file e li compila in base a valori predefiniti ragionevoli. Per una panoramica dei file creati, consulta la struttura di build di Android.

Il file Gradle Wrapper

Il wrapper Gradle (gradlew) è una piccola applicazione inclusa nel codice sorgente che scarica e avvia Gradle stesso. In questo modo, l'esecuzione della compilazione è più coerente. Gli sviluppatori scaricano il codice sorgente dell'applicazione ed eseguono gradlew. Verrà scaricata la distribuzione Gradle necessaria e verrà avviato Gradle per compilare l'applicazione.

Il file gradle/wrapper/gradle-wrapper.properties contiene una proprietà, distributionUrl, che descrive la versione di Gradle utilizzata per eseguire la compilazione.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Il file delle impostazioni di Gradle

Il file settings.gradle.kts (per il DSL Kotlin) o settings.gradle (per il DSL Groovy) si trova nella directory principale del progetto. Questo file di impostazioni definisce le impostazioni del repository a livello di progetto e comunica a Gradle quali moduli includere durante la compilazione dell'app. I progetti multi-modulo devono specificare ogni modulo da includere nella compilazione finale.

Per la maggior parte dei progetti, il file ha il seguente aspetto per impostazione predefinita:

Kotlin

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. Here we
      * define the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
      google()
      mavenCentral()
  }
}
rootProject.name = "My Application"
include(":app")

Groovy

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. Here we
      * define the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "My Application"
include ':app'

Il file di build di primo livello

Il file build.gradle.kts di primo livello (per il DSL Kotlin) o il file build.gradle (per il DSL Groovy) si trova nella directory principale del progetto. In genere definisce le versioni comuni dei plug-in utilizzati dai moduli del progetto.

Il seguente esempio di codice descrive le impostazioni predefinite e gli elementi DSL nello script di compilazione di primo livello dopo la creazione di un nuovo progetto:

Kotlin

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id("com.android.application") version "8.7.0" apply false
    id("com.android.library") version "8.7.0" apply false
    id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}

Groovy

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id 'com.android.application' version '8.7.0' apply false
    id 'com.android.library' version '8.7.0' apply false
    id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
}