【问题标题】:Do I HAVE to declare every activity in a manifest file?我必须在清单文件中声明每个活动吗?
【发布时间】:2013-12-12 00:20:37
【问题描述】:

我想创建一个 Activity 但不必在清单文件中声明它。这可能吗?在我所见的任何地方,似乎每个活动都必须在清单中声明,但我注意到一些活动,例如内置的 ChooserActivity,并没有在我的清单文件中声明。

【问题讨论】:

  • ChooserActivity 在另一个清单文件中声明并公开给您的应用程序。你不把它放在清单中的目标是什么,这可能有助于我回答你的问题。
  • Xamarin.Android 通过使用属性自动执行此操作(类似于 Java 中的注释)。或许人们也可以创建一种工具,在 Java 中也能做到这一点。

标签: android android-activity android-manifest


【解决方案1】:

简短回答:是的,应用程序中的每个 Activity 都必须在清单中声明。如 Android 文档中所述,清单的目的(除其他外)是:

它描述了应用程序的组件——活动、服务、广播接收器和内容提供者, 应用程序是由。它命名实现每个类的类 组件并发布它们的功能(例如, 他们可以处理的意图消息)。这些声明让 Android 系统知道组件是什么以及在什么条件下它们可以 启动。)

http://developer.android.com/guide/topics/manifest/manifest-intro.html#ifs

因此,您的应用程序中的任何 Activity 类必须在您的 Manifest 中定义。 Intents、Services 等也是如此,即使这些组件无法从您的应用程序外部访问。

至于ChooserActivity和你没有在代码中定义的任何其他Activity,它们将在另一个Manifest中有自己的定义。如果出于某种原因您决定在应用程序之外对现有 Activity 进行子类化,那么您也必须在 Manifest 中定义它。

【讨论】:

  • 对于刚接触 Android 的人来说,从设计的角度来看,这完全没有意义!您不能定义不在清单中的活动,也不能有不在代码中的清单条目,那么为什么编译器不能为您处理呢?将异常清单保留为默认配置,并让编译器“填写”其余部分!为什么让我们这样做? ...除非我的理解是错误的并且我遗漏了一些东西,在这种情况下,请分享以便我学习,因为现在的方式似乎是乏味和不必要的文书工作!
  • 注意,我显然指的是我在我的应用程序中定义的活动,而不是那些可在我的应用程序中使用的活动(即系统提供的活动等)。 ) 如果你已经定义了类,你有责任将它添加到清单中,并且清单仅适用于你定义的那些活动,而不是外部的,所以同样,为什么编译器不能推断出那些不需要显式配置?哎呀,添加一个“ImplicitActivity”来定义那些未指定的默认值。
  • 你的论点可能有一些优点。但是考虑到 1)他们有一个现有的工具链和操作系统版本来支持 2)您的项目或您导入的库中可能有活动/服务/广播接收器/等,您不希望应用程序启动/使用(例如,基本 Activity 或 AppCompatActivity) 3)我不确定这些组件的默认配置会有多大用处,因为每个组件通常都是自定义的,或者带有标题、图标、意图过滤器、主题、启动模式,元数据等 4) 可能还有其他参数或约束
  • 我知道这是一个旧答案,截至 2018 年,活动分为 ActivityAppCompatActivity。是否仍然需要在清单中声明这两种类型的 Activity 类,从而使当前的正确答案仍然适用于这种情况并有效?
  • @tom_mai78101 AppCompatActivity extends Activity,因此它仍然需要在清单中注册才能启动
【解决方案2】:

我想创建一个 Activity 但不必在清单文件中声明它。这可能吗?

不,抱歉。

我注意到一些活动,例如内置的选择器活动,没有在我的清单文件中声明

该活动不是您的应用程序的一部分。它是核心操作系统的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多