¿Es realmente necesario android:exported="true" para un servicio de autenticación?


Generalmente hay dos servicios involucrados en la implementación de un autenticador Android: el servicio de autenticación para devolver un autenticador y el servicio de sincronización que proporciona un adaptador de sincronización. Esta pregunta es específicamente sobre el servicio de autenticación, aunque en la mayoría de los ejemplos ambos servicios reciben el atributo android:exported="true" en el AndroidManifest.xml, por ejemplo:

<service
    android:name=".authenticator.AuthenticationService"
    android:exported="true">
    <intent-filter>
        <action
            android:name="android.accounts.AccountAuthenticator" />
    </intent-filter>
    <meta-data
        android:name="android.accounts.AccountAuthenticator"
        android:resource="@xml/authenticator" />
</service>

Eliminar el atributo del servicio de autenticación parece no tener ningún efecto (Froyo probado, Gingerbread) - el código de autenticación sigue funcionando bien-así que es la bandera realmente necesario?

Author: Roberto Tyley, 2012-02-14

2 answers

Ok, para responder a esto yo mismo leyendo los documentos, la documentación para el atributo exported dice:

El valor predeterminado depende de si el servicio contiene intent filtro. La ausencia de filtros significa que solo se puede invocar especificando su nombre de clase exacto. Esto implica que el servicio es destinado solo para uso interno de aplicación (ya que otros no conocer el nombre de la clase). Así que en este caso, el valor predeterminado es "false". Por el otro mano, la presencia de al menos un filtro implica que el servicio está diseñado para uso externo, por lo que el valor predeterminado es "verdadero".

Todos los servicios de autenticación tienen un filtro de intent-los documentos para AbstractAccountAuthenticator dicen:

Para ser un autenticador uno debe ... escribir un servicio que devuelve el resultado de getIBinder () en el onBind (android.contenido.Intent) cuando se invoca con una intención con acción ACTION_AUTHENTICATOR_INTENT.

Esto requiere un filtro de intents, por lo tanto el valor predeterminado de exported para el servicio es true. Así que la respuesta a esta pregunta es "No, el atributo es no necesario - porque es verdadero por defecto".

 37
Author: Roberto Tyley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-14 09:59:55

Aunque no es realmente necesario, esto parece crear cierta confusión. Es por eso que Google recomienda a

Siempre establezca el atributo android:exported explícitamente, independientemente de si exporta o no cualquiera de los componentes de su aplicación.

En sus directrices de calidad de la aplicación principal.

 0
Author: serv-inc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-08 14:16:11