Różnica między build.gradle (projekt) i build.gradle (moduł)

98

Próbuję dodać zależność klienta HTTP asynchronicznego systemu Android do mojego projektu. W projekcie są więc dwa pliki build.gradle.

wprowadź opis obrazu tutaj

Jak rozumiem, istnieją różne rodzaje zależności:

  1. Ten, który zdefiniowano na poziomie głównym build.gradle (Projekt: My-app)
  2. Jeden w skrypcie build.gradle (Projekt: Moja-aplikacja)
  3. Kolejnym jest build.gradle (moduły: aplikacja)

To pytanie dotyczy repozytoriów dla zależności buildScript, wyjaśnij trochę o pierwszych dwóch typach.

Mówi również build.gradle (Project: My-app)

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

Więc myślę, że kod zależności asynchronicznego klienta HTTP dla Androida powinien zostać dodany w build.gradle (moduł: aplikacja).

Byłoby wspaniale, gdyby ktoś mógł przedstawić jasny obraz tego wszystkiego dla lepszego zrozumienia.

Anil Bhaskar
źródło
3
jeśli biblioteka zewnętrzna, tak, powinieneś dodać build.gradle(Modules:app)lub przejść do File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesmiejsca, w którym zobaczysz zielony znak krzyżyka, dotykając tej opcji Module Dependencyi automatycznie dodaj bibliotekę
hrskrs
Dodając do build.gradle (moduł: aplikacja), dając mi błąd, Failed to find: com.loopj.android:android-async-http:1.4.5 że nie można pobrać bezpośrednio, ustawiłem również proxy. Ściągnąłem plik jar i próbowałem ręcznie, ale File Repository.. czy to jest właściwy sposób.
Anil Bhaskar
dla ułatwienia użytkowania Project Structureprzejdź do Modulesi wybierz swój projekt. Tam zobaczysz plik green cross sign. Kliknięcie spowoduje otwarcie New Moduleokna. Tam wybierasz import swojej biblioteki. Jeśli masz .jarplik, wybierz poniżej import .JAR or .AAR package. W przeciwnym razie skopiuj libsplik jar do folderu i Module:appdodaj następujące zależności:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs
To dobra lektura developer.android.com/studio/build/index.html
onmyway133

Odpowiedzi:

49

build.gradle(Project:My-app)

Plik kompilacji najwyższego poziomu, w którym można dodać opcje konfiguracji wspólne dla wszystkich podprojektów / modułów.

Każdy projekt zawiera pliktop-level gradle file . Zwykle zawiera common configsdla wszystkich modules. Cokolwiek jest w tym zawarte top-level gradle, wpłynie na wszystkich modules.

dawny:

// 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)

Zbuduj plik swojego konkretnego modułu (gdzie dodajesz zależności, podpisujesz konfiguracje, typy kompilacji, smaki itp.)

Wszystkie modulesmają określony gradleplik . Cokolwiek jest zawarte w tym gradlepliku, wpłynie to tylko na to, moduleco jest zawarte w.

dawny:

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
źródło
43

To trochę zagmatwane, ponieważ Android Studio domyślnie pokazuje oba build.gradlepliki obok siebie (podczas korzystania z widoku Androida).

wprowadź opis obrazu tutaj

Jeśli przejdziesz do widoku projektu, możesz zobaczyć rzeczywistą strukturę i lokalizację różnych build.gradleplików.

wprowadź opis obrazu tutaj

Plik build.gradle(Project: MyApplication) znajduje się w folderze głównym projektu, a jego ustawienia konfiguracyjne mają zastosowanie do każdego modułu w projekcie. Moduł jest wyodrębnioną częścią większego projektu. W projekcie wielomodułowym moduły te mają swoje własne zadania, ale współpracują, tworząc cały projekt. Większość projektów systemu Android ma tylko jeden moduł, moduł aplikacji.

Plik build.gradle(Module: app) znajduje się w appfolderze. Jego ustawienia kompilacji dotyczą tylko modułu aplikacji. Gdyby istniał inny moduł, wówczas ten moduł również miałby swój własny build.gradleplik. Jako przykład wykonałem projekt biblioteki z trzema modułami: modułem biblioteki, modułem aplikacji demonstracyjnej i innym modułem aplikacji, którego planuję użyć do testowania. Każdy z nich ma własne build.gradlepliki, które mogę modyfikować.

wprowadź opis obrazu tutaj

W podstawowym projekcie prawie wszystko, co musisz edytować, będzie znajdować się w build.gradlepliku modułu aplikacji . Możesz to zapamiętać w ten sposób:

Tworzysz aplikację , więc przejdź do pliku build.gradle(Module: app ).

Dalsza lektura

Suragch
źródło
1

Jeśli chodzi o relację obu gradleplików, hrskrs bardzo jasno wyjaśnił: ,Dodam do tego jakieś uzupełnienie.

jeśli twój projekt ma tylko jeden moduł (np. app ), zalety top build.gradle (Project: My-app) nie są bardzo jasne. ponieważ możesz skonfigurować wszystko w build.gradle (Module: app) o Module i modyfikować tylko jeden plik podczas aktualizacji w kolejnych dniach。

ale jeśli twój projekt ma 5 modułów i zdarzyło się, że mają one tę samą zależność A , jeśli nie używasz top build.gradle (Project: My-app) , musisz utrzymywać 5 plików w kolejnych dniach.

Nawiasem mówiąc, build.gradle (moduł: aplikacja) może nadpisać build.gradle (projekt: moja-aplikacja) .

Ten projekt może poprawić łatwość konserwacji APP

shusheng007
źródło