Le service exporté ne nécessite aucune autorisation: qu’est-ce que cela signifie?

J’ai créé un service lié par d’autres applications via AIDL et je l’ajoute au manifeste comme suit:

     

où IService est l’interface AIDL.

De cette façon, Eclipse me montre l’avertissement Le service exporté ne nécessite pas d’autorisation . Si je supprime le intent-filter , l’avertissement disparaît, mais les applications ne peuvent évidemment pas se lier au service.

Que signifie cet avertissement?

J’ai eu le même problème lorsque j’ai mis à jour SDK à la version 20 . Je l’ai enlevé en ajoutant Android: propriété exscope android:exported="false" comme ça:

      

Voir cette doc

Si vous souhaitez restreindre l’utilisation de votre activité à votre propre application, vous devez alors append exported=false à l’instruction manifeste de votre activité.

Si vous souhaitez autoriser d’autres applications à l’utiliser (explicitement via son nom de classe ou, mieux encore, en utilisant une intention avec un type de données ou une action), vous avez deux possibilités:

  • restreindre ces applications en utilisant une autorisation
  • permettre à toutes les applications de l’utiliser, vous pouvez alors append des tools:ignore="ExportedActivity" à l’instruction manifeste de votre activité.

Le même raisonnement s’applique à un service, avec des tools:ignore="ExportedService" et des fournisseurs de contenu avec des tools:ignore="ExportedContentProvider" .

Comme l’a dit Jens , «cela signifie que d’autres applications (arbitraires) que l’utilisateur a sur son téléphone peuvent se connecter à votre service et appeler la méthode qui leur plait, qui est exposée via votre interface AIDL».