实施Android身份验证器通常涉及两项服务 - 用于返回身份验证器的身份验证服务,以及提供同步适配器的同步服务。此问题专门针对身份验证服务,但在most examples 中,android:exported="true"
中的{/ 1>}属性都提供了<{1}}属性,例如:
AndroidManifest.xml
从身份验证服务中删除属性似乎没有效果(经过测试的Froyo,Gingerbread) - 身份验证代码继续正常工作 - 标志实际上是否必要?
答案 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
属性,无论您是否导出应用程序的任何组件。