2015-10-21 2 views
9

मुझे स्वाद से एक विशिष्ट res फ़ोल्डर को हटाने की आवश्यकता है।ग्रेडल बिल्ड स्वाद से res फ़ोल्डर को कैसे बाहर निकालना है?

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

productFlavors { 
    flavor1 { 
     sourceSets { 
      flavor1 { 
       resources { 
        exclude 'res/drawable-mdpi/*' 
       } 
      } 
     } 
    } 
    flavorDimensions "flavor" 
} 

लेकिन अभी भी ड्रायबल-एमडीपीआई फ़ोल्डर एपीके में आ रहा है।

तो क्या कोई यह निर्दिष्ट कर सकता है कि मैं कौन सी गलती कर रहा हूं।

धन्यवाद विवेक

+1

आप 'sourceSets { flavor1 { मुख्य { संसाधनों { srcDir 'रेस' को बाहर '**/drawable-mdpi/**' } } } }' –

+0

मैंने कोशिश की कोशिश करनी चाहिए वही है लेकिन यह काम नहीं करता है। – vivek

+0

@ विवेक आपने इस मुद्दे को कैसे हल किया? – Fahim

उत्तर

4

मैं अंत में इस समस्या का समाधान!

मुझे this link मिला है।

और यह आपने क्या किया:

  1. रेस/कच्चे फ़ोल्डर में एक xml फ़ाइल जोड़ें। मैं इसे resources_discard.xml नाम है, यहाँ यह है:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:tools="http://schemas.android.com/tools" 
    tools:discard="@raw/hd/*" /> 
    
  2. इस फाइल लाइट बुलाया मेरी स्वाद के लिए एक सही निर्देशिका संरचना "scr/लाइट/res/कच्चे"

इस में रखा गया है रास्ता, रेज/एचडी फ़ोल्डर की सामग्रियों को लाइट बिल्ड में शामिल नहीं किया गया है, प्रभावी रूप से 50%

यूपीडी: विभिन्न स्वादों से कुछ छवियों को बाहर करने के लिए, आपको छवियों को संपत्ति फ़ोल्डर में रखना होगा, और लाइट बिल्डों में प्रभावी रूप से मेरे लाइट बिल्ड एपीके आकार को कम करना शामिल नहीं है। क्रमिक घोषणा में:

flavor { 
     aaptOptions { 
      ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter 
     } 
    } 

भी मुझे पता चला कि आपके पास/कच्चे फ़ोल्डर में उपफोल्डर्स नहीं हो सकते हैं।

0

आप विभाजन का उपयोग करने का प्रयास कर सकते हैं।

उदाहरण (एंड्रॉयड एसडीके वेबपेज से दाएं):

android { 
    ... 
    splits { 

    // Configures multiple APKs based on screen density. 
    density { 

     // Configures multiple APKs based on screen density. 
     enable true 

     // Specifies a list of screen densities Gradle should not create multiple APKs for. Here you should add all the densities except MDPI. 
     exclude "ldpi", "xxhdpi", "xxxhdpi" 

     // Specifies a list of compatible screen size settings for the manifest. 
     compatibleScreens 'small', 'normal', 'large', 'xlarge' 
    } 
    } 
} 

यदि वह काम नहीं करता है, तो आप अपने res/MDPI और दो अलग-अलग मॉड्यूल में रेस/घनत्व फ़ोल्डरों के बाकी (चलो कॉल को अलग कर सकता उन्हें, लेआउट एमडीपीआई और लेआउट सभी)। दोनों मॉड्यूल में एक ही पैकेज नाम होना चाहिए ताकि उनके आर वर्ग समान और अदला-बदले (अनिवार्य रूप से वही है जो एंड्रॉइड एसडीके के विभिन्न संस्करणों के बीच होता है)। फिर, अपने स्वाद के लिए कम से कम दो विशिष्ट निर्भरता कॉन्फ़िगरेशन बनाएं, उन लोगों के लिए जिन्हें एमडीपीआई का उपयोग करना चाहिए, और उन लोगों के लिए जो एक नहीं होना चाहिए।

configurations { 
    mdpiCompile 
    allCompile 
} 

dependencies { 
    ... 
    mdpiCompile project(':layoutMdpi') 
    allCompile project(':layoutAll') 
} 

और फिर, चूंकि एमडीपीआई संसाधन लेआउट में मौजूद नहीं हैं, तो आप जाने के लिए अच्छे हैं।

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