Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidManifest.xml中的活动名称是否需要以点开头?_Android - Fatal编程技术网

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

AndroidManifest.xml中的活动名称是否需要以点开头?,android,Android,是否需要在清单文件中以点('.')开头活动名称。?例如活动 ContactManager以“.”开头 <activity android:name=".ContactManager" android:label="@string/app_name"> 更新:如果活动名称以开头。它被附加到包名后成为完全限定名,但如果它不是以“.”开头,会发生什么情况 实现的类的名称 活动,活动的一个子类。 属性值应该是完全相同的 限定类名称(例如, “com.example.project.课外活

是否需要在清单文件中以点('.')开头活动名称。?例如活动 ContactManager以“.”开头

<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