2014-04-05 6 views
48

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

apply plugin: 'android' 

//... 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.3" 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 19 
     versionCode 30 
     versionName "2.0" 
    } 
    buildTypes { 
     debug { 
      packageNameSuffix '.debug' 
      versionNameSuffix '-SNAPSHOT' 
     } 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

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

जांच इस http://stackoverflow.com/questions/18460095/how-to -प्रोवाइड-अलग-लॉन्चर-आइकन-प्रति-उत्पाद-स्वाद – Libin

+3

[डीबग और रिलीज़ मोड के लिए एंड्रॉइड - ऐप आइकन] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/19528063/android-app-icon-for- डीबग-एंड-रिलीज-मोड) –

उत्तर

90

यह पता लगाया। आपको क्या करना है एक अलग स्रोत फ़ोल्डर बनाना है जिसे debug कहा जाता है जिसमें विभिन्न आइकन होते हैं। उदाहरण के लिए, अपने लॉन्चर आइकन ic_launcher.png कहा जाता है अगर अपनी परियोजना लेआउट इस प्रकार है, और:

[Project Root] 
    -[Module] 
    -src 
     -main 
     -res 
      -drawable-* 
      -ic_launcher.png 

तब डीबग बिल्ड प्रकार के लिए एक अलग आइकन जोड़ने के लिए, आप जोड़ना:

[Project Root] 
    -[Module] 
    -src 
     -main 
     -res 
      -drawable-* 
      -ic_launcher.png 
     -debug 
     -res 
      -drawable-* 
      -ic_launcher.png 

फिर, जब आप डीबग बिल्ड प्रकार के तहत निर्माण करते हैं, तो यह डीबग फ़ोल्डर में पाए गए ic_launcher का उपयोग करेगा।

+0

क्या आपको स्रोतसेट घोषणा के साथ अतिरिक्त डीबग फ़ोल्डर निर्दिष्ट करने की आवश्यकता नहीं थी? – ncoronges

+1

@ncoronges मैंने नहीं किया। ऐसा प्रतीत होता है क्योंकि डीबग एक अंतर्निहित निर्माण प्रकार है, इसके लिए स्रोत सेट भी अंतर्निहित है। – InsanityOnABun

+0

क्या आपने अपने सभी अन्य संसाधनों को आम "मुख्य" फ़ोल्डर में छोड़ा था? क्या रिलीज आइकन अभी भी "मुख्य" फ़ोल्डर में है? आपके पास AndroidManifest या build.gradle में कोई अन्य सेटिंग्स नहीं है? जब मैं कोशिश करता हूं तो मुझे आइकन बदल नहीं रहा है। – Scott

8

साथ ही आप उत्पाद स्वाद के आंशिक AndroidManifest.xml फ़ाइल में आइकन निर्दिष्ट कर सकते हैं:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools"> 
    <application 
     tools:replace="android:icon" 
     android:icon="@drawable/alternative_icon" /> 
</manifest> 

यह चिह्न है कि आप मूल AndroidManifest.xml

+4

प्रश्न की जांच करें। "क्या इस तरह के निर्माण के माध्यम से, ** उत्पाद स्वाद ** प्राप्त किए बिना इसका कोई तरीका है?" – InsanityOnABun

+1

हालांकि पूछे जाने पर, मुझे बहुत मदद मिली! ~ स्वाद का उपयोग ~ – Flummox

+1

ऐसा करने का सबसे अच्छा तरीका है, यदि आपके पास पहले से ही स्वाद विशिष्ट मैनिफेस्ट फाइलें हैं। – Zax

36

इस में निर्दिष्ट के ऊपर लिख देगा एक आसान दृष्टिकोण है हालांकि इसका एक महत्वपूर्ण नकारात्मक पक्ष है ... दोनों लॉन्चर्स को आपके एपीके में रखा जाएगा। - Bartek Lipinski

बेहतर तरीका: InsanityOnABun's answer

AndroidManifest.xml

<manifest 

    ... 
     <application 
     android:allowBackup="true" 
     android:icon="${appIcon}" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

    ... 

    </application> 

</manifest> 

build.gradle

android { 

    ... 
     productFlavors{ 
     Test{ 
      versionName "$defaultConfig.versionName" + ".test" 
      resValue "string", "app_name", "App-Test" 
      manifestPlaceholders = [ 
        appIcon: "@mipmap/ic_launcher_test" 
      ] 
     } 

     Product{ 
      resValue "string", "app_name", "App" 
      manifestPlaceholders = [ 
        appIcon: "@mipmap/ic_launcher" 
      ] 
     } 
    } 
} 

Github यूआरएल: Build multi-version App with Gradle

+0

के लिए सुरुचिपूर्ण यह एक आसान दृष्टिकोण है हालांकि इसका एक महत्वपूर्ण नकारात्मक पक्ष है ... दोनों लॉन्चर्स को आपके एपीके में रखा जाएगा। –

+0

-_- # यह एक समस्या है, मैं इसे अद्यतन करता हूं। बेहतर तरीका: -> http://stackoverflow.com/a/22876224/703225 – qinmiao

+1

यह महत्वपूर्ण नकारात्मक क्यों है? यह मेरे लिए बहुत महत्वपूर्ण नहीं लग रहा है, और यह अच्छा और साफ ग्रेडल समाधान – luky

2

जैसे अनेक आयामों के साथ विभिन्न स्वादों, का उपयोग करते समय विभिन्न आइकन हो रही के लिए:

flavorDimensions "color", "size" 
productFlavors { 
    black { 
     dimension "color" 
    } 
    white { 
     dimension "color" 
    } 

    big { 
     dimension "size" 
    } 
    small { 
     dimension "size" 
    } 
} 

यह प्राप्त किया जा सकता है:

सबसे पहले, इस तरह के रूप अलग फ़ोल्डर, में डिबग संसाधनों डाल:

src/blackDebug/res 
src/whiteDebug/res 

दूसरा, कई स्वाद आयामों के साथ कुंजी डाल है कि sourceset नाम सभी संभव स्वाद कोम्बी शामिल होना चाहिए राष्ट्र, भले ही इनमें से कुछ आयाम आइकन को प्रभावित न करें।

sourceSets { 
    // Override the icons in debug mode 
    blackBigDebug.res.srcDir 'src/blackDebug/res' 
    blackSmallDebug.res.srcDir 'src/blackDebug/res' 
    whiteBigDebug.res.srcDir 'src/whiteDebug/res' 
    whiteSamllDebug.res.srcDir 'src/whiteDebug/res' 
} 

बस यह स्पष्ट है, तो निम्न काम नहीं करेगा जब कई आयामों उपयोग में हैं बनाने के लिए:

sourceSets { 
    // Override the icons in debug mode 
    blackDebug.res.srcDir 'src/blackDebug/res' 
    whiteDebug.res.srcDir 'src/whiteDebug/res' 
} 
+0

यह सुनिश्चित नहीं है कि यह कैसे मदद करेगा क्योंकि लॉन्च आइकन घोषित फ़ाइल में घोषित किया गया है। क्या आप उस मुद्दे को संबोधित कर सकते हैं? –

+1

संसाधन नाम घोषणापत्र में घोषित किया गया है, लेकिन मेरे पोस्ट में वर्णित अनुसार विभिन्न स्वाद-विशिष्ट फ़ोल्डरों में आपके पास समान फ़ाइल नामों के साथ अलग-अलग आइकन हो सकते हैं। –

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