एक एंड्रॉइड एपीके में आमतौर पर ये चीजें होती हैं।
assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex
स्थापना पर, एपीके फ़ाइल को कॉपी किया जाता है /data/app
, और उस पर classes.dex
चलाकर dex2oat
उसे "अनुकूलित" किया जाता है (Android 5+ lib/
पर भी निकाला जाता है)। ऑप्टिमाइज़ेशन के परिणाम को स्टोर किया जाता है, /data/dalvik-cache/
इसलिए ऐप को केवल एक बार इंस्टॉलेशन या अपडेट के लिए ऑप्टिमाइज़ किया जाना चाहिए । बाकी सब कुछ एपीके के अंदर रखा गया है। तो पहला उत्तर बहुत स्पष्ट है: इस तरह की चीजें assets
और res
जो ऐप द्वारा आवश्यक हैं, प्रदान की जानी चाहिए, और वे एपीके के अंदर हैं। एपीके फाइल को सपोर्टिंग उद्देश्यों के लिए रखा गया है। यदि आप एक एपीके को हटाते हैं, तो ऐप निश्चित रूप से शुरू नहीं होगा। (ऐप: मेरी संपत्ति कहां है?)
दूसरा, Google Play ने "डेल्टा अपडेट" के लिए समर्थन जोड़ा बहुत पहले। डेल्टा अद्यतन प्रक्रिया में, पुराने पैकेज और नए पैकेज के बीच अंतर की गणना की जाती है। तब जीपी "डेल्टा" डाउनलोड करता है और अपडेट किए गए एपीके को प्राप्त करने के लिए मूल एपीके में परिवर्तन लागू करता है, इस प्रकार डाउनलोड आकार को कम करता है।
एक एपीके हमेशा साइन किया जाता है। यह पैकेज में दुर्भावनापूर्ण संशोधन को रोक सकता है। आप निश्चित रूप से एक बदला हुआ ऐप इंस्टॉल नहीं करना चाहते हैं बिना यह जाने कि क्या बदला है, या क्या कोई वायरस इंजेक्ट किया गया है। META-INF/
अंदर APK इस उद्देश्य के लिए काम करता है। अनौपचारिक परिवर्तन के परिणामस्वरूप गैर-मिलान हस्ताक्षर होंगे, और एंड्रॉइड सिस्टम modded ऐप को स्थापित करने से मना कर देगा।
इसके अलावा, जब आप अपने एंड्रॉइड ओएस को अपडेट करते हैं, तो सभी डेक्स फाइलें फिर से "अनुकूलित" होती हैं, ताकि आपको उन्हें एक-एक करके फिर से स्थापित करने की आवश्यकता न हो। जैसा कि ऊपर कहा गया है, अनुकूलन को classes.dex
मूल पैकेज से फ़ाइल की आवश्यकता होती है ।