21

प्रति अलग लॉन्चर आइकन प्रदान करने के लिए मैं एक परियोजना build.gradle फ़ाइलकैसे उत्पाद स्वाद

buildscript { 
repositories { 
    mavenCentral() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:0.5.6' 
} 
} 
apply plugin: 'android' 

dependencies { 
compile fileTree(dir: 'libs', include: '*.jar') 
} 

android { 
compileSdkVersion 17 
buildToolsVersion "17.0.0" 

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

    instrumentTest.setRoot('tests') 
} 

defaultConfig { 
    ... 
} 

signingConfigs { 
    debug { 
     storeFile file("debug.keystore") 
    } 

    release { 
     ... 
    } 
} 

buildTypes { 
    debug { 
     debuggable true 
     jniDebugBuild true 
     signingConfig signingConfigs.debug 
     packageNameSuffix ".debug" 
     versionNameSuffix ".debug" 
    } 
    release { 
     debuggable false 
     jniDebugBuild false 
     signingConfig signingConfigs.release 
    } 
} 

flavorGroups "version", "market" 


productFlavors { 
    amazon { 
     flavorGroup "market" 
     buildConfig "public static final int COMPILATION = 1;" 
    } 
    google { 
     flavorGroup "market" 
     buildConfig "public static final int COMPILATION = 0;" 
    } 
    lite { 
     flavorGroup "version" 

     packageName = "package.name.lite" 
    } 
    full { 
     flavorGroup "version" 

     packageName = "package.name.full" 
    } 
} 

android.sourceSets.amazon { 
    res { 
     srcDir "amazon" 
    } 
    manifest { 
     srcFile "amazon/AndroidManifest.xml" 
    } 
} 

android.sourceSets.google { 
    res { 
     srcDir "google" 
    } 
} 

android.sourceSets.full { 
    res { 
     srcDir "full" 
    } 
} 

android.sourceSets.lite { 
    res { 
     srcDir "lite" 
    } 
} 
} 

यह ठीक काम करता है, लेकिन अब मैं हर उत्पाद स्वाद के लिए विशिष्ट लांचर चिह्न प्रदान करना चाहते हैं द्वारा परिभाषित किया गया है। मैंने अमेज़ॅन के लिए अतिरिक्त मैनिफेस्ट फ़ाइल डालने की कोशिश की लेकिन यह काम नहीं किया। मुझे एक त्रुटि मिली "APK AndroidManifest.xml में कॉपी की गई डुप्लिकेट फ़ाइलें"। क्या गलत हो सकता है?

+0

एंड्रॉइड स्वाद के लिए डेमो http://goo.gl/5NSnEM – nitesh

उत्तर

21

आप एक जोड़े विकल्प हैं: नया एंड्रॉयड स्टूडियो/Gradle लेआउट के लिए

  1. स्विच और अपने productFlavors के लिए फ़ोल्डर बना:

    src/main/ - साझा कोड/सभी जायके
    src/amazon भर में संसाधनों - सभी स्वादों में अमेज़ॅन विशिष्ट कोड/संसाधन
    src/google - सभी विशिष्ट स्वादों के पार Google विशिष्ट कोड/संसाधन

    तो आपके मुख्य मेनिफेस्ट में (src/main/AndroidManifest.xml) यदि आपका android:icon@drawable/icon है, तो आपके पास src/amazon/res/drawable-*/icon.png और इसी प्रकार के अपने उत्पाद के लिए उपयुक्त आइकन होगा।

  2. अपने मौजूदा लेआउट (और build.gradle) रखें और res.srcDirs एक संसाधन निर्देशिका संलग्न:

तो, के लिए अपने अमेज़न sourceset:

android.sourceSets.amazon { 
    res.srcDirs = ['res', '/path/to/amazon/res/dir'] 
} 

और फिर अपने /path/to/amazon/res/dir/drawable-* में आपके पास लॉन्चर आइकन होगा।

+2

यह ठीक है लेकिन केवल आंशिक रूप से है। यह काम करेगा अगर मेरे पास Google और अमेज़ॅन संस्करण या लाइट और पूर्ण संस्करण के लिए उदाहरण के लिए केवल 2 आइकन हैं। समस्या यह है कि मेरे पास स्वाद समूह हैं और मैं अपने आइकन को लाइट संस्करण अमेज़ॅन के लिए Google के लिए लाइट संस्करण से अलग होना चाहता हूं। अगर मैं अमेज़ॅन के लिए आइकन प्रदान करता हूं तो इसका उपयोग संस्करण (लाइट और पूर्ण) दोनों के लिए किया जाएगा और मैं उस व्यवहार को नहीं चाहता हूं। क्या अमेज़ॅनलाइट जैसी कोई विशिष्ट कार्य है जहां मैं उस आइकन को डाल सकता हूं या क्या मुझे स्वाद समूह को हटाना है और केवल शुद्ध स्वाद बनाना है? – mar3kk

+0

इस स्रोतसेट को जोड़ने के लिए android.sourceSets.amazon ??? –

+0

@smoak क्या मुझे मैन्युअल रूप से विभिन्न उत्पाद के लिए फ़ोल्डर्स बनाने की ज़रूरत है या इसे स्वचालित रूप से बनाया जाएगा? – WitVault

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