एंड्रॉइड स्टूडियो: क्यों minSdkVersion और targetSdkVersion दोनों AndroidManifest.xml और build.gradle में निर्दिष्ट हैं?


103

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

उदाहरण के लिए, मेरी निम्न पंक्तियाँ थीं build.gradle:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }
...
}

जो संबंधित टैग को ओवरराइड कर रहा था AndroidManifest.xml:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>

मैं वास्तव में एक ही सेटिंग को दो अलग-अलग फ़ाइलों में फैलाना पसंद नहीं करता, इसलिए मैं सोच रहा हूं कि क्या मैं इसे सुरक्षित रूप से build.gradleया तो हटा सकता हूं या AndroidManifest.xmlजहां इसे रखने के लिए अधिक समझ है।

जवाबों:


111

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

आप प्रकट रूप को छोड़ सकते हैं और इसमें सभी कॉन्फ़िगरेशन कर सकते हैं build.gradle। आप सुरक्षित रूप से निकाल सकते हैं

<uses-sdk></uses-sdk>

मैनिफ़ेस्ट के साथ-साथ वर्जन कोड भी।


3
किसी को भी आश्चर्य हो, अगर आप एपीकेटी का उपयोग इस तरह से निर्मित एपीके को अनपैक करने के लिए करते हैं, तो आप वास्तव में एंड्रॉइड मैनफेस्ट में मिनस्डकवर्सन नहीं देखेंगे। मुझे नहीं पता कि यह कहाँ जाता है, लेकिन यह सही काम करता है (मैंने Google Play पर अपलोड करके पुष्टि की)!
दान जे

6
अजीब। ऐसा लगता है कि Google हमारे एप्लिकेशन को किस एपीआई से मिनीएसडीके का फैसला करता है। Eventhough my app / build.gradle Google में minSDK निर्दिष्ट करता है 2.2, Google Play में यह कहता है कि minSDK = Android 1.6। और हां, विघटित AndroidManifest.xml में कोई minSDK जानकारी नहीं है। मुझे लगता है कि यह एक समस्या है, क्योंकि यह हमें एंड्रॉइड 1.6 उपकरणों का समर्थन करने के लिए मजबूर करता है।
sancho21

1
यहाँ साइडबार: developer.android.com/guide/topics/manifest/… पता चलता है कि प्ले अभी भी किसी तरह प्रकट का उपयोग करता है। हो सकता है कि एपीके बिल्ड से पहले ग्रेडल द्वारा पर्दे के पीछे इसे फिर से स्थापित किया गया हो?
jordanpg

4
यह वैसे काम करता है। संकलन के दौरान प्रकट होने के लिए ग्रेडेल गुम सूचना डालेगा।
mar3kk

5
@ sancho21 यह अल्फा और बीटा परीक्षण के दौरान Google Play स्टोर के साथ एक ज्ञात बग है। जब आप उत्पादों को धक्का देते हैं तो इसे हल करना चाहिए। एक आधिकारिक स्रोत नहीं है, लेकिन उत्तर
।unity3d.com/questions/683972/…

0

Android डॉक्स से:

नोट: यदि आपका ऐप सीधे तत्व में एप्लिकेशन संस्करण को परिभाषित करता है, तो ग्रैड बिल्ड फ़ाइल में संस्करण मान प्रकट में सेटिंग्स को ओवरराइड करेगा। इसके अतिरिक्त, ग्रेड सेटिंग फ़ाइलों में इन सेटिंग्स को परिभाषित करने से आप अपने ऐप के विभिन्न संस्करणों के लिए अलग-अलग मान निर्दिष्ट कर सकते हैं। अधिक लचीलेपन के लिए और जब प्रकट होने पर संभावित ओवरराइटिंग से बचने के लिए, आपको इन विशेषताओं को तत्व से हटा देना चाहिए और ग्रैड बिल्ड फ़ाइलों में इसकी संस्करण सेटिंग्स को परिभाषित करना चाहिए।

https://developer.android.com/studio/publish/versioning.html#appversioning


मुझे लगता है कि उस भाग की बात हो रही थी versionCode । आपको अगले एक Specify API level requirementsभाग को उद्धृत करना चाहिए था
लॉन्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.