31 votes

Se débarrasser de l'avertissement "Le service exporté ne nécessite pas d'autorisation"

Je suis à la recherche d'une solution pour se débarrasser de l'avertissement. Je ne comprends pas encore pourquoi il apparaît. J'ai pris un coup d'oeil à un SDK exemple où aucun message d'avertissement s'affiche.

Dans un premier temps ici est mon manifeste où je reçois l'avertissement Exporté service ne nécessite pas l'autorisation:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8"
              android:targetSdkVersion="15" />

    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock">
        <service
            android:name=".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>

        <activity
            android:name=".Test"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
...

Alors que le SampleSyncAdapter du SDK Android a ce manifeste:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.samplesync"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <!-- ... -->

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/label">
        <!-- The authenticator service -->
        <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>
    ...

Mais il n'y a pas d'avertissement. Pourquoi diable puis-je obtenir un avertissement? Eh bien, je utiliser le Thème.Sherlock thème pour l'utilisation de la ActionBarSherlock. Mais je ne peux pas imaginer que ce qui provoque l'erreur.

55voto

David Wasser Points 23169

L'avertissement est vous dire que vous avez exporté (ie: disponible au public) un service sans la fixer avec une autorisation. Cela permet à votre service à votre disposition pour toutes autres demandes, sans restriction. Voir Exporté service ne nécessite pas l'autorisation: ça veut dire quoi?

Si votre service n'a pas besoin d'être disponible pour les autres applications, vous n'avez pas besoin d'exporter. La définition explicite android:exported="false" va supprimer l'avertissement.

Remarque: La valeur par défaut de android:exported est true si vous avez fourni un filtre d'Intention.

2voto

Paul de Vrieze Points 3715

Vous devez ajouter une autorisation pour votre service. Celui dont vous avez besoin est android.permission.ACCOUNT_MANAGER . Votre authentificateur est uniquement accessible via le gestionnaire.

1voto

juancho Points 52

En ce qui concerne ce problème, il existe déjà un bogue créé dans le projet Android à propos de cet avertissement à l'aide de "Sync Adapter": https://code.google.com/p/android/issues/detail?id=37280 mais il s'agit toujours d'un bogue ouvert.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X