导出服务不需要许可:这是啥意思?
Posted
技术标签:
【中文标题】导出服务不需要许可:这是啥意思?【英文标题】:Exported service does not require permission: what does it mean?导出服务不需要许可:这是什么意思? 【发布时间】:2012-05-15 11:48:11 【问题描述】:我创建了一个通过AIDL被其他应用绑定的服务,我把它添加到manifest中如下:
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
其中 IService 是 AIDL 接口。
这样,Eclipse 向我显示警告导出的服务不需要权限。如果我删除intent-filter
,警告就会消失,但显然应用程序无法绑定到服务。
这个警告是什么意思?
【问题讨论】:
这意味着用户在他的手机上拥有的其他(任意)应用程序可以绑定到您的Service
并调用通过您的 AIDL 接口公开的任何方法。
在您的 AndroidManifest.xml 中创建一个新的 <permission> 并将其名称用作您的 <service>
声明的 android:permission
属性。或者只是忽略警告 - 服务的目的是什么?如果您可以将服务保持为“内部”,那么只需在您的 <service>
上设置 android:exported="false"
会更容易
然后忽略警告或添加 当我将 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>
看到这个doc
【讨论】:
【参考方案2】:如果您想将 Activity 使用限制在您自己的应用程序中,则应将 exported=false
添加到您的 Activity 清单语句中。
如果您想允许其他应用程序使用它(明确地通过其类名,或者更好的是,通过使用具有数据类型或操作的意图),那么您有两种选择:
使用权限限制这些应用程序 允许所有应用程序使用它,然后您可以将tools:ignore="ExportedActivity"
添加到您的活动清单声明中。
--
同样的推理适用于服务,tools:ignore="ExportedService"
和内容提供者tools:ignore="ExportedContentProvider"
。
【讨论】:
这对我有用,谢谢!!但是,请注意,这需要在清单文件顶部添加 xmlns 声明:xmlns:tools="http://schemas.android.com/tools"
谢谢,它是由 Eclipse 自动添加的。这对其他 IDE 用户来说是一个很好的补充。
我使用 Eclipse 4.2.1,它没有添加它,给出一个错误(至少使用默认配置?)。它只是说:The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound
,并且没有提供解决此问题的选择。
如果你删除你的 tools:foo=bar 语句,它会添加它,然后当出现错误/警告时,右键单击并使用快速修复来添加 tools 语句。
特殊情况是SyncService,它应该被导出但你只希望系统使用它。对于 SyncService 或 AuthenticatorService 添加 android:permission="signature"【参考方案3】:
正如Jens 所说,“这意味着用户在他的手机上拥有的其他(任意)应用程序可以绑定到您的服务并调用通过您的 AIDL 接口公开的任何他们喜欢的方法。”
【讨论】:
以上是关于导出服务不需要许可:这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
arcgis10浮动许可是啥意思,安装浮动版本是否许多功能不能使用?如何破解单机版?