AndroidManifest.xml中的活动名称是否需要以点开头?

Sur*_*esh 30 android

是否需要在清单文件中使用点('.')启动活动名称.例如,活动ContactManager以'.'开头.

<activity android:name=".ContactManager" android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)

活动的地方ContactAdder没有点

<activity android:name="ContactAdder" android:label="@string/addContactTitle">
Run Code Online (Sandbox Code Playgroud)

在ContactManager示例的清单文件中http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html

更新:如果活动名称以.开头.它被附加到包名称以成为完全限定名称,但如果它不以'.'开头会发生什么.

Ces*_*arB 36

我也很好奇,并在Android源代码中寻找它.

platform/frameworks/basetools/aapt/Resource.cpp文件库中找到了似乎是存储库中的相关代码.相关功能fullyQualifyClassName称为massageManifest.

它应用的规则在fullyQualifyClassName函数的注释块中解释:

// asdf     --> package.asdf
// .asdf  .a.b  --> package.asdf package.a.b
// asdf.adsf --> asdf.asdf
Run Code Online (Sandbox Code Playgroud)

解释这条规则,我们有:

  1. 如果名称以点开头,则始终在其前面加上包.
  2. 如果名称在其他任何地方都有一个点,请不要为它添加前缀.
  3. 如果名称根本没有点,则也将其作为包的前缀.

所以,回答你的问题:只要在其他任何地方都没有点,两种写活动名称的方式应该具有相同的效果.


另外,该massageManifest函数显示了应用此规则的位置:

  • application元素中,在namebackupAgent属性上.
  • activity,service,receiver,provider,和activity-alias元素,在name属性.
  • activity-alias元素中,在targetActivity属性上.


jay*_*won 15

Android开发指南<活动>参考:

实现活动的类的名称,Activity的子类.属性值应该是完全限定的类名(例如,"com.example.project.ExtracurricularActivity").但是,作为简写,如果名称的第一个字符是句点(例如".ExtracurricularActivity"),则它将附加到元素中指定的包名称.没有默认值.必须指定名称.