AndroidManifest.xml中的活动名称是否需要以点开头?
是否需要在清单文件中以点('.')开头活动名称。?例如活动 ContactManager以“.”开头AndroidManifest.xml中的活动名称是否需要以点开头?,android,Android,是否需要在清单文件中以点('.')开头活动名称。?例如活动 ContactManager以“.”开头 <activity android:name=".ContactManager" android:label="@string/app_name"> 更新:如果活动名称以开头。它被附加到包名后成为完全限定名,但如果它不是以“.”开头,会发生什么情况 实现的类的名称 活动,活动的一个子类。 属性值应该是完全相同的 限定类名称(例如, “com.example.project.课外活
<activity android:name=".ContactManager" android:label="@string/app_name">
更新:如果活动名称以开头。它被附加到包名后成为完全限定名,但如果它不是以“.”开头,会发生什么情况
实现的类的名称
活动,活动的一个子类。
属性值应该是完全相同的
限定类名称(例如,
“com.example.project.课外活动”)。
然而,简而言之,如果
名称的字符是句点(用于
例如,“课外活动”),
它被附加到包名称之后
在元素中指定。
没有默认设置。名称必须是
指定的
最近我了解了Android中的应用程序包概念以及这个问题的答案,我想我应该分享一下
如果应用程序包(在清单中指定)与存在活动的java包相同,则不需要在清单中为活动指定完整的包名。如果应用程序包名称与java包名称不同,则活动名称应与包名称一起填写
这篇博客文章提供了android中应用程序包和java包的相关信息
我也很好奇,于是在Android源代码中寻找它
我在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
在解释这一规则时,我们有:
如果名称以点开头,请始终在其前面加上程序包前缀
如果名称在其他地方有一个点,请不要在其前面加前缀
如果名称根本没有点,也要在其前面加上包的前缀
因此,为了回答您的问题:只要其他地方没有点,两种写活动名称的方法应该具有相同的效果
另外,massageManifest
功能会显示应用此规则的位置:
- 在
应用程序
元素中,在名称
和备份代理
属性上
- 在
活动
、服务
、接收者
、提供者
和活动别名
元素中,在名称
属性上
- 在
activity alias
元素中,在targetActivity
属性上
可能的副本
// asdf --> package.asdf
// .asdf .a.b --> package.asdf package.a.b
// asdf.adsf --> asdf.asdf