2011-03-07 12 views
7

मेरे पास एक जावा एप्लिकेशन है जो ब्लैकबेरी (जेडीई 4.5) पर चलता है। मैं इस एप्लिकेशन को एंड्रॉइड पर पोर्ट करना चाहता हूं, और साथ ही साथ 2 अनुप्रयोगों को बनाए रखने में सक्षम हूं। मैं इस एप्लिकेशन को अन्य जावा प्लेटफार्मों (जे 2 एमई) में भी पोर्ट करना चाहता हूं।जावा में मोबाइल उन्मुख, बहु-प्लेटफ़ॉर्म, साझा लाइब्रेरी कैसे बनाएं?

मैं समझता हूं कि कोड का एक अच्छा हिस्सा प्रत्येक प्लेटफॉर्म (यूआई और अन्य सामान) के लिए विशिष्ट होना चाहिए। लेकिन मुझे यह भी लगता है कि बहुत सारे कोड साझा किए जाने चाहिए (डोमेन से संबंधित वर्ग)।

इसे प्राप्त करने का सबसे अच्छा तरीका क्या है, और इससे बचने के लिए क्या नुकसान हैं?

मैं अपने सभी साझा वर्गों के साथ एक जेएआर बनाने में सक्षम हूं, कि मैं अपने ब्लैकबेरी एप्लिकेशन (preverify और rapc का उपयोग करके) में एकीकृत करने में सक्षम हूं। लेकिन:

  • जेएआर एक जे 2 एस लाइब्रेरी है। मैं यह कैसे सुनिश्चित कर सकता हूं कि यह ब्लैकबेरी, एंड्रॉइड या जे 2 एमई पर चलाएगा (या यहां तक ​​कि संकलित)?
  • मैं जेएसएमई (https://github.com/upictec/org.json.me/) को लक्षित करने वाले JSON लाइब्रेरी का भी उपयोग कर रहा हूं। यह लाइब्रेरी किसी प्रकार के प्रीप्रोकैसिंग निर्देशों का उपयोग करने लगती है (CLDC, https://github.com/upictec/org.json.me/blob/master/src/main/java/org/json/me/JSONObject.java#L392 देखें)। सही प्रीप्रोकैसिंग परिभाषाओं का उपयोग करके मैं इस लाइब्रेरी का उपयोग (या रूपांतरित) कैसे कर सकता हूं?
+0

मैंने j2me एप्लिकेशन के विकास के लिए LWUIT ढांचे का उपयोग किया। और मैं कुछ बदलावों के साथ एंड्रॉइड और ब्लैकबेरी में आसानी से इस एप्लिकेशन का उपयोग कर सकता था। – bharath

उत्तर

2

इन दिनों, इस तरह कोड साझा करने के लिए सबसे बड़ा ठोकर ब्लॉक यह है कि ब्लैकबेरी वीएम और एंड्रॉइड वीएम दोनों जावा भाषा के विभिन्न संस्करणों का समर्थन करते हैं। ब्लैकबेरी जावा 1.3 का सबसेट का उपयोग करता है, एंड्रॉइड जावा 1.5 का सबसेट का उपयोग करता है। (एक तरफ, न तो मंच जावा वीएम लागू करता है, दोनों अपने स्वयं के वीएम का उपयोग करते हैं। जावा प्रोग्रामिंग भाषा के रूप में प्रयोग किया जाता है। जावा बाइटकोड को मंच पर चलाने से पहले उचित देशी वीएम प्रारूप में परिवर्तित किया जाना चाहिए।)

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

इसका मतलब है कि वास्तव में पोर्टेबल होने के लिए आपको सबसे कम आम denominator को लिखना है, जिसका अर्थ है हैशटेबल और वेक्टर जैसे पुराने शैली के वर्गों का उपयोग करना, जेनेरिक नहीं, अपने स्वयं के enums रोलिंग (जैसा कि पहले में प्रभावी जावा का संस्करण) और इसी तरह।

या आप ब्लैकबेरी के लिए दो पुस्तकालयों, एंड्रॉइड के लिए एक आधुनिक संस्करण और एक स्ट्रिप-डाउन संस्करण (केवल आपको आवश्यक सामान के साथ) का निर्माण करते हैं।

यह कहना मुश्किल है कि आपके लिए क्या सही है।

4

यह मुश्किल होने की संभावना है:

  • आप पहले से ही पता लगा लिया है के रूप में, यूआई कोड प्रत्येक मंच के लिए अलग होना होगा।
  • जावा एसई/एंड्रॉइड और जावा एमई-आधारित प्लेटफॉर्म के बीच प्रमुख अंतर हैं। उदाहरण के लिए, एमई में संग्रह ढांचे, या java.io या java.nio स्टैक्स नहीं हैं।

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

0

ब्लैकबेरी और एंड्रॉइड के लिए साझा लाइब्रेरी बनाना बहुत मुश्किल होगा। यदि आप सरल विधि चाहते हैं, तो अपना ऐप वेब ऐप के रूप में बनाएं।

phonegap का उपयोग कर jQtouch

2

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

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

यह संभावना है कि आप सबसे कम आम denominator डिवाइस (खांसी ब्लैकबेरी) का समर्थन करना समाप्त कर देंगे, और एंड्रॉइड पर अधिक व्यापक जावा कार्यान्वयन की अतिरिक्त सुविधाओं को छोड़कर।

दुर्भाग्य से उत्तर प्रयोग में से एक होगा। इसे आजमाएं और देखें कि क्या होता है।

1

लेख Porting Android code to BlackBerry में दो प्लेटफार्मों के बीच साझा कोड के साथ काम करने के तरीके के बारे में कुछ अच्छी जानकारी है।