Differenza tra build.gradle (Project) e build.gradle (Module)


98

Sto cercando di aggiungere una dipendenza di Android Asynchronous Http Client nel mio progetto. Quindi ci sono due file build.gradle nel progetto.

inserisci qui la descrizione dell'immagine

Secondo la mia comprensione, ci sono diversi tipi di dipendenze:

  1. Uno che è stato definito a livello di root di build.gradle (Project: My-app)
  2. Uno all'interno del buildscript di build.gradle (Project: My-app)
  3. Un altro è build.gradle (Modules: app)

Questa domanda riguarda i repository per le dipendenze del buildScript, spiega un po 'i primi due tipi.

Dice anche build.gradle (Project: My-app)

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

Quindi immagino che il codice di dipendenza del client Http asincrono Android dovrebbe essere aggiunto in build.gradle (Modulo: app).

Se qualcuno potesse dare un'immagine chiara di tutti questi per una migliore comprensione, sarebbe fantastico.


3
se una libreria esterna, sì, dovresti aggiungere build.gradle(Modules:app)o andare File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesdove vedrai un segno di croce verde, toccando che scegli Module Dependencye aggiungi la tua libreria automaticamente
hrskrs

Aggiungendo a build.gradle (Modulo: app), dandomi un errore che Failed to find: com.loopj.android:android-async-http:1.4.5 perché non è in grado di scaricare direttamente, ho anche impostato il proxy. Ho scaricato il file jar e ho provato manualmente ma siccome File Repository..è il modo corretto.
Anil Bhaskar

per semplicità Project Structurevai su Modulese scegli il tuo progetto. Lì vedrai un file green cross sign. Cliccando si aprirà la New Modulefinestra. Lì scegli di importare la tua libreria, se hai un .jarfile scegli sotto import .JAR or .AAR package. Altrimenti copia il tuo jar nella libscartella e Module:appaggiungi queste dipendenze:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs

Risposte:


49

build.gradle(Project:My-app)

File di build di primo livello in cui è possibile aggiungere opzioni di configurazione comuni a tutti i sottoprogetti / moduli.

Ogni progetto contiene un filetop-level gradle file . Di solito contiene common configsper tutti modules. Qualunque cosa sia inclusa in questo top-level gradle, influenzerà tutto modules.

ex:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha3'

        //Maven plugin
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(Module:app)

File di build del tuo modulo specifico (dove aggiungi le tue dipendenze, firme configurazioni, tipi di build, sapori, ecc.)

Tutti moduleshanno un gradlefile specifico . Qualunque cosa sia inclusa in questo gradlefile, avrà effetto solo su modulequella inclusa.

ex:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.hrskrs.gesturefun"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':gesture-fun')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.jakewharton:butterknife:7.0.1'
}

43

È un po 'confuso perché Android Studio per impostazione predefinita mostra entrambi i build.gradlefile uno accanto all'altro (quando si utilizza la visualizzazione Android).

inserisci qui la descrizione dell'immagine

Se passi alla vista Progetto puoi vedere la struttura effettiva e dove si trovano i diversi build.gradlefile.

inserisci qui la descrizione dell'immagine

Il file build.gradle(Project: MyApplication) si trova nella cartella principale del progetto e le sue impostazioni di configurazione si applicano a ogni modulo del progetto. Un modulo è un pezzo isolato del progetto più grande. In un progetto multi-modulo, questi moduli hanno i propri compiti ma lavorano insieme per formare l'intero progetto. La maggior parte dei progetti Android ha un solo modulo, il modulo app.

Il file build.gradle(Module: app) qui è nella appcartella. Le sue impostazioni di build si applicano solo al modulo dell'app. Se ci fosse un altro modulo, anche quel modulo avrebbe il proprio build.gradlefile. Ad esempio , ho realizzato un progetto di libreria con tre moduli: un modulo di libreria, un modulo di app demo e un altro modulo di app che intendo utilizzare per i test. Ognuno di loro ha i propri build.gradlefile che posso modificare.

inserisci qui la descrizione dell'immagine

In un progetto di base, quasi tutto ciò che devi modificare si trova nel build.gradlefile del modulo dell'app . Puoi ricordarlo così:

Stai creando un'app , quindi vai al file build.gradle(Modulo: app ).

Ulteriore lettura


1

Riguardo alla relazione tra i due gradlefile, hrskrs ha fornito una spiegazione molto chiara , Farò qualche supplemento al riguardo.

se il tuo progetto ha un solo modulo (come app ), il vantaggio di top build.gradle (Project: My-app) non è molto chiaro. perché puoi configurare tutto in build.gradle (Modulo: app) sul modulo e modificare solo un file durante l'aggiornamento nei giorni successivi。

ma se il tuo progetto ha 5 moduli, ed è successo che hanno la stessa dipendenza A , se non usi il build.gradle in alto (Project: My-app) devi mantenere 5 file nei giorni successivi.

a proposito, build.gradle (Module: app) può sovrascrivere build.gradle (Project: My-app) .

Questo design può migliorare la manutenibilità di APP

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.