एंड्रॉइड स्टूडियो प्रोजेक्ट में दो build.gradle फाइलें क्यों हैं?


102

एंड्रॉइड स्टूडियो में एक ग्रहण परियोजना को आयात करने के बाद, मुझे दो build.gradleफाइलें दिखाई देती हैं :

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

पहला संस्करण छोटा है, दूसरे संस्करण में परिभाषाएँ शामिल हैं compileSdkVersion, आदि।

दो अलग-अलग फाइलें रखने के पीछे क्या उद्देश्य है? क्या अलग-अलग निर्माण कार्य हैं?


जवाबों:


72

<PROJECT_ROOT>\app\build.gradleएप्लिकेशन मॉड्यूल के लिए विशिष्ट है ।

<PROJECT_ROOT>\build.gradleएक "टॉप-लेवल बिल्ड फ़ाइल" है जहाँ आप सभी उप-परियोजनाओं / मॉड्यूल के लिए कॉन्फ़िगरेशन विकल्पों को आम जोड़ सकते हैं।

यदि आप अपनी परियोजना में एक अन्य मॉड्यूल का उपयोग करते हैं, तो स्थानीय पुस्तकालय के रूप में आपके पास एक और build.gradleफ़ाइल होगी: <PROJECT_ROOT>\module\build.gradle

अपने शीर्ष स्तरीय फ़ाइल में उदाहरण के लिए आप इन सामान्य गुणों को निर्दिष्ट कर सकते हैं:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

अपने में app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

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

+1 आपका धन्यवाद, आपके उत्तर को पल-पल स्वीकार करेगा। क्या build.gradleबिल्ड को ट्रिगर करने के लिए फ़ाइल की उपस्थिति अनिवार्य है? इसके अलावा, क्या शीर्ष स्तर की बिल्ड फ़ाइल कॉल उप-स्तरीय फ़ाइलें है? (हालांकि इसका कोई प्रमाण नहीं है।)
सबुनकु

यदि आप एक प्रोजेक्ट बनाना चाहते हैं, तो बिल्ड.ग्रेडल फ़ाइलें अनिवार्य हैं। एंड्रॉइड स्टूडियो को वर्गीकृत करने की आवश्यकता नहीं है, लेकिन यह अत्यधिक अनुशंसित है। शीर्ष स्तर की फ़ाइल उप फ़ाइलों को नहीं बुलाती है; gradle कार्यों के साथ काम करता है, लेकिन एक टिप्पणी में समझाना मुश्किल है।
गैब्रिएल मैरीओटी

बहुत बहुत धन्यवाद गेब्रियल, यह मुझे आरंभ कर देगा।
सबुनकु

1
विशेष रूप से rootProject.ext.compileSdkVersionनिर्माण बहुत जानकारीपूर्ण है।
सबुनकु

2
क्या एक्सटॉर {{}} का उपयोग करके डिटॉल लेना महत्वपूर्ण है या क्या हमें सीधे एंड्रॉइड प्लगइन और कम्पाइलसडक वर्सन को शीर्ष स्तर की बिल्ड फ़ाइल पर लागू करना चाहिए?
फिललैब

17

आधिकारिक दस्तावेज से:

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

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

प्रोजेक्ट बिल्ड फ़ाइल

<PROJECT_ROOT>\build.gradleया प्रोजेक्ट बिल्ड फ़ाइल संपूर्ण प्रोजेक्ट के लिए है, इसलिए इसका उपयोग वैश्विक प्रोजेक्ट कॉन्फ़िगरेशन के लिए किया जाएगा। एक विशिष्ट प्रोजेक्ट बिल्ड फ़ाइल में निम्न शामिल हैं:

  • बिल्डक्राफ्ट जो परिभाषित करता है:
    • रिपोजिटरी और
    • निर्भरता
  • ग्रेडल प्लगिन संस्करण

डिफ़ॉल्ट रूप से, प्रोजेक्ट-स्तरीय ग्रेडल फ़ाइल ग्रेडल रिपॉजिटरी और निर्भरता को परिभाषित करने के लिए बिल्डस्क्रिप्ट का उपयोग करती है । यह विभिन्न परियोजनाओं को अलग-अलग ग्रेड संस्करण का उपयोग करने की अनुमति देता है। समर्थित रिपॉजिटरी में JCenter, Maven Central या Ivy शामिल हैं। यह उदाहरण घोषित करता है कि बिल्ड स्क्रिप्ट JCenter रिपॉजिटरी और क्लासपैथ निर्भरता विरूपण साक्ष्य का उपयोग करती है जिसमें ग्रैडल संस्करण 1.0.1 के लिए एंड्रॉइड प्लगइन शामिल है।


मॉड्यूल बिल्ड फ़ाइल

<PROJECT_ROOT>\app\build.gradleया मॉड्यूल बिल्ड फ़ाइल एक विशिष्ट मॉड्यूल के लिए है, इसलिए इसका उपयोग विशिष्ट मॉड्यूल स्तर कॉन्फ़िगरेशन के लिए किया जाएगा। एक मॉड्यूल बिल्ड फ़ाइल निम्नलिखित शामिल हैं:

  • Android सेटिंग्स
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig और productFlavors
    • प्रकट गुण जैसे कि applicationId, minSdkVersion, targetSdkVersion और परीक्षण जानकारी
  • buildTypes
    • डीबग करने योग्य, ProGuard सक्षम करने, डीबग हस्ताक्षर करना, संस्करण का नाम प्रत्यय और Testinformation जैसे गुण बनाएँ
  • निर्भरता

आप यहां आधिकारिक डॉक्स पढ़ सकते हैं:

प्रोजेक्ट और मॉड्यूल सेटिंग बनाते हैं

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