studio permission permisos internet exported example editar androidmanifest activity android android-activity warnings android-manifest android-service

permission - permisos android manifest



Deshágase de la advertencia "El servicio exportado no requiere permiso" (3)

Con respecto a este problema, ya existe un error creado en el proyecto de Android sobre esta advertencia usando "Sync Adapter": https://code.google.com/p/android/issues/detail?id=37280 pero sigue siendo un error de Open.

Estoy buscando una solución para deshacerme de la advertencia. No entiendo por qué aparece. Eché un vistazo a un ejemplo de SDK donde no aparece ninguna advertencia.

Al principio aquí está mi manifiesto donde recibo la advertencia El servicio exportado no requiere permiso :

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

Mientras que SampleSyncAdapter del Android SDK tiene este manifiesto:

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

Pero no hay advertencia. ¿Por qué diablos recibo una advertencia? Bueno, yo uso el Tema Theme.Sherlock para el uso de ActionBarSherlock . Pero no puedo imaginar que esto cause el error.


La advertencia le indica que ha exportado (es decir, hecho público) un servicio sin asegurarlo con un permiso. Esto hace que su servicio esté disponible para cualquier otra aplicación sin restricciones. Ver el servicio exportado no requiere permiso: ¿qué significa?

Si su servicio no necesita estar disponible para otras aplicaciones, no necesita exportarlo. Configurar explícitamente android:exported="false" eliminará la advertencia.

Nota: El valor predeterminado para android:exported es true si ha proporcionado un filtro de intención.


Necesita agregar un requisito de permiso para su servicio. El que necesita es android.permission.ACCOUNT_MANAGER . Solo se puede acceder a su autenticador a través del administrador.