Dlaczego w projekcie Android Studio są dwa pliki build.gradle?


102

Po zaimportowaniu projektu Eclipse do Android Studio widzę dwa build.gradlepliki:

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

Pierwsza wersja jest krótsza, druga zawiera definicje compileSdkVersionitp.

Jaki jest cel posiadania dwóch oddzielnych plików? Czy istnieją oddzielne zadania kompilacji?


Odpowiedzi:


72

<PROJECT_ROOT>\app\build.gradlejest specyficzny dla modułu aplikacji .

<PROJECT_ROOT>\build.gradleto „plik kompilacji najwyższego poziomu”, w którym można dodać opcje konfiguracji wspólne dla wszystkich podprojektów / modułów.

Jeśli używasz innego modułu w swoim projekcie, jako lokalna biblioteka miałbyś inny build.gradleplik: <PROJECT_ROOT>\module\build.gradle

Na przykład w pliku najwyższego poziomu możesz określić następujące wspólne właściwości:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

W Twoim app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

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

+1 Dziękuję, za chwilę przyjmie twoją odpowiedź. Czy build.gradleobecność pliku jest obowiązkowa, aby wyzwolić kompilację? Czy plik kompilacji najwyższego poziomu wywołuje pliki niższego poziomu? (Chociaż nie ma na to dowodów.)
— Sabuncu,

Pliki build.gradle są obowiązkowe, jeśli chcesz zbudować projekt za pomocą gradle. Android Studio nie wymaga gradle, ale jest wysoce zalecane. Plik najwyższego poziomu nie wywołuje plików podrzędnych; gradle pracuje z zadaniami, ale trudno to wyjaśnić w komentarzu.
— Gabriele Mariotti

Wielkie dzięki Gabriele, to pozwoli mi zacząć.
— Sabuncu,

1
Szczególnie rootProject.ext.compileSdkVersionkonstrukcja jest bardzo pouczająca.
— Sabuncu,

2
Czy ważne jest, aby skorzystać z objazdu za pomocą ext {...}, czy też powinniśmy bezpośrednio zastosować wtyczkę Androida i compileSdkVersion do pliku kompilacji najwyższego poziomu?
— PhilLab

17

Z oficjalnej dokumentacji:

Projekty Android Studio zawierają plik kompilacji Gradle projektu najwyższego poziomu, który umożliwia dodawanie opcji konfiguracji wspólnych dla wszystkich modułów aplikacji w projekcie. Każdy moduł aplikacji ma również swój własny build.gradleplik ustawień kompilacji specyficznych dla tego modułu.

wprowadź opis obrazu tutaj

Plik kompilacji projektu

<PROJECT_ROOT>\build.gradlelub plik kompilacji projektu jest przeznaczony dla całego projektu, więc będzie używany do globalnych konfiguracji projektu. Typowy plik kompilacji projektu zawiera następujące elementy:

  • buildscript, który definiuje:
    • repozytoria i
    • zależności
  • Wersja wtyczki Gradle

Domyślnie plik Gradle na poziomie projektu używa skryptu buildscript do definiowania repozytoriów i zależności Gradle . Umożliwia to różnym projektom używanie różnych wersji Gradle. Obsługiwane repozytoria to JCenter, Maven Central lub Ivy. W tym przykładzie zadeklarowano, że skrypt kompilacji używa repozytorium JCenter i artefaktu zależności ścieżki klas, który zawiera wtyczkę systemu Android dla programu Gradle w wersji 1.0.1.


Plik kompilacji modułu

<PROJECT_ROOT>\app\build.gradlelub plik kompilacji modułu jest przeznaczony dla określonego modułu, więc będzie używany do określonych konfiguracji na poziomie modułu. Moduł kompilacji zawiera następujące elementy:

  • ustawienia Androida
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig i productFlavors
    • właściwości manifestu, takie jak applicationId, minSdkVersion, targetSdkVersion i informacje testowe
  • buildTypes
    • właściwości kompilacji, takie jak debugowalny, włączanie ProGuard, podpisywanie debugowania, sufiks nazwy wersji i informacje o testach
  • zależności

możesz przeczytać oficjalne dokumenty tutaj:

Ustawienia kompilacji projektów i modułów

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.