2011-04-06 14 views
9

मेरे पास मेरे ग्रहण कार्यक्षेत्र में एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट है, जिसे मैं एक अद्वितीय टूलबॉक्स के रूप में उपयोग करता हूं। मौके से (1), मैंने अभी पाया है कि लाइब्रेरी से संसाधन (एक्सएमएल एनिमेशन, एक्सएमएल लेआउट, यहां तक ​​कि ड्रॉबल्स !!!) लाइब्रेरी का उपयोग करने वाली परियोजनाओं के एपीके में पैक किए जाते हैं, भले ही मैं उनका उपयोग न करें।मेरे एपीके में आने वाले एंड्रॉइड लाइब्रेरी प्रोजेक्ट से अप्रयुक्त संसाधनों और कोड से कैसे बचें?

Does android always package unused resources? पढ़ने के बाद, मुझे आश्चर्य है कि यह सामान्य है या नहीं। इससे कैसे बचा जा सकता है? अलग पुस्तकालय परियोजनाओं का एकमात्र तरीका है?

संपादित करें: मैंने पाया है कि .dex को डीकंपलिंग कर रहा है, जो अप्रयुक्त कोड भी इसे एपीके में बनाता है।

(1) मैं अपने ऐप, /res/drawable/icon.png के लिए एक नया आइकन परीक्षण करने का प्रयास कर रहा था, लेकिन डिफ़ॉल्ट आइकन दिखाई देगा। मैंने छवि को हटा दिया और यह डिफ़ॉल्ट आइकन दिखा रहा था! पुस्तकालय से इसे /res/drawable-mdpi/icon.png होना था।

उत्तर

2

नए Android निर्माण प्रणाली एक resource stripping mechanism कि में बनाया निर्माण प्रक्रिया पर अंतिम कदम के रूप में चलाया जा सकता है है। लिंट पहचानने वाले संसाधनों को हटाने के अलावा इसका उपयोग करें।

ध्यान दें कि संसाधन स्ट्रिपिंग तंत्र Proguard (बिल्ड सिस्टम के साथ भी बंडल) के साथ विशेष रूप से उपयोगी है और जब आप अपनी परियोजना में पुस्तकालयों का उपयोग कर रहे हैं। विचार है:

  • प्रोगुआर्ड उन कक्षाओं को हटा देता है जिनका आप उपयोग नहीं कर रहे हैं, जिनमें पुस्तकालयों से आए थे।
  • उपर्युक्त प्रक्रिया उन पुस्तकालयों के साथ संसाधनों के कोड संदर्भों को हटा सकती है।
  • उन असुरक्षित संसाधनों को इस प्रकार एपीके से हटाया जा सकता है, क्योंकि अब कोई कोड नहीं है जो उनका उपयोग करता है।

अप्रयुक्त संसाधन है कि पहचान करता है एक प्रकार का वृक्ष निकाला जा रहा है अभी भी उन्हें हटाने क्योंकि उपयोगी है:

  • अपने निर्माण
  • अपने प्रोजेक्ट की रखरखाव बोझ कम कर देता है की गति।
2

Proguard अप्रयुक्त कोड को हटा सकता है।

लेकिन यह अप्रयुक्त संसाधनों के बारे में कुछ भी नहीं करेगा और यह आपके कोड को भी खराब कर देगा। इसे इस्तेमाल करने से पहले आपको इसे कुछ विचार देना होगा।

+0

धन्यवाद, मैंने सोचा कि यह केवल कोड को अपवित्र करने के लिए था। – bigstones

+1

अच्छी तरह से यह मुख्य उद्देश्य है, लेकिन प्रक्रिया में यह अप्रयुक्त कोड भी पट्टी कर देगा। आपको देखभाल करना है क्योंकि यह कुछ बार बहुत अधिक कोड पट्टी कर सकता है, यह आपके द्वारा दिए गए लिंक में समझाया गया है, साथ ही इससे कैसे बचें। –

1

जैसा कि किसी ने पहले कहा था, Proguard अप्रयुक्त कोड को हटा सकता है।

अप्रयुक्त संसाधनों को निकालने के लिए आप ADT 16. से Android Lint टूल का उपयोग कर सकते हैं। यह न केवल अप्रयुक्त संसाधनों को हटाने के लिए, बल्कि संभावित बग खोजने के लिए भी आपकी सहायता करेगा।

यहाँ त्रुटियों के प्रकार है कि इसके लिए लग रहा है के कुछ उदाहरण हैं:: यह बोली इसकी आधिकारिक साइट से है

  • गुम अनुवाद (और अप्रयुक्त अनुवाद)
  • लेआउट प्रदर्शन की समस्याओं (सभी मुद्दों वर्ष layoutopt लगाने के लिए इस्तेमाल किया उपकरण, और अधिक)
  • अप्रयुक्त संसाधन
  • असंगत सरणी के आकार (जब सरणियों कई विन्यास में परिभाषित कर रहे हैं)
  • पहुँच क्षमता और अंतर्राष्ट्रीयकरण समस्याओं (हार्डकोडेड तार, लापता सामग्रीमंडलियों, आदि)
  • चिह्न समस्याओं
  • प्रयोज्य समस्याओं (लापता घनत्व, डुप्लिकेट प्रतीक, गलत आकार, आदि जैसे) (की तरह एक पाठ क्षेत्र पर एक इनपुट प्रकार को निर्दिष्ट नहीं)
  • प्रकट त्रुटियों और कई और।
संबंधित मुद्दे

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