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 विफल का कारण बनता है ई मूल मेनिफेस्ट के साथ, जब मैंने निर्दिष्ट किया है कि इसे कहीं और देखना चाहिए?
और मैं इसे कैसे रोक सकता हूं?
मुझे उम्मीद है कि कुछ सवाल करेंगे कि मैं इसे इस तरह क्यों कर रहा हूं, या वास्तव में मैं सुझाई गई स्वाद परियोजना संरचना का उपयोग क्यों नहीं कर रहा हूं। खैर, मुझे ग्रैडल के बाहर उपयोग करने के लिए एक सामान्य मैनिफेस्ट चाहिए, उदा। ग्रहण से तैनाती के लिए (एक समय में एक चीज़ कृपया!) और मुझे बिल्ड प्रक्रिया द्वारा इंजेक्शन देने के लिए संस्करणों की भी आवश्यकता है।
तो सब से पहले, वहाँ जायके का भार यहाँ है - मैं सिर्फ दिए गए उदाहरण आसान बनाने का प्रयास। मैं (एएफएआईके) मूल मैनिफेस्ट से विशेषताओं को हटाने के साथ नहीं जा सकता क्योंकि यह आईडीई परिनियोजन द्वारा उपयोग किया जाता है। हालांकि मैं गुणों के बिना संभवतः तीसरा बना सकता हूं, और ग्रैडल डिफ़ॉल्ट रूप से इसका उपयोग कर सकता हूं। अत्यधिक लगता है! –
@RobPridham: "वह आईडीई परिनियोजन द्वारा उपयोग किया जाता है" - यदि आप एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं, तो बिल्ड वेरिएंट टूल नियंत्रण आईडीई द्वारा उपयोग किया जाता है। वास्तव में – CommonsWare
। दुर्भाग्यवश अभी तक नहीं - अभी भी इस विकास के लिए ग्रहण और एडीटी का उपयोग कर रहे हैं, विभिन्न प्रकार के अच्छे (हालांकि समय के साथ कम अच्छा) कारणों के लिए। –