2016-05-05 8 views
6

मैं एक एंड्रॉइड आधारित सिस्टम का निर्माण कर रहा हूं जिसके लिए एक बाइनरी प्रोटोकॉल के माध्यम से डेटा भेजने की आवश्यकता है। मुझे उम्मीद है कि कई प्रोटोकॉल के कई संस्करण होंगे और उन्हें बनाए रखने के साथ आने वाले दुःस्वप्न होंगे।डीईएक्स और डाल्विक जावा बाइनरी संगतता का समर्थन करते हैं?

यह मेरे लिए होता है कि मैं जावा की बाइनरी संगतता का उपयोग करके संस्करण संस्करण के अधिकांश हिस्सों को दूर करने में सक्षम हो सकता हूं।

मान लीजिए कि एप्लिकेशन A लाइब्रेरी L पर निर्भर करता है। L में C श्रेणी है, जो A में उपयोग की जाती है, जो इंटरफ़ेस I लागू करती है। मैं इंटरफेस I के I(0) परिभाषा के साथ L और A दोनों का निर्माण करता हूं। मैं डिवाइस पर L(0), और A(0) इंस्टॉल करता हूं। A(0) गतिशील रूप से L(0) बांधता है जो कक्षा C(0) प्रदान करता है।

अब, मैं इंटरफेस I बढ़ाता हूं, उदाहरण के लिए, दो नए तरीकों को जोड़ता हूं। जब मैं L संकलित करने का प्रयास करता हूं, तो संकलन विफल रहता है, क्योंकि C नई विधियों को लागू नहीं करता है। मैं C बढ़ाकर L को ठीक करता हूं, इसलिए यह दो नई विधियों को लागू करता है। अब मैं L(1) संकलित I(1) के खिलाफ संकलित करता हूं और इसे डिवाइस पर स्थापित करता हूं।

ध्यान दें कि, इस बिंदु पर, AI(1) के विरुद्ध संकलित नहीं होगा। कोई भी कम नहीं, अगर यह जावा था, A(0)L(1) से C(1) का उपयोग करके सही ढंग से बाध्य और चलाएगा।

जेएलएस अध्याय 13, बाइनरी संगतता द्वारा जावा के कार्यान्वयन के लिए यह व्यवहार (और अधिक) गारंटीकृत है। यदि यह डीईएक्स और दलविक के लिए है, तो मैं प्रोटोकॉल की एक बड़ी श्रेणी को अपने ग्राहकों के लिए पूरी तरह से अदृश्य कर सकता हूं।

तो सवाल यह है कि, डीईएक्स और दलविक जेएलएस बाइनरी संगतता spec का पालन करते हैं? यदि नहीं, तो क्या कोई दस्तावेज़ है जो DEX/Dalvik बाइनरी संगतता निर्दिष्ट करता है?

उत्तर

5

मैं Dalvik वी एम (या ऐसे एआरटी के रूप में संबंधित runtimes) के मौजूदा शिपिंग संस्करणों के बारे में आधिकारिक नहीं बोल सकता, लेकिन .dex प्रारूप के डिजाइनर के रूप में, मैं इरादे से बात कर सकते हैं:

मैं दावा नहीं कर रहा हूं कि मैंने .dex प्रारूप के डिजाइन में किसी भी spec के लिए सख्ती से पालन किया। मैं जो कहूंगा वह यह है कि मैंने प्रारूप को उन कार्यक्रमों के प्रतिनिधित्व के लिए एक उपयुक्त कंटेनर माना है जो मूल रूप से जावा प्रोग्रामिंग भाषा में लिखे गए थे, जिसमें अलग कोड संकलन और विकास के माहौल में क्रॉस-कोड संगतता के बारे में चिंताएं शामिल थीं।

कहा कि (और के रूप में मैं गर्भित sorta) इस कार्यान्वयन के एक क्षेत्र है जो सुपर आसान गलत पाने के लिए है, और जिसमें अक्सर व्यवहार में समस्याओं समय की विस्तारित अवधि वास्तव में है क्योंकि बहुत कुछ कार्यक्रमों वास्तव में निर्भर के लिए चल पाता जाना है जिस तरह की गारंटी आप रुचि रखते हैं उस पर।

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

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