2017-12-15 76 views
6

से संसाधनों या आयर फ़ाइलों को कैसे बाहर निकालना है, क्योंकि मुझे एपीके फ़ाइल के आकार को कम करने की आवश्यकता है, मैंने Apk Expansion का चयन किया है ताकि भाग में एपीके को विभाजित किया जा सके।मुख्य एपीके

Downloader libraryexpansion file डाउनलोड करने के लिए तरीके को परिभाषित करता है, लेकिन मैं जिस तरह से apk से resource files और aar फ़ाइलों को छोड़ने के लिए पता करने की जरूरत।

मुझे निम्नलिखित मिला, लेकिन ये न तो resource-drawable files और न ही arr फ़ाइलों को हटा रहे हैं, और एपीके का आकार समान रहता है।

परीक्षण प्रयोजन के लिए, मैं चारों ओर 4 MB की drawables और आकार 3 MB की arr फ़ाइलों की जोड़ी को शामिल किया है। मैं Build->Build APK विकल्प से apk बना रहा हूं। मुझे नहीं पता कि निम्नलिखित केवल हस्ताक्षरित एपीके पर प्रभावी होगा या नहीं।

sourceSets { 
    main { 
     resources { 
      exclude '**/drawable/*' 

     } 
    } 
} 



android { 
    packagingOptions { 
     exclude 'lib/armeabi/a.so' 
    } 
} 

उत्तर

2

2 चीजें हैं जो आप कर सकते हैं।

  1. सबसे पहले, आप Lint का उपयोग कर सकते हैं। लिंट उन सभी संसाधनों को हाइलाइट और निकालने में मदद करेगा जिन्हें आप अपने कोड में ड्रॉबल्स समेत उपयोग नहीं कर रहे हैं।

  2. दूसरा आप Proguard का उपयोग कर सकते हैं। Proguard का उपयोग करके आप चुन सकते हैं कि एपीके का कौन सा संस्करण आप debug (या मुख्य, जैसा कि आपके उदाहरण में) संस्करण को छोटा करना चाहते हैं। बस निम्नलिखित कोड डालें।

    android { 
    buildTypes { 
        debug { 
         minifyEnabled true 
         useProguard false 
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 
           'proguard-rules.pro' 
        } 
        release { 
         minifyEnabled true 
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 
           'proguard-rules.pro' 
        } 
    } } 
    
5

अगर वहाँ विशिष्ट संसाधनों रखने के लिए या त्यागने, एक <resources> टैग के साथ अपनी परियोजना में एक 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" /> 

इस फ़ाइल को अपने प्रोजेक्ट संसाधनों में सहेजें, उदाहरण के लिए, res/drawable/keep.xml पर। बिल्ड इस फ़ाइल को आपके एपीके में पैकेज नहीं करता है। इस तरह आप अनुकूलित कर सकते हैं कि कौन से संसाधनों को रखना है।

2

विस्तार फ़ाइलों में कोई निष्पादन योग्य कोड नहीं हो सकता है। यह आंशिक रूप से एक Google Play नीति है, लेकिन सुरक्षा के लिए भी। चूंकि वे आपके ऐप और प्ले दोनों के लिए सुलभ निर्देशिका में लिखे गए हैं, और संभवतः एक एसडी कार्ड के लिए, यदि आप कोड डालते हैं तो यह आपके ऐप को सुरक्षा शोषण के लिए खोल देगा।

इस वजह से, आप विस्तार फ़ाइलों में एएआर फ़ाइलों को नहीं रखना चाहते हैं, क्योंकि इन्हें सामान्यतः कोड होता है। और कई संसाधन उचित नहीं हो सकते हैं, क्योंकि ये आपके ऐप से संकलित हो जाते हैं और इसलिए संसाधन आईडी इत्यादि होते हैं। इसके बजाय आपको उन बड़े तत्वों को विभाजित करना चाहिए जो स्पष्ट संकलन का हिस्सा नहीं हैं।अच्छा उम्मीदवारों तरह बातें कर रहे हैं:

  • खुली GL संरचनाओं
  • ध्वनि प्रभाव
  • खेल के लिए बड़े स्तर डेटा या नक्शे
  • बड़ी छवियों

इन सभी के लिए बड़ी ध्वनि फ़ाइलें संभावित सकता है अपने ऐप की संपत्ति निर्देशिका में रहें और विस्तार फ़ाइलों के लिए प्रमुख उम्मीदवार हैं।

यदि आपके पास उपरोक्त में से कोई भी नहीं है, तो यदि आप आकार में 100 एमबी से अधिक जा रहे हैं तो संभव है कि आप अपने कोड को सही ढंग से प्रोजेक्ट नहीं कर रहे हैं, और आपके ऐप का उपयोग नहीं करने वाले बहुत सारे कोड सहित। यदि ऐसा है, तो प्रोजेवार्ड का सही ढंग से उपयोग करना सीखना विस्तार फ़ाइलों में स्विच करने से शायद एक बड़ा सुधार है। यदि आप कह सकते हैं कि आपके एपीके में आकार कहां जा रहा है तो एसओ उपयोगकर्ता आपको और अधिक सलाह दे सकते हैं? छवियों पर कितना? निष्पादन योग्य कोड पर कितना? क्या आप एंड्रॉइड स्टूडियो और जावा, देशी कोड, या यूनिटी जैसी तकनीक का उपयोग कर रहे हैं? इनमें से सभी के पास एपीके आकार न्यूनीकरण के लिए थोड़ा अलग दृष्टिकोण हैं।