Build.gradle (Project) ve build.gradle (Modül) arasındaki fark


98

Projeme Android Asynchronous Http Client bağımlılığı eklemeye çalışıyorum. Yani projede iki build.gradle dosyası var.

görüntü açıklamasını buraya girin

Anladığıma göre, farklı türden bağımlılıklar var:

  1. Build.gradle'ın kök düzeyinde tanımlanan bir (Proje: Uygulamam)
  2. Build.gradle'ın buildscript'inin içinde bir tane (Proje: Uygulamam)
  3. Bir diğeri build.gradle'dır (Modüller: app)

Bu soru , buildScript'in bağımlılıkları için depolarla ilgilidir, ilk iki tür hakkında biraz açıklama yapın.

Ayrıca build.gradle (Proje: Uygulamam) diyor

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

Bu yüzden Android Asynchronous Http Client bağımlılık kodunun build.gradle (Modül: app) içine eklenmesi gerektiğini tahmin ediyorum.

Birisi daha iyi anlamak için tüm bunların net bir resmini verebilirse, harika olurdu.


3
Harici kitaplık varsa, evet , buna dokunarak yeşil bir çarpı işareti göreceğiniz yere eklemeli build.gradle(Modules:app)veya oraya gitmelisiniz File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependencies, bu Module Dependency
seçime

Build.gradle'a (Modül: app) ekleyerek, bana Failed to find: com.loopj.android:android-async-http:1.4.5 neden doğrudan indirilemediğine dair bir hata veriyor , ayrıca proxy'yi de ayarladım. Jar dosyasını File Repositoryindirdim ve manuel olarak denedim ama .. doğru yol mu?
Anil Bhaskar

basitlik kullanımı için Project Structuregidin Modulesve projenizi seçin. Orada bir göreceksiniz green cross sign. New ModulePencereyi açacak olana tıklamak . Orada kitaplığınızı içe aktarmayı .jarseçersiniz import .JAR or .AAR package. Dosyanız varsa aşağıdan seçin . Aksi takdirde, libsModule:appdependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
jar'ınızı

Yanıtlar:


48

build.gradle(Project:My-app)

Tüm alt projeler / modüller için ortak olan yapılandırma seçeneklerini ekleyebileceğiniz üst düzey yapı dosyası.

Her proje birtop-level gradle file . Genellikle common configshepsini içerir modules. Buna ne dahil olursa olsun, top-level gradlehepsini etkileyecektir modules.

ör .:

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

Belirli modülünüzün dosyasını oluşturun (bağımlılıklarınızı eklediğiniz, yapılandırmaları imzaladığınız, yapı türleri, tatlar vb.)

Hepsinin modulesbelirli bir gradledosyası var . Bu gradledosyada ne varsa, yalnızca içinde bulunanları etkileyecektir module.

ör .:

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'
}

43

Bu biraz kafa karıştırıcı çünkü Android Studio varsayılan build.gradleolarak her iki dosyayı da yan yana gösteriyor (Android görünümünü kullanırken).

görüntü açıklamasını buraya girin

Proje görünümüne geçerseniz, gerçek yapıyı ve farklı build.gradledosyaların nerede olduğunu görebilirsiniz .

görüntü açıklamasını buraya girin

build.gradle(Proje: MyApplication) dosyası projenin kök klasöründe ve onun yapılandırma ayarları projede her modül için geçerlidir. Bir modül, daha büyük projenin izole edilmiş bir parçasıdır. Çok modüllü bir projede, bu modüllerin kendi işleri vardır, ancak tüm projeyi oluşturmak için birlikte çalışırlar. Çoğu Android projesinin yalnızca bir modülü vardır, uygulama modülü.

Buradaki build.gradle(Module: app) dosyası appklasörün içindedir. Derleme ayarları yalnızca uygulama modülü için geçerlidir. Başka bir modül olsaydı, o modülün de kendi build.gradledosyası olurdu . Bir As Örneğin bir kütüphane modülü bir demo uygulaması modülü ve ben test için kullanmayı planladığınız başka bir uygulama modülü: Ben üç modülleri ile kütüphane projesini yaptı. Her birinin build.gradledüzeltebileceğim kendi dosyaları var.

görüntü açıklamasını buraya girin

Temel bir projede, düzenlemeniz gereken hemen hemen her şey uygulama modülünün build.gradledosyasında olacaktır. Bunu şu şekilde hatırlayabilirsiniz:

Bir uygulama yapıyorsunuz , bu yüzden build.gradle(Modül: uygulama ) dosyasına gidin.

daha fazla okuma


1

İki gradledosyanın ilişkisi hakkında hrskrs çok net bir açıklama yaptı , Bununla ilgili bazı ekler yapacağım.

projenizde yalnızca bir Modül ( uygulama gibi ) varsa, top build.gradle'ın (Proje: Uygulamam) avantajı çok açık görünmez . Modül hakkında build.gradle (Module: app) içindeki her şeyi yapılandırabileceğiniz için ve sonraki günlerde yükseltme yaparken yalnızca bir dosyayı değiştirebilirsiniz。

ancak projenizde 5 Modül varsa ve bunlar aynı bağımlılığa sahipse A , üst build.gradle'ı (Proje: Uygulamam) kullanmıyorsanız , sonraki günlerde 5 dosya tutmanız gerekir.

bu arada, build.gradle (Modül: uygulama) build.gradle'ın (Proje: Uygulamam) üzerine yazabilir .

Bu tasarım, APP'nin bakımını artırabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.