2016-11-20 7 views
9

मैंने इस समस्या में भाग लिया है जहां minifyEnabled और shrinkResources मुझे इस अर्थ में उप-इष्टतम परिणाम देते हैं; जब मैंने शामिल किया है,तृतीय पक्ष लाइब्रेरी से अप्रयुक्त संपत्तियों को हटाकर

'com.google.android.gms:play-services-places:9.6.1' 

मैं Google साइन इन एपीआई का उपयोग नहीं कर रहा हूं, मुझे छवियों में साइन इन का भार मिलता है। sign_in_images

मैं अपने एपीके से उनसे कैसे छुटकारा पा सकता हूं? वे केबी के एक उचित बिट जोड़ने लगते हैं।

मैं ऊपर बताए अनुसार संसाधनों को कम करने और घटाने के साथ प्रोगार्ड का उपयोग कर रहा हूं।

+0

Pleasw इस लिंक को संदर्भित करें आपको उत्तर मिलेगा http://stackoverflow.com/a/40742213/4069985 –

+1

इसके लिए कुछ भी अंतर्निहित नहीं है। आप [इस ग्रैडल स्क्रिप्ट] (https://stackoverflow.com/a/34525498/115145) को आजमा सकते हैं, हालांकि मैंने इसे अभी तक एक शॉट नहीं दिया है। – CommonsWare

+0

@ श्रीनिवास केरथिप्राकासम धन्यवाद – Hades

उत्तर

4

एंड्रॉइड डेवलपर उपयोगकर्ता मार्गदर्शिका पर एक विवरण विषय here है।

असल में, आपके संसाधनों को कम करके वास्तव में आपके एपीके के आकार को कम करने के लिए आपके पास बहुत सारे विकल्प हैं। मैंने उनके बारे में थोड़ी सी जानकारी में चर्चा की है, और मुझे लगता है कि सख्त संदर्भ चेक सक्षम करें नीचे चर्चा की गई आपकी समस्या का समाधान करना चाहिए, लेकिन आप अपने एपीके आकार को कम करने के लिए सभी उपलब्ध विकल्पों को देख सकते हैं।


अनुकूलित जो संसाधनों को रखने के लिए

दस्तावेज़ कहते हैं, रेस/कच्चे/keep.xml, क्या रखने के लिए तय करने के लिए पर नीचे एक्सएमएल का उपयोग करें और क्या नहीं रखना:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
    tools:discard="@layout/unused2" /> 

और शेष निर्माण प्रणाली का ख्याल रखा जाएगा (विभिन्न निर्माण प्रकारों का उपयोग करते समय यह उपयोगी होता है)।


सक्षम सख्त संदर्भ चेकों

आप नीचे दिए गए की तरह अपने कोड या अपने पुस्तकालय को संदर्भित संसाधनों है: इस मामले संसाधन shrinker में

getResources().getIdentifier("image1", "drawable", getPackageName()) 

फिर, डिफ़ॉल्ट और चिह्नों से रक्षा बर्ताव करता है संभावित रूप से उपयोग और हटाने के लिए अनुपलब्ध नाम मिलान नाम प्रारूप वाले सभी संसाधन।

तो,

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:shrinkMode="strict" /> 

रेस के लिए निम्न/कच्चे/keep.xml यह आपकी समस्या का समाधान करना चाहिए जोड़ने जोड़ें।


निकालें अप्रयुक्त विकल्प संसाधनों

संसाधन Shrinker, अलग-अलग भाषाओं के लिए वैकल्पिक संसाधनों, जैसे, वैकल्पिक drawable संसाधनों विभिन्न स्क्रीन घनत्व के लिए, वैकल्पिक स्ट्रिंग संसाधनों को दूर नहीं करता आदि

तो, आप स्वयं को अपनी बिल्ड फ़ाइल से क्या रखना है, चुन सकते हैं, कहें, आप 'एन' लोकेल में स्ट्रिंग्स रखना चाहते हैं:

android { 
    defaultConfig { 
     ... 
     resConfigs "en", "fr" 
    } 
} 

इससे आकार में काफी कमी आ सकती है।


अभी भी संसाधन, संसाधन shrinker द्वारा रखा जाता है, तो उन्हें मैन्युअल रूप से पहले चर्चा की विधि का उपयोग कर बाहर करते हैं, और देखें कि संकलित हो जाता है और ठीक से निर्माण, अगर नहीं, तो संसाधन shrinker द्वारा संसाधनों को रखने के लिए कारण, स्पष्ट हो जाएगा इमारत के दौरान फेंक दिया अपवाद से।

उम्मीद है कि यह मदद करता है!

+0

मैंने उन सभी विधियों का प्रयास किया है। कुछ भी काम नहीं किया। – Hades

3

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

android { 
    packagingOptions { 
     exclude '/**/common_google_signin*.png' 
    } 
} 
3

वहाँ कुछ संभावनाएं एप्लिकेशन आकार को कम करने और दूर करने के लिए किया जा सकता है अप्रयुक्त संपत्तियां

आप (':lib') प्रोजेक्ट लाइब्रेरी से अप्रयुक्त संपत्तियों को हटा सकते हैं।

आप @aar फ़ाइल आयात किया है तो की तुलना में आप इस

compile ('com.facebook.android:facebook-android-sdk:[email protected]'){ 
    exclude module: 'support-v4' 
} 

की तरह कुछ कर सकते हैं फिर भी हम @aar वैकल्पिक तरीका की जगह है कि उस @aar(':lib') करने के लिए, वहाँ से संपत्ति को दूर लगता है की तुलना में फ़ाइल में अप्रयुक्त फ़ाइलों की है।

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