2010-08-31 66 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属性上。