Perbedaan antara build.gradle (Project) dan build.gradle (Module)

98

Saya mencoba menambahkan ketergantungan Android Asynchronous Http Client ke dalam proyek saya. Jadi ada dua file build.gradle yang ada di proyek ini.

masukkan deskripsi gambar di sini

Sesuai pemahaman saya, ada berbagai jenis dependensi:

  1. Satu yang ditentukan di tingkat akar build.gradle (Proyek: Aplikasi-saya)
  2. Satu di dalam buildscript dari build.gradle (Project: My-app)
  3. Lainnya adalah build.gradle (Modules: app)

Pertanyaan ini tentang repositori untuk dependensi buildScript, jelaskan sedikit tentang dua jenis pertama.

Juga build.gradle (Project: My-app) mengatakan

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

Jadi saya kira kode ketergantungan Android Asynchronous Http Client harus ditambahkan di build.gradle (Module: app).

Jika seseorang dapat memberikan gambaran yang jelas tentang semua ini untuk pemahaman yang lebih baik, itu akan sangat bagus.

Anil Bhaskar
sumber
3
jika perpustakaan eksternal, ya Anda harus menambahkan build.gradle(Modules:app)atau pergi ke File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciestempat Anda akan melihat tanda silang hijau, dengan mengetuk pilih itu Module Dependencydan tambahkan perpustakaan Anda secara otomatis
jam
Menambahkan ke build.gradle (Module: app), memberi saya kesalahan Failed to find: com.loopj.android:android-async-http:1.4.5 mengapa tidak dapat mengunduh secara langsung, saya juga telah mengatur proxy. Saya mengunduh file jar, dan mencoba secara manual tetapi sebagai File Repository.. apakah itu cara yang benar.
Anil Bhaskar
untuk kesederhanaan, Project Structurebuka Modulesdan pilih proyek Anda. Di sana Anda akan melihat green cross sign. Mengklik itu akan membuka New Modulejendela. Di sana Anda memilih untuk mengimpor perpustakaan Anda. Jika Anda memiliki .jarfile maka pilih di bawah import .JAR or .AAR package. Jika tidak, salin jar Anda ke libsfolder dan Module:apptambahkan dependensi berikut:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs
Ini adalah pengembang
baik.android.com/studio/build/index.html

Jawaban:

49

build.gradle(Project:My-app)

File build level atas tempat Anda dapat menambahkan opsi konfigurasi yang umum untuk semua subproyek / modul.

Setiap proyek berisitop-level gradle file . Ini biasanya berisi common configsuntuk semua modules. Apapun yang termasuk di top-level gradledalamnya, itu akan mempengaruhi semua 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 file modul spesifik Anda (tempat Anda menambahkan dependensi, konfigurasi penandatanganan, jenis build, ragam, dll.)

Semua modulesmemiliki gradlefile tertentu . Apa pun yang disertakan dalam gradlefile ini , itu hanya akan mempengaruhi moduleyang disertakan di.

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
sumber
43

Agak membingungkan karena Android Studio secara default menampilkan kedua build.gradlefile tepat di samping satu sama lain (saat menggunakan tampilan Android).

masukkan deskripsi gambar di sini

Jika Anda beralih ke tampilan Proyek, Anda dapat melihat struktur sebenarnya dan lokasi build.gradlefile yang berbeda .

masukkan deskripsi gambar di sini

File build.gradle(Project: MyApplication) ada di folder root project dan pengaturan konfigurasinya berlaku untuk setiap modul dalam project. Modul adalah bagian terisolasi dari proyek yang lebih besar. Dalam proyek multi-modul, modul-modul ini memiliki tugasnya masing-masing tetapi bekerja sama untuk membentuk keseluruhan proyek. Sebagian besar proyek Android hanya memiliki satu modul, modul aplikasi.

File build.gradle(Module: app) di sini ada di appfolder. Pengaturan build-nya hanya berlaku untuk modul aplikasi. Jika ada modul lain, maka modul itu juga punya build.gradlefile sendiri . Sebagai contoh , saya membuat proyek perpustakaan dengan tiga modul: modul perpustakaan, modul aplikasi demo, dan modul aplikasi lain yang akan saya gunakan untuk pengujian. Masing-masing memiliki build.gradlefile sendiri yang dapat saya atur.

masukkan deskripsi gambar di sini

Dalam proyek dasar, hampir semua yang perlu Anda edit akan ada di build.gradlefile modul aplikasi . Anda bisa mengingatnya seperti ini:

Anda sedang membuat aplikasi , jadi buka file build.gradle(Module: app ).

Bacaan lebih lanjut

Suragch
sumber
1

Tentang hubungan kedua gradlefile, hrskrs membuat penjelasan yang sangat jelas, saya akan membuat tambahan tentang itu.

jika proyek Anda hanya memiliki satu Modul (seperti aplikasi ), keuntungan dari build.gradle teratas (Project: My-app) tidak ditampilkan dengan sangat jelas. karena Anda dapat mengonfigurasi semuanya di build.gradle (Module: app) tentang Modul, dan hanya mengubah satu file saat meningkatkan versi di hari-hari berikutnya。

tetapi jika proyek Anda memiliki 5 Modul, dan kebetulan mereka memiliki ketergantungan yang sama A , jika Anda tidak menggunakan build.gradle teratas (Project: My-app) Anda perlu memelihara 5 file di hari-hari berikutnya.

omong-omong, build.gradle (Module: app) bisa menimpa build.gradle (Project: My-app) .

Desain ini dapat meningkatkan pemeliharaan APP

shusheng007
sumber