Mengapa ada dua file build.gradle dalam proyek Android Studio?


102

Setelah mengimpor proyek Eclipse ke Android Studio, saya melihat dua build.gradlefile:

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

Versi pertama lebih pendek, versi kedua berisi definisi untuk compileSdkVersion, dll.

Apa tujuan dibalik memiliki dua file terpisah? Apakah ada tugas build terpisah?


Jawaban:


72

<PROJECT_ROOT>\app\build.gradlekhusus untuk modul aplikasi .

<PROJECT_ROOT>\build.gradleadalah "file build tingkat atas" tempat Anda dapat menambahkan opsi konfigurasi yang umum untuk semua subproyek / modul.

Jika Anda menggunakan modul lain dalam proyek Anda, sebagai perpustakaan lokal Anda akan memiliki build.gradlefile lain : <PROJECT_ROOT>\module\build.gradle

Untuk contoh dalam file tingkat atas Anda, Anda dapat menentukan sifat-sifat umum:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

Dalam Anda app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

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

+1 Terima kasih, akan menerima jawaban Anda sebentar lagi. Apakah keberadaan build.gradlefile wajib untuk memicu build? Selain itu, apakah file build tingkat atas memanggil file sub-level? (Meskipun tidak ada bukti tentang itu.)
Sabuncu

File build.gradle adalah wajib jika Anda ingin membangun proyek dengan gradle. Android Studio tidak memerlukan gradle, tetapi sangat disarankan. File tingkat atas tidak memanggil sub file; gradle bekerja dengan tugas, tetapi sulit untuk dijelaskan dalam komentar.
Gabriele Mariotti

Terima kasih banyak Gabriele, ini akan membantu saya memulai.
Sabuncu

1
Terutama rootProject.ext.compileSdkVersionkonstruksinya sangat informatif.
Sabuncu

2
Apakah penting untuk mengambil jalan memutar menggunakan ext {...} atau haruskah kita langsung menerapkan plugin android dan compileSdkVersion ke file build level atas?
PhilLab

17

Dari dokumentasi resmi:

Proyek Android Studio berisi file build Gradle proyek tingkat atas yang memungkinkan Anda menambahkan opsi konfigurasi yang umum ke semua modul aplikasi dalam proyek tersebut. Setiap modul aplikasi juga memiliki build.gradlefilenya sendiri untuk pengaturan build khusus untuk modul itu.

masukkan deskripsi gambar di sini

File Bangun Proyek

<PROJECT_ROOT>\build.gradleatau Project Build File untuk keseluruhan proyek sehingga akan digunakan untuk konfigurasi proyek global. File Build Proyek tipikal berisi berikut ini:

  • buildscript yang mendefinisikan:
    • repositori dan
    • ketergantungan
  • Versi Plugin Gradle

Secara default, file Gradle level proyek menggunakan buildscript untuk menentukan repositori dan dependensi Gradle . Ini memungkinkan proyek yang berbeda untuk menggunakan versi Gradle yang berbeda. Repositori yang didukung termasuk JCenter, Maven Central, atau Ivy. Contoh ini mendeklarasikan bahwa skrip build menggunakan repositori JCenter dan artefak dependensi classpath yang berisi plugin Android untuk Gradle versi 1.0.1.


File Pembuatan Modul

<PROJECT_ROOT>\app\build.gradleatau Module Build File untuk modul tertentu sehingga akan digunakan untuk konfigurasi level modul tertentu. Sebuah Modul Membangun Berkas berisi berikut:

  • pengaturan android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig dan productFlavours
    • properti manifes seperti applicationId, minSdkVersion, targetSdkVersion, dan informasi pengujian
  • buildTypes
    • membangun properti seperti debuggable, pengaktifan ProGuard, penandatanganan debug, akhiran nama versi, dan informasi pengujian
  • ketergantungan

Anda dapat membaca dokumen resminya di sini:

Proyek dan modul membangun pengaturan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.