android:exported =“true”对于身份验证服务真的有必要吗?

时间:2012-02-14 09:47:12

标签: android authentication android-manifest

实施Android身份验证器通常涉及两项服务 - 用于返回身份验证器的身份验证服务,以及提供同步适配器的同步服务。此问题专门针对身份验证服务,但在most examples 中,android:exported="true"中的{/ 1>}属性都提供了<{1}}属性,例如:

AndroidManifest.xml

从身份验证服务中删除属性似乎没有效果(经过测试的Froyo,Gingerbread) - 身份验证代码继续正常工作 - 标志实际上是否必要?

2 个答案:

答案 0 :(得分:37)

好的,要通过阅读文档自行回答,exported属性的documentation说:

  

默认值取决于服务是否包含intent   过滤器。没有任何过滤器意味着它只能被调用   通过指定其确切的类名。这意味着服务是   仅供应用程序内部使用(因为其他人不会   知道班级名称)。所以在这种情况下,默认值为“false”。   另一方面,至少一个过滤器的存在暗示了这一点   该服务旨在供外部使用,因此默认值为   “真”。

所有身份验证服务都有一个意图过滤器 - AbstractAccountAuthenticator的文档说:

  

要成为身份验证者,必须......编写一份服务   返回服务中getIBinder()的结果   使用intent with action调用onBind(android.content.Intent)   ACTION_AUTHENTICATOR_INTENT。

这需要一个intent过滤器,因此该服务的导出默认值为true。所以这个问题的答案是“不,属性必要 - 因为默认情况下它是真的”

答案 1 :(得分:1)

虽然实际上并不需要,但是这似乎造成了一些混乱。这就是Google recommends

的原因
  

始终显式设置android:exported属性,无论您是否导出应用程序的任何组件。

在他们的core app quality guidelines中。