2010-08-31 69 views
30

是否需要在清單文件中用點('。')開始活動名稱?例如活動 ContactManager以'。'開頭。AndroidManifest.xml中的活動名稱是否需要以點開頭?

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

,其中作爲活動ContactAdder是沒有點

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

中的ContactManager樣品清單文件http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html

更新:如果活動名稱開頭。它會附加到包名稱上以成爲完全限定名稱,但如果它不以「。」開頭會發生什麼情況。

+0

可能重複[什麼是註冊活動時的「點」)(http://stackoverflow.com/questions/4834122/whats-the-dot-for-when-registering-an-activity) – 2016-01-26 14:06:13

回答

15

Android Dev Guide < activity > reference

實現 活動,活動的子類的類的名稱。 該屬性值應該是一個全 限定類名(如, 「com.example.project.ExtracurricularActivity」)。 但是,如果名稱的第一個 字符是句點(例如, 示例,「.ExtracurricularActivity」), ,那麼它會附加到元素中指定的包名 。 沒有默認值。該名稱必須爲 指定。

3

最近我理解Android中的應用程序包概念和這個問題的答案,我想我應該分享它。

如果該應用程序包(在清單中指定)是相同的Java包中,活動存在,則它不要求在清單指定完整的包名稱爲活動。如果應用程序包名稱與java包名稱不同,則應使用包名稱填寫活動名稱。

此博客文章提供有關android中的應用程序包和java包的信息。

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

33

我好奇也去在Android源代碼,尋找它。

我發現在platform/frameworks/base存儲庫中的tools/aapt/Resource.cpp文件中似乎是相關的代碼。相關功能是fullyQualifyClassName,由massageManifest調用。

它適用的fullyQualifyClassName函數內的註釋塊解釋規則:

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

解釋這個規則,我們有:

  1. 如果名稱以一個點開始,一直前綴它與包裹。
  2. 如果名稱在其他地方有點,請不要加前綴。
  3. 如果名稱根本沒有點,也可以用包裝前綴。

所以,要回答你的問題:只要其他地方沒有點,編寫活動名稱的兩種方式應該具有相同的效果。


作爲一個額外的,所述massageManifest函數示出了其中應用這樣的規則:

  • application元件,在namebackupAgent屬性。
  • activityservicereceiverprovider,和activity-alias元素,在name屬性。
  • activity-alias元素中,在targetActivity屬性上。