Android:exported="true" est-il vraiment nécessaire pour un service d'authentification?

Il y a généralement deux services impliqués dans la mise en œuvre D'un authentificateur Android - le service D'authentification pour renvoyer un authentificateur, et le service de synchronisation qui fournit un adaptateur de synchronisation. Cette question est plus précisément sur le service d'Authentification, bien que dans la plupart des exemples les deux les android:exported="true" attribut dans le AndroidManifest.xml, par exemple:

<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>

La suppression de l'attribut du service D'authentification semble n'avoir aucun effet (testé Froyo, Gingerbread) - le code auth continue de fonctionner très bien-alors le drapeau est-il réellement nécessaire?

22
demandé sur Roberto Tyley 2012-02-14 13:47:11

2 réponses

Ok, pour y répondre moi-même en lisant les docs, la documentation pour l'attribut exported dit:

La valeur par défaut dépend si le service contient l'intention filtrer. L'absence de tout filtre signifie qu'il ne peut être invoqué que en spécifiant son nom de la classe. Cela implique que le service est destiné uniquement à l'application-Usage interne (puisque d'autres ne le feraient pas savoir le nom de la classe). Donc dans ce cas, la valeur par défaut est "false". Sur l'autre part, la présence d'au moins un filtre implique que le service est destiné à un usage externe, donc la valeur par défaut est "vrai".

Tous les services D'authentification ont un filtre d'intention - les documents pour AbstractAccountAuthenticator disent:

Pour être un authentificateur, il faut ... Ecrire un service qui renvoie le résultat de getIBinder() dans le onBind (android.contenu.Intent) lorsqu'il est invoqué avec une intention avec action ACTION_AUTHENTICATOR_INTENT.

Cela nécessite un filtre d'intention, par conséquent la valeur par défaut exportée pour le service est true. Donc, la réponse à cette question Est "Non, L'attribut est Pas nécessaire-parce que c'est vrai par défaut".

37
répondu Roberto Tyley 2012-02-14 09:59:55

Bien que cela ne soit pas réellement nécessaire, cela semble créer une certaine confusion. C'est pourquoi Google recommande à

Définissez toujours explicitement l'attribut android:exported, que vous exportiez ou non les composants de votre application.

Dans leurs directives de qualité de base app .

0
répondu serv-inc 2018-07-08 14:16:11