摆脱“导出服务不需要许可”的警告

我正在寻找一个解决scheme来摆脱这个警告。 我甚至不明白为什么会出现。 我看了一个没有警告的SDK例子。

起初,这里是我的清单,我得到的警告导出服务不需要权限

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

虽然Android SDK的SampleSyncAdapter有这样的清单:

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

但是没有警告。 为什么我会发出警告? 那么我使用Theme.Sherlock主题来使用ActionBarSherlock 。 但我无法想象这会导致错误。

警告告诉您,您已经导出(即:公开提供)服务,但未获得许可。 这使您的服务可用于任何其他应用程序没有限制。 请参阅导出的服务不需要权限:这是什么意思?

如果您的服务不需要提供给其他应用程序,则不需要导出它。 显式设置android:exported="false"会删除警告。

注意:如果您提供了一个Intentfilter,则android:exported的默认值为true

您需要为您的服务添加权限要求。 你需要的是android.permission.ACCOUNT_MANAGER 。 您的validation者只能通过经理访问。

关于这个问题,已经有一个在Android项目中使用“同步适配器”创build了这个警告的错误: https : //code.google.com/p/android/issues/detail?id=37280,但它仍然是一个开放的错误。