2011-11-24 5 views
5

एंड्रॉयड documentation मुझसे कहता है कि मैं "पैकेज नाम", जो कुछ भी है कि इसका मतलब का उपयोग करके एक और पैकेज से एक तार का उपयोग कर सकते हैं:Android में XML का उपयोग करके लाइब्रेरी में किसी अन्य पैकेज से स्ट्रिंग का संदर्भ कैसे लें?

@[<package_name>:]<resource_type>/<resource_name> 

तो मेरी प्रकट में मैं एक स्ट्रिंग है कि मैं रखा है उपयोग करना चाहते

<activity 
     android:label="@com.globalmentor.android:string/app_applicationlistactivity_label" 
     android:name="com.globalmentor.android.app.ApplicationListActivity" > 
    </activity> 

कि यहां तक ​​कि संकलन नहीं करता है: एक अलग पुस्तकालय परियोजना में, com.globalmentor.android package में --- कि जहाँ मेरे R वर्ग, है सब के बाद है। लेकिन यह करता है:

<activity 
     android:label="@string/app_applicationlistactivity_label" 
     android:name="com.globalmentor.android.app.ApplicationListActivity" > 
    </activity> 

क्यों? Android दस्तावेज़ का अर्थ क्या है जो यह "package_name" के बारे में बात करता है? पहला उदाहरण क्यों काम नहीं करता है, और दूसरा उदाहरण क्यों काम करता है? मैं नहीं चाहता कि मेरे सभी संसाधन नाम उसी R फ़ाइल में विलय हो जाएं --- मैं उन्हें संकुल में विभाजित करना चाहता हूं, जैसे मैंने उन्हें लिखा था।

उत्तर

3

संक्षेप में: पैकेज नाम उपसर्ग साझा पुस्तकालयों के लिए है, न कि आपके एपीके के लिए।

प्रलेखन पढ़ता है:

संदर्भ के लिए एक प्रणाली संसाधन, अपने पैकेज का नाम

यह बाहरी साझा पुस्तकालयों (और उनके संसाधन) के लिए मेल खाती है, आपके आवेदन को शामिल करने की आवश्यकता होगी के खिलाफ जुड़ा हुआ है (उदाहरण के लिए नक्शे)। उनके पास अपनी खुद की आर कक्षा है, जो आपके आवेदन के साथ विलय नहीं हुई है।

ये सभी मानक एंड्रॉइड पैकेज और साझा पुस्तकालय हैं जिनका आपने एंड्रॉइड मेनिफेस्ट के अनुभाग में उल्लेख किया है।

निकोले ने बताया कि सभी ऐप संसाधन विलय हो गए हैं, यही कारण है कि अधिकांश पुस्तकालय परियोजनाएं उनके संसाधन नामों के लिए abs__ जैसे उपसर्ग का उपयोग करती हैं।

अतिरिक्त जानकारी के लिए Library projects doc देखें।

1

चाहे आप इसे पसंद करते हैं या नहीं, लाइब्रेरी प्रोजेक्ट संसाधन ऐप प्रोजेक्ट संसाधनों में विलय कर रहे हैं, ऐप प्रोजेक्ट से लाइब्रेरी प्रोजेक्ट्स से ओवरराइड करने वाले ऐप प्रोजेक्ट से समान नाम वाले संसाधन। ऐप प्रोजेक्ट में आरजेवा फ़ाइल को पुष्टि करने के लिए देखें।

आप @android:string/foo ('एंड्रॉइड' पैकेज) का उपयोग कर सार्वजनिक रूप से निर्यात किए गए ढांचे संसाधनों तक पहुंच सकते हैं, लेकिन मुझे नहीं लगता कि आप इस तरह की लाइब्रेरी प्रोजेक्ट से संसाधन निर्यात कर सकते हैं (अभी तक)।

+1

गंभीरता से? 'Com.myapp.R' और' com.library.R' होने का क्या मतलब है यदि सभी नाम अभी भी संघर्ष करते हैं? इसलिए मुझे 'com.example.foo.R.id.bar' के बजाय 'com.example.foo.R.id.com_example_foo_bar' का उपयोग करना होगा, जब वे विलय होने पर नामों को झटके से रखने के लिए रखें? कैसे मूर्ख। –

+2

तो अभी भी कोई जानकारी नहीं है कि जब दस्तावेज़ "package_name" कहता है तो दस्तावेज़ीकरण का अर्थ क्या है (मूल प्रश्न देखें)? –

2

क्यों?

क्योंकि आपने अपनी प्रोजेक्ट में उस लाइब्रेरी प्रोजेक्ट को जोड़ा है, इसलिए एंड्रॉइड संसाधनों को विलीन करता है, इसलिए आखिरी प्रोजेक्ट जो नाम "जीत" बनता है। इस कारण से संसाधनों को उपसर्ग करना एक अच्छा विचार है। इस मामले में, "package_name" का उपयोग नहीं किया जा सकता क्योंकि आपके पास अपने संसाधनों में वे संसाधन हैं। मुझे कल्पना है कि यह आपका मामला है क्योंकि यह पैकेज नाम के बिना संकलित करता है।

यदि आपके पास उस प्रोजेक्ट में उस लाइब्रेरी प्रोजेक्ट को शामिल नहीं किया गया है, तो साझा यूज़र आईडी का उपयोग करने का एक संभावित समाधान है।

स्रोत: http://developer.android.com/tools/projects/index.html

विकास विचार

आप अपने पुस्तकालय परियोजना और निर्भर अनुप्रयोगों के विकास के रूप में, बिंदुओं को ध्यान में रखने के नीचे सूचीबद्ध:

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

नाम com.globalmentor.android.app_applicationlistactivity_lab के रूप में अपने पैकेज में अपने संसाधन और न सिर्फ app_applicationlistactivity_lab।

<?xml version="1.0" encoding="utf-8"?> <resources> .... <string name="com.globalmentor.android.app_applicationlistactivity_lab">...</string>
.... </resources>

तो फिर तुम यह एक्सएमएल से के रूप में

"@string/com.globalmentor.android.app_applicationlistactivity_lab"

और प्रोग्राम के रूप में द्वारा

getResources().getString(R.string.com_globalmentor_android_app_applicationlistactivity_lab);

संघर्ष के बिना उपयोग कर सकते हैं।

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