2010-02-09 15 views
6

मेरा एंड्रॉइड एप्लिकेशन क्लाइंट यूआई परत और एपीआई परत में विभाजित किया जा सकता है। मैं उन्हें अलग-अलग "एप्लिकेशन" के रूप में तैनात करना चाहता हूं ताकि एपीआई परत का पुन: उपयोग किया जा सके।एंड्रॉइड: "उपयोग-पुस्तकालय" का उपयोग कैसे करें?

ग्रहण में, मैं उन्हें 2 अलग एंड्रॉइड परियोजनाओं के रूप में लिखता हूं। क्लाइंट यूआई प्रोजेक्ट में, मैं एपीआई प्रोजेक्ट को अपने बिल्ड पथ (प्रोजेक्ट -> प्रोपरीज -> जावा बिल्ड पाथ -> प्रोजेक्ट्स) में घोषित करता हूं।

ग्रहण (मेरे वास्तविक जी 1 फोन पर) के माध्यम से क्लाइंट UI प्रोजेक्ट को तैनात करते समय, यह स्वचालित रूप से एपीआई प्रोजेक्ट (एपीके में पैक किया गया) को भी तैनात करता है।

हालांकि, जब ग्राहक यूआई ऐप्लिकेशन को लॉन्च करने, मैं इस त्रुटि को मारा:

Uncaught handler: thread main exiting due to uncaught exception 
java.lang.VerifyError: myapp.android.testuiclient.Main 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1472) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1097) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4203) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
    at dalvik.system.NativeStart.main(Native Method) 

चारों ओर देख रहे हैं, यह लगता है मैं यूआई ग्राहक के लिए मैनिफ़ेस्ट फ़ाइल में आवेदन के तहत उपयोग करता है-पुस्तकालय की घोषणा करनी चाहिए।

प्रश्न है, मुझे एंड्रॉइड के तहत क्या रखा जाना चाहिए: उपयोग-पुस्तकालय के लिए नाम? देव गाइड कहते हैं "पुस्तकालय का नाम" लेकिन पुस्तकालय का नाम क्या है? (मेरा मतलब है, मेरे एपीआई "एप्लिकेशन" में, मैंने कहीं भी लाइब्रेरी का नाम घोषित नहीं किया है।)

उत्तर

10

मुझे विश्वास नहीं है कि <uses-library> यहां प्रासंगिक है।

आपके विकल्प हैं:

  1. , अपने "पुस्तकालय" को लागू करें एक जार के रूप में संकलन समय पर अन्य परियोजनाओं में शामिल किया जाना। जब तक आपकी लाइब्रेरी संसाधनों को परिभाषित करने का प्रयास नहीं कर रही है, तब तक आप ठीक आकार में हैं। इसे सेट अप करने के नमूने के लिए मेरे github page पर सीडब्ल्यूएसी परियोजनाएं देखें।

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

  3. ContentProvider युक्त एक अलग एपीके के रूप में अपनी "लाइब्रेरी" को कार्यान्वित करें। अपने निर्माण पथ को मिश्रित करने का प्रयास न करें क्योंकि आप वर्तमान में ग्रहण में कर रहे हैं, बल्कि ContentProvider नियमों का पालन करें और ग्राहक को ContentResolver और परिभाषित उरी के माध्यम से प्रदाता तक पहुंचें। आपको अपने उपयोगकर्ताओं को एपीके दोनों स्थापित करने की व्यवस्था करने की भी आवश्यकता होगी।
+1

धन्यवाद! इसके रूप में, विकल्प 1 सबसे अधिक लागू है। मैं संदर्भ के लिए अपनी परियोजनाओं पर एक नज़र डालेगा। –

+0

हाय कॉमन्सवेयर, मैंने आपके सीडब्ल्यूएसी-कैश प्रोजेक्ट को देखा है। 1. मैं देख सकता हूं कि आप जेएआर बनाने और इकट्ठा करने के लिए चींटी build.xml का उपयोग करते हैं। उस जेएआर का उपयोग करने के लिए एक और प्रोजेक्ट के लिए, आप इसे ग्रहण में कैसे सेट करते हैं ताकि (ए) कोडिंग/संकलन समय पर निर्भरता हल हो जाए, और (बी), समय पर तैनात करने पर, वे एक एकल एपीके में तैनात हो जाते हैं और तैनात किए जाते हैं ? 2. मुझे लगता है कि सीडब्ल्यूएसी-कैश स्टैंडअलोन चलाने के लिए नहीं है (क्या मैं सही हूँ?)। उस स्थिति में, आपको अभी भी एक Android कार्रवाई और एक लांचर श्रेणी के साथ AndroidManifest.xml में एक गतिविधि को कॉन्फ़िगर करने की आवश्यकता क्यों है? क्या यह आवश्यक है? –

+0

सरल: मैं ग्रहण का उपयोग नहीं करता हूं। :-) सीडब्ल्यूएसी-कैश में एक नमूना डेमो गतिविधि है (यदि आप एपीके संकलित करते हैं), लेकिन इसकी प्राथमिक भूमिका 'चींटी जार' लक्ष्य है जो केवल वास्तविक कैशिंग कोड के जेएआर को बनाने के लिए है जो अन्य परियोजनाओं का उपयोग कर सकती है। 'चींटी जार' कार्य डेमो कोड को छोड़ देता है ('डीमो' उप-पैकेज में अलग)। – CommonsWare

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