2010-08-31 14 views
30

क्या इसे मैनिफेस्ट फ़ाइल में डॉट ('।') के साथ गतिविधि नाम शुरू करना आवश्यक है? उदाहरण के लिए गतिविधि संपर्क प्रबंधक '।' से शुरू होता हैAndroidManifest.xml में गतिविधि का नाम किसी डॉट से शुरू करने के लिए आवश्यक है?

<activity android:name=".ContactManager" android:label="@string/app_name"> 

जहां के रूप में गतिविधि ContactAdder ContactManager नमूने के मैनिफ़ेस्ट फ़ाइल में डॉट

<activity android:name="ContactAdder" android:label="@string/addContactTitle"> 

के बिना है http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html

अद्यतन: गतिविधि नाम के साथ शुरू होता है। इसे पूरी तरह से योग्य नाम बनने के लिए पैकेज नाम में जोड़ा गया है, लेकिन क्या होता है यदि यह '।' से शुरू नहीं होता है।

+0

संभावित डुप्लिकेट [गतिविधि को पंजीकृत करते समय "डॉट" क्या है] (http://stackoverflow.com/questions/4834122/whats-the-dot-for-when-registering-an-activity) –

उत्तर

15

Android Dev Guide < activity > reference से:

वर्ग कि गतिविधि, गतिविधि का एक उपवर्ग को लागू करता है का नाम है। विशेषता मान पूरी तरह से योग्य श्रेणी का नाम होना चाहिए (जैसे "com.example.project.ExtracurricularActivity")। हालांकि, एक शॉर्टेंड के रूप में, यदि नाम का पहला वर्ण एक अवधि है ( उदाहरण के लिए, "एक्स्ट्राक्रिक्युलर एक्टिविटी"), यह तत्व में निर्दिष्ट पैकेज नाम में जोड़ा गया है। कोई डिफ़ॉल्ट नहीं है। नाम निर्दिष्ट होना चाहिए।

3

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

यदि एप्लिकेशन पैकेज (मैनिफेस्ट में निर्दिष्ट) जावा पैकेज के समान है जिसमें गतिविधि मौजूद है तो गतिविधियों के लिए मैनिफेस्ट में पूर्ण पैकेज नाम निर्दिष्ट करने की आवश्यकता नहीं है। यदि जावा पैकेज नाम से एप्लिकेशन पैकेज का नाम अलग है तो गतिविधि का नाम पैकेज नाम से पूरा होना चाहिए।

यह ब्लॉग पोस्ट एंड्रॉइड में एप्लिकेशन पैकेज और जावा पैकेज के बारे में जानकारी देता है।

http://blog.javia.org/android-package-name/comment-page-1/#comment-14063

33

मैं भी उत्सुक हो गया, और एंड्रॉयड स्रोत कोड में की तलाश में चला गया।

मुझे tools/aapt/Resource.cpp फ़ाइल में platform/frameworks/base भंडार में प्रासंगिक कोड प्रतीत होता है। प्रासंगिक फ़ंक्शन fullyQualifyClassName है, जिसे massageManifest द्वारा बुलाया जाता है।

नियम यह लागू होता है fullyQualifyClassName समारोह के भीतर एक टिप्पणी ब्लॉक में समझाया गया है:

// asdf  --> package.asdf 
// .asdf .a.b --> package.asdf package.a.b 
// asdf.adsf --> asdf.asdf 

इस नियम को समझाते हुए, हमने: नाम एक बिंदु के साथ शुरू होता है

  1. हैं, तो हमेशा अवश्य लगा दें पैकेज के साथ।
  2. यदि नाम कहीं और एक बिंदु है, तो इसे उपसर्ग न करें।
  3. यदि नाम में कोई डॉट नहीं है, तो इसे पैकेज के साथ भी उपसर्ग करें।

तो, अपने प्रश्न का उत्तर देने के लिए: जब तक कोई और स्थान नहीं है, गतिविधि नाम लिखने के दोनों तरीकों का एक ही प्रभाव होना चाहिए।


एक अतिरिक्त के रूप में, massageManifest समारोह से पता चलता है, जहां इस नियम लागू किया जाता है:

  • application तत्व में, name और backupAgent विशेषताओं पर।
  • activity, service, receiver, provider में, और activity-alias तत्वों, name विशेषता पर।
  • activity-alias तत्व में targetActivity विशेषता पर।
संबंधित मुद्दे