Build.gradle (प्रोजेक्ट) और build.gradle (मॉड्यूल) के बीच अंतर


98

मैं अपने प्रोजेक्ट में Android एसिंक्रोनस Http क्लाइंट की निर्भरता जोड़ने की कोशिश कर रहा हूं। तो वहाँ दो build.gradle फ़ाइलें परियोजना में हैं।

यहां छवि विवरण दर्ज करें

मेरी समझ के अनुसार, विभिन्न प्रकार की निर्भरताएं हैं:

  1. जो बिल्ड.ग्रेडल के मूल स्तर पर परिभाषित किया गया है (प्रोजेक्ट: माय-ऐप)
  2. बिल्ड.ग्रेड की बिल्डस्क्रिप्ट के अंदर एक (प्रोजेक्ट: माय-ऐप)
  3. एक और बिल्ड है ।ग्रेड (मॉड्यूल: ऐप)

यह प्रश्न बिल्डस्क्रिप्ट की निर्भरता के लिए रिपॉजिटरी के बारे में है, पहले दो प्रकारों के बारे में थोड़ा स्पष्ट करें।

इसके अलावा build.gradle (प्रोजेक्ट: माय-ऐप) कहते हैं

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

इसलिए मुझे लगता है कि build.gradle (मॉड्यूल: ऐप) में एंड्रॉइड एसिंक्रोनस एचटीपी क्लाइंट के निर्भरता कोड को जोड़ा जाना चाहिए।

अगर कोई बेहतर समझ के लिए इन सभी की स्पष्ट तस्वीर दे सके, तो यह बहुत अच्छा होगा।


3
यदि बाहरी पुस्तकालय, हां आपको जोड़ना चाहिए build.gradle(Modules:app)या उस स्थान पर जाना चाहिए File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesजहां आप एक हरे रंग की क्रॉस साइन देखेंगे, जो कि आपके द्वारा चुने गए Module Dependencyऔर स्वचालित रूप से yout पुस्तकालय को
जोड़कर

Build.gradle (मॉड्यूल: ऐप) को जोड़ते हुए, मुझे एक त्रुटि दी कि Failed to find: com.loopj.android:android-async-http:1.4.5 यह सीधे डाउनलोड करने में सक्षम क्यों नहीं है, मैंने प्रॉक्सी भी सेट किया है। मैंने जार फ़ाइल डाउनलोड की, और मैन्युअल रूप से कोशिश की लेकिन File Repositoryयह सही तरीका है।
अनिल भास्कर

सादगी का उपयोग Project Structureकरने के लिए जाओ Modulesऔर अपनी परियोजना का चयन करें। वहां आपको a दिखाई देगा green cross sign। उस पर क्लिक करने से New Moduleविंडो खुल जाएगी । वहां आप अपनी लाइब्रेरी आयात करना .jarचुनते हैं import .JAR or .AAR package। यदि आपके पास फ़ाइल है तो नीचे चुनें । अन्यथा अपने जार को libsफ़ोल्डर में कॉपी करें और अपने Module:appइन निर्भरताओं को जोड़ें:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs

यह एक अच्छा पढ़ने वाला डेवलपर है
।android.com

जवाबों:


49

build.gradle(Project:My-app)

शीर्ष-स्तरीय बिल्ड फ़ाइल जहां आप सभी उप-परियोजनाओं / मॉड्यूल के लिए कॉन्फ़िगरेशन विकल्प सामान्य जोड़ सकते हैं।

प्रत्येक प्रोजेक्ट में एtop-level gradle file । यह हमारे common configsलिए सभी को समाहित करता है modules। इसमें जो कुछ भी शामिल है top-level gradle, वह सभी को प्रभावित करेगा modules

उदाहरण के लिए:

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

अपने विशिष्ट मॉड्यूल की फ़ाइल बनाएँ (जहाँ आप अपनी निर्भरताएँ जोड़ते हैं, कॉन्फ़िगरों पर हस्ताक्षर करते हैं, बिल्ड प्रकारों, स्वादों आदि का निर्माण करते हैं)

सभी के modulesपास एक विशिष्ट gradleफाइल है । इस gradleफ़ाइल में जो कुछ भी शामिल है , वह केवल उसी को प्रभावित करेगा जो moduleइसमें शामिल है।

उदाहरण के लिए:

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

यह थोड़ा भ्रामक है क्योंकि डिफ़ॉल्ट रूप से एंड्रॉइड स्टूडियो दोनों build.gradleफाइलों को एक-दूसरे के ठीक बगल में दिखाता है (एंड्रॉइड व्यू का उपयोग करते समय)।

यहां छवि विवरण दर्ज करें

यदि आप प्रोजेक्ट दृश्य पर स्विच करते हैं, तो आप वास्तविक संरचना देख सकते हैं और जहां विभिन्न build.gradleफाइलें स्थित हैं।

यहां छवि विवरण दर्ज करें

build.gradle(परियोजना: MyApplication) फ़ाइल परियोजना के रूट फ़ोल्डर में है और इसके विन्यास सेटिंग्स परियोजना में हर मॉड्यूल के लिए लागू होते हैं। एक मॉड्यूल बड़ी परियोजना का एक अलग टुकड़ा है। एक मल्टी-मॉड्यूल प्रोजेक्ट में, इन मॉड्यूल के अपने काम होते हैं लेकिन पूरे प्रोजेक्ट को बनाने के लिए एक साथ काम करते हैं। अधिकांश एंड्रॉइड प्रोजेक्ट में केवल एक मॉड्यूल होता है, ऐप मॉड्यूल।

build.gradle (मॉड्यूल: ऐप) फ़ाइल appफ़ोल्डर में है। इसकी बिल्ड सेटिंग्स केवल ऐप मॉड्यूल पर लागू होती हैं। यदि कोई अन्य मॉड्यूल था, तो उस मॉड्यूल की अपनी build.gradleफ़ाइल भी होगी। एक उदाहरण के रूप में , मैंने तीन मॉड्यूल के साथ एक पुस्तकालय परियोजना बनाई: एक पुस्तकालय मॉड्यूल, एक डेमो ऐप मॉड्यूल, और एक अन्य ऐप मॉड्यूल जिसे मैं परीक्षण के लिए उपयोग करने की योजना बना रहा हूं। उनमें से प्रत्येक की अपनी build.gradleफाइलें हैं जिन्हें मैं ट्विक कर सकता हूं।

यहां छवि विवरण दर्ज करें

एक बुनियादी परियोजना में, आपको जो कुछ भी संपादित करने की आवश्यकता है वह ऐप मॉड्यूल की build.gradleफ़ाइल में होगी। आप इसे इस तरह याद रख सकते हैं:

आप एक बना रहे हैं ऐप , इसलिए build.gradle(मॉड्यूल: ऐप ) फ़ाइल पर जाएं।

आगे की पढाई


1

दो gradleफाइलों के संबंध में , hrskrs ने एक बहुत स्पष्ट स्पष्टीकरण दिया मैं इसके बारे में कुछ पूरक ।

यदि आपके प्रोजेक्ट में केवल एक मॉड्यूल (जैसे ऐप ) है, तो शीर्ष बिल्ड.ग्रेडल (प्रोजेक्ट: माय-ऐप) का लाभ अधिक स्पष्ट नहीं है। क्योंकि आप build.gradle (मॉड्यूल: एप्लिकेशन) में सब कुछ कॉन्फ़िगर कर सकते हैं बारे में , और केवल एक फाइल को संशोधित कर सकते हैं जब अगले दिनों में अपग्रेड हो सकता है in

लेकिन अगर आपके प्रोजेक्ट में 5 मॉड्यूल हैं, और ऐसा हुआ कि उनके पास एक ही निर्भरता A है , यदि आप शीर्ष build.gradle (प्रोजेक्ट: My-app) का उपयोग नहीं करते हैं, तो आपको निम्नलिखित दिनों में 5 फ़ाइलों को बनाए रखने की आवश्यकता है।

वैसे, build.gradle (मॉड्यूल: ऐप) build.gradle (प्रोजेक्ट: माय-ऐप) को अधिलेखित कर सकता है ।

यह डिजाइन एपीपी की स्थिरता को बेहतर बना सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.