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.