Unterschied zwischen build.gradle (Projekt) und build.gradle (Modul)

98

Ich versuche, meinem Projekt eine Abhängigkeit von Android Asynchronous Http Client hinzuzufügen. Es gibt also zwei build.gradle-Dateien im Projekt.

Geben Sie hier die Bildbeschreibung ein

Nach meinem Verständnis gibt es verschiedene Arten von Abhängigkeiten:

  1. Eine, die auf der Stammebene von build.gradle definiert wurde (Projekt: Meine App)
  2. Eine im Buildscript der build.gradle (Projekt: My-App)
  3. Ein anderes ist build.gradle (Module: App)

In dieser Frage geht es um Repositorys für Abhängigkeiten des BuildScript. Erklären Sie ein wenig die ersten beiden Typen.

Auch build.gradle (Projekt: My-App) sagt

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

Ich denke also, dass der Abhängigkeitscode des asynchronen Android-HTTP-Clients in build.gradle (Modul: App) hinzugefügt werden sollte.

Wenn jemand zum besseren Verständnis ein klares Bild von all diesen geben könnte, wäre es großartig.

Anil Bhaskar
quelle
3
Wenn es sich um eine externe Bibliothek handelt, sollten Sie diese hinzufügen build.gradle(Modules:app)oder dorthin gehen, File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependencieswo Sie ein grünes Kreuz sehen, indem Sie auf diese Module DependencyOption tippen und Ihre Bibliothek automatisch hinzufügen
hrskrs
Beim Hinzufügen zu build.gradle (Modul: App), was mir den Fehler gibt, Failed to find: com.loopj.android:android-async-http:1.4.5 dass es nicht direkt heruntergeladen werden kann, habe ich auch den Proxy festgelegt. Ich habe die JAR-Datei heruntergeladen und manuell versucht, aber als File Repository..ist es der richtige Weg.
Anil Bhaskar
Project StructureZur Vereinfachung gehen Sie zu Modulesund wählen Sie Ihr Projekt. Dort sehen Sie eine green cross sign. Wenn Sie darauf klicken, wird das New ModuleFenster geöffnet . Dort können Sie Ihre Bibliothek importieren. Wenn Sie eine .jarDatei haben, wählen Sie unten import .JAR or .AAR package. Andernfalls kopieren Sie Ihr Glas in den libsOrdner und Module:appfügen Sie auf Ihrem diese die folgenden Abhängigkeiten hinzu:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs
Dies ist eine gute Lektüre developer.android.com/studio/build/index.html
onmyway133

Antworten:

49

build.gradle(Project:My-app)

Build-Datei der obersten Ebene, in der Sie Konfigurationsoptionen hinzufügen können, die allen Unterprojekten / Modulen gemeinsam sind.

Jedes Projekt enthält atop-level gradle file . Es enthält normalerweise common configsfür alle modules. Was auch immer darin enthalten ist top-level gradle, es wird alle betreffen 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)

Build-Datei Ihres spezifischen Moduls (wo Sie Ihre Abhängigkeiten hinzufügen, Konfigurationen signieren, Build-Typen, Varianten usw.)

Alle moduleshaben eine bestimmte gradleDatei . Was auch immer in dieser gradleDatei enthalten ist, es wirkt sich nur auf das aus module, was in enthalten ist.

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'
}
hrskrs
quelle
43

Es ist etwas verwirrend, da Android Studio standardmäßig beide build.gradleDateien direkt nebeneinander anzeigt (bei Verwendung der Android-Ansicht).

Geben Sie hier die Bildbeschreibung ein

Wenn Sie zur Projektansicht wechseln, sehen Sie die tatsächliche Struktur und den build.gradleSpeicherort der verschiedenen Dateien.

Geben Sie hier die Bildbeschreibung ein

Die build.gradleDatei (Projekt: MyApplication) befindet sich im Stammordner des Projekts und ihre Konfigurationseinstellungen gelten für jedes Modul im Projekt. Ein Modul ist ein isoliertes Stück des größeren Projekts. In einem Projekt mit mehreren Modulen haben diese Module ihre eigenen Jobs, arbeiten jedoch zusammen, um das gesamte Projekt zu bilden. Die meisten Android-Projekte haben nur ein Modul, das App-Modul.

Die build.gradleDatei (Modul: App) befindet sich hier im appOrdner. Die Build-Einstellungen gelten nur für das App-Modul. Wenn es ein anderes Modul gäbe, hätte dieses Modul auch eine eigene build.gradleDatei. Als Beispiel habe ich ein Bibliotheksprojekt mit drei Modulen erstellt: einem Bibliotheksmodul, einem Demo-App-Modul und einem weiteren App-Modul, das ich zum Testen verwenden möchte. Jeder von ihnen hat seine eigenen build.gradleDateien, die ich optimieren kann.

Geben Sie hier die Bildbeschreibung ein

In einem Basisprojekt befindet sich fast alles, was Sie bearbeiten müssen, in der build.gradleDatei des App-Moduls . Sie können sich so daran erinnern:

Sie erstellen eine App , gehen Sie also zur Datei build.gradle(Modul: App ).

Weiterführende Literatur

Suragch
quelle
1

Über die Beziehung der beiden gradleDateien machte hrskrs eine sehr klare Erklärung. Ich werde eine Ergänzung dazu machen.

Wenn Ihr Projekt nur ein Modul hat (z. B. eine App ), wird der Vorteil von top build.gradle (Projekt: Meine App) nicht sehr deutlich. weil Sie in build.gradle (Modul: App) alles über das Modul konfigurieren und beim Upgrade in den folgenden Tagen nur eine Datei ändern können。

Wenn Ihr Projekt jedoch 5 Module enthält und diese dieselbe Abhängigkeit A haben , müssen Sie in den folgenden Tagen 5 Dateien verwalten , wenn Sie das oberste build.gradle (Projekt: Meine App) nicht verwenden .

Das build.gradle (Modul: App) kann übrigens das build.gradle (Projekt: My-App) überschreiben .

Dieses Design kann die Wartbarkeit von APP verbessern

shusheng007
quelle