Perché ci sono due file build.gradle in un progetto Android Studio?


102

Dopo aver importato un progetto Eclipse in Android Studio, vedo due build.gradlefile:

1 - <PROJECT_ROOT>\build.gradle
2 - <PROJECT_ROOT>\app\build.gradle

La prima versione è più breve, la seconda versione contiene definizioni per compileSdkVersion, ecc.

Qual è lo scopo dietro avere due file separati? Esistono attività di compilazione separate?


Risposte:


72

<PROJECT_ROOT>\app\build.gradleè specifico per il modulo app .

<PROJECT_ROOT>\build.gradleè un "file di build di primo livello" in cui è possibile aggiungere opzioni di configurazione comuni a tutti i sottoprogetti / moduli.

Se usi un altro modulo nel tuo progetto, come libreria locale avresti un altro build.gradlefile: <PROJECT_ROOT>\module\build.gradle

Ad esempio, nel tuo file di primo livello puoi specificare queste proprietà comuni:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }
}

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

Nel tuo app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}

+1 Grazie, accetterà momentaneamente la tua risposta. È la build.gradlepresenza del file obbligatoria per innescare una build? Inoltre, il file di build di livello superiore chiama i file di livello inferiore? (Anche se non ci sono prove di ciò.)
Sabuncu

I file build.gradle sono obbligatori se vuoi costruire un progetto con gradle. Android Studio non richiede gradle, ma è altamente raccomandato. Il file di primo livello non chiama i file secondari; gradle lavora con le attività, ma è difficile da spiegare in un commento.
Gabriele Mariotti

Grazie mille Gabriele, questo mi farà iniziare.
Sabuncu

1
Soprattutto il rootProject.ext.compileSdkVersioncostrutto è molto istruttivo.
Sabuncu

2
È importante fare la deviazione utilizzando ext {...} o dobbiamo applicare direttamente il plug-in Android e compileSdkVersion al file di build di primo livello?
PhilLab

17

Dalla documentazione ufficiale:

I progetti di Android Studio contengono un file di compilazione Gradle di primo livello che consente di aggiungere le opzioni di configurazione comuni a tutti i moduli dell'applicazione nel progetto. Ogni modulo dell'applicazione ha anche il proprio build.gradlefile per le impostazioni di compilazione specifiche per quel modulo.

inserisci qui la descrizione dell'immagine

File di build del progetto

<PROJECT_ROOT>\build.gradleoppure il file di compilazione del progetto è per l' intero progetto, quindi verrà utilizzato per le configurazioni globali del progetto. Un tipico file di compilazione del progetto contiene quanto segue:

  • buildscript che definisce:
    • repository e
    • dipendenze
  • Versione Plugin Gradle

Per impostazione predefinita, il file Gradle a livello di progetto utilizza buildscript per definire i repository e le dipendenze Gradle . Ciò consente a diversi progetti di utilizzare diverse versioni di Gradle. I repository supportati includono JCenter, Maven Central o Ivy. Questo esempio dichiara che lo script di compilazione utilizza il repository JCenter e un artefatto di dipendenza del percorso di classe che contiene il plug-in Android per Gradle versione 1.0.1.


File di compilazione del modulo

<PROJECT_ROOT>\app\build.gradleoppure il file di compilazione del modulo è per un modulo specifico, quindi verrà utilizzato per configurazioni a livello di modulo specifico. Un file di compilazione del modulo contiene quanto segue:

  • impostazioni Android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig e productFlavors
    • proprietà manifest come applicationId, minSdkVersion, targetSdkVersion e informazioni sui test
  • buildTypes
    • costruire proprietà come debuggable, ProGuard Enable, debug signing, version name suffix and testinformation
  • dipendenze

puoi leggere i documenti ufficiali qui:

Progetti e moduli creano impostazioni

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.