Android 导出的服务不需要权限:这意味着什么?
我通过AIDL创建了一个由其他应用程序绑定的服务,并将其添加到清单中,如下所示:Android 导出的服务不需要权限:这意味着什么?,android,android-service,Android,Android Service,我通过AIDL创建了一个由其他应用程序绑定的服务,并将其添加到清单中,如下所示: <service android:name=".MyService"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> 其中IService是
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
其中IService是AIDL接口
这样,Eclipse向我显示警告导出的服务不需要权限。如果我删除意图过滤器
,警告将消失,但显然应用程序无法绑定到服务
这个警告是什么意思?如前所述,“这意味着用户手机上的其他(任意)应用程序可以绑定到您的服务,并调用通过您的AIDL界面公开的任何方法。”我在将SDK更新为20版本时遇到了同样的问题。我删除了它,添加了android:exported属性
android:exported=“false”
如下:
<service android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
如果要将活动的使用限制在自己的应用程序中,则应将exported=false
添加到活动的清单语句中
如果您希望允许其他应用程序使用它(通过其类名显式地使用,或者更好地通过将意图与数据类型或操作一起使用),那么您有两个选择:
- 通过使用权限限制这些应用程序
- 允许所有应用程序使用它,然后可以将
tools:ignore=“ExportedActivity”
添加到活动的清单语句中
--
同样的推理也适用于带有tools:ignore=“ExportedService”
的服务和带有tools:ignore=“ExportedContentProvider”
的内容提供商,这意味着其他(任意)用户手机上的应用程序可以绑定到您的服务
,并调用通过AIDL界面公开的任何方法。在AndroidManifest.xml中创建一个新的应用程序,并将其名称用作
声明的安卓:权限
属性。或者忽略警告-服务打算做什么?如果您不介意将服务保留为“内部”,只需在
上设置android:exported=“false”
就可以轻松得多,然后忽略警告或添加一个,如果它们都是您自己的应用程序,则使用“签名”并使用相同的证书签名,否则只需使用“正常”即可。您已经在使用(版本)为您的应用程序签名的证书-签名保护检查请求权限的应用程序是否与定义权限的应用程序签名相同。@Jens谢谢……它帮助了我。。。。顺便说一句,你可以添加你的评论作为答案。让enzom83接受吧。这对我很有效,谢谢!!但是,请注意,这需要在清单文件的顶部添加一个xmlns声明:xmlns:tools=”http://schemas.android.com/tools“
谢谢,它是由Eclipse自动添加的。对于其他IDE用户来说,这是一个很好的补充。我使用Eclipse4.2.1,但它没有添加它,并给出了一个错误(至少对于默认配置?)。它只是说:与元素类型“activity”关联的属性“tools:ignore”的前缀“tools”未绑定
,并且没有给出修复此问题的选项。如果删除tools:foo=bar语句,它将添加它,然后当出现错误/警告时,右键单击并使用快速修复添加tools语句。特殊情况是SyncService,它应该导出,但您只希望系统使用它。对于SyncService或AuthenticatorService,添加android:permission=“signature”