5

build.gradle में, मैं है उत्पाद जायके की स्थापना:एंड्रॉयड, Gradle, उत्पाद जायके और प्रकट

productFlavors 
{ 
    AlternateFlavour 
    { 
     applicationId "com.myapp.alternateflavour" 
    } 
} 

फिर sourceSets अनुभाग में, मैं अलग संसाधन, संपत्ति और प्रकट निर्देशिका का उपयोग उन जायके के लिए:

sourceSets { 
    main { 
     manifest.srcFile 'AndroidManifest.xml' 
     java.srcDirs = ['src'] 
     res.srcDirs = ['res'] 
     assets.srcDirs = ['assets'] 
    } 

    AlternateFlavour { 
     manifest.srcFile 'manifest-tmp/AlternateFlavour/AndroidManifest.xml' 
     java.srcDirs = ['src'] 
     res.srcDirs = ['res-tmp/AlternateFlavour'] 
     assets.srcDirs = ['assets-tmp/AlternateFlavour'] 
     } 
    } 

अभी तक ठीक है।

कि प्रकट में स्वाद है, जो भाग में है स्वचालित रूप से उत्पन्न द्वारा किया जा रहा है, मैं है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.myapp" 
    android:versionCode="1010001" 
    android:versionName="V1.1.0.1" > 

लेकिन जड़ परियोजना में मूल प्रकट में इस प्रकार है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.myapp" 
    android:versionCode="1010000" 
    android:versionName="V1.1.0.DEBUG" > 

Error: 
    Attribute [email protected] value=(1010001) from AndroidManifest.xml:4:5-28 
    is also present at AndroidManifest.xml:4:5-28 value=(1010000). 
Attributes of <manifest> elements are not merged. 

ऐसा क्यों है MERG कोशिश कर रहा है: यह Gradle विफल का कारण बनता है ई मूल मेनिफेस्ट के साथ, जब मैंने निर्दिष्ट किया है कि इसे कहीं और देखना चाहिए?

और मैं इसे कैसे रोक सकता हूं?

मुझे उम्मीद है कि कुछ सवाल करेंगे कि मैं इसे इस तरह क्यों कर रहा हूं, या वास्तव में मैं सुझाई गई स्वाद परियोजना संरचना का उपयोग क्यों नहीं कर रहा हूं। खैर, मुझे ग्रैडल के बाहर उपयोग करने के लिए एक सामान्य मैनिफेस्ट चाहिए, उदा। ग्रहण से तैनाती के लिए (एक समय में एक चीज़ कृपया!) और मुझे बिल्ड प्रक्रिया द्वारा इंजेक्शन देने के लिए संस्करणों की भी आवश्यकता है।

उत्तर

0

मैं ध्यान में रखते हुए किया जाएगा क्या @CommonsWare उनके जवाब में कहा है, लेकिन अब के लिए, मैं इस इस प्रकार सुलझाया है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.myapp.myapp" 
    tools:replace="android:versionName,android:versionCode" 
    android:versionCode="1010001" 
    android:versionName="V1.1.0.1" > 

नोट दो tools के टुकड़े।

मैं मूल रूप से इस बारे में पता था, लेकिन मैं बंद कर दिया गया था यह कोशिश कर, क्योंकि पूर्ण Gradle त्रुटि तीन समस्याओं के लिए भेजा: versionName

  • मानचित्र API कुंजी
    • versionCode
    • जिनमें से सभी ऑटो-डाले गए हैं। लेकिन यह केवल उन लोगों के अंतिम के लिए एक सुझाव के रूप tools:replace proferred, तो मैं धारणा है कि यह manifest विशेषताओं पर काम नहीं होगा मिला है। वास्तव में यह करता है।

    4

    यह मूल मैनिफेस्ट में विलय करने का प्रयास क्यों कर रहा है, जब मैंने निर्दिष्ट किया है कि इसे कहीं और देखना चाहिए?

    आपने कहा स्वाद मैनिफेस्ट कहीं और है। प्रकट विलय प्रक्रिया सभी प्रासंगिक प्रकट होता है विलीन हो जाती है:

    • main
    • निर्माण प्रकार
    • उत्पाद स्वाद (रों)
    • पुस्तकालयों

    प्रकट main में हमेशा प्रासंगिक है।

    और मैं इसे कैसे रोक सकता हूं?

    आप main में मैनिफेस्ट के रूप में हमेशा प्रासंगिक नहीं हैं।

    सबसे अच्छा समाधान, सामान्य रूप में, सभी प्रकट होता है से versionCode और versionName से छुटकारा पाने के, और उन्हें build.gradle, तो आप पूर्ण कार्यक्रम संबंधी नियंत्रण है जहां में सेट है।

    अगली सबसे अच्छा समाधान उत्पाद स्वाद है कि आप यहां नहीं दिखा रहे हैं में main प्रकट से बाहर versionCode और versionName स्थानांतरित करने के लिए है। मैं किसी के लिए सिर्फ एक उत्पाद स्वाद बनाने, के रूप में AFAIK यह व्यर्थ — है आप केवल कभी निर्माण कर सकते हैं कि एक उत्पाद स्वाद (AFAIK के रूप में वहाँ कोई स्वादहीन हैं एक बार आप जायके परिचय बनाता है) कभी नहीं देखा है। उत्पाद जायके आमतौर पर 2 + के समूह में आते हैं (जैसे, google स्वाद Play सेवाएं का उपयोग करता है और जो ऐसा नहीं करता standalone स्वाद)। यदि main में मूल्यों गैर AlternateFlavour स्वाद के लिए वास्तव में कर रहे हैं, अपने mainversion... सामान वहाँ चलते हैं।

    सिवाय इसके, आप the documentation on the manifest merger process समीक्षा करने के लिए आप सही निर्देशों में डाल आप क्या चाहते हैं पाने के लिए कर सकते हैं देखने के लिए स्वागत है।

    +0

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

    +0

    @RobPridham: "वह आईडीई परिनियोजन द्वारा उपयोग किया जाता है" - यदि आप एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं, तो बिल्ड वेरिएंट टूल नियंत्रण आईडीई द्वारा उपयोग किया जाता है। वास्तव में – CommonsWare

    +0

    । दुर्भाग्यवश अभी तक नहीं - अभी भी इस विकास के लिए ग्रहण और एडीटी का उपयोग कर रहे हैं, विभिन्न प्रकार के अच्छे (हालांकि समय के साथ कम अच्छा) कारणों के लिए। –

    संबंधित मुद्दे