导出的服务不需要许可:这是什么意思?


143

我创建了一个通过AIDL与其他应用程序绑定的服务,并将其添加到清单中,如下所示:

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

IService是AIDL接口。

这样,Eclipse会向我显示警告“ 导出的服务不需要许可”。如果删除intent-filter,警告会消失,但是显然应用程序无法绑定到该服务。

此警告是什么意思?


31
这意味着用户在手机上拥有的其他(任意)应用程序可以绑定到您的应用程序,Service并调用通过您的AIDL界面公开的任意方法。
詹斯(Jens)

25
在您的AndroidManifest.xml中创建一个新的<permission>,并将其名称用作声明的android:permission属性<service>。或者只是忽略警告-服务打算做什么?如果您将服务保持在“内部”状态,可以轻松进行设置android:exported="false"<service>
Jens

3
然后要么忽略警告,要么添加<permission>;如果它们都是使用相同证书签名的自己的应用程序,则使用“签名”;否则,请使用“正常”签名。
詹斯(Jens)

3
您已经在使用(发布)证书对应用程序进行签名-签名保护会检查请求许可的应用程序是否与定义许可的应用程序具有相同的签名。
詹斯(Jens)

2
@Jens谢谢...这对我有所帮助。...顺便说一句,您可以添加您的评论作为答案。让enzom83接受它。
Vijay C

Answers:


128

将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>

看到这个文件


56

如果要将活动使用限制为自己的应用程序,则应将其添加exported=false到活动的清单语句中。

如果要允许其他应用程序使用它(明确地通过其类名,或者最好是将意图与数据类型或操作一起使用),则有两种选择:

  • 使用权限限制那些应用程序
  • 允许所有应用程序使用它,然后可以将其添加tools:ignore="ExportedActivity"到活动的清单语句中。

-

相同的推理适用于的服务,tools:ignore="ExportedService"以及的内容提供商tools:ignore="ExportedContentProvider"


8
这对我有用,谢谢!但是,请注意,这需要在清单文件的顶部添加 xmlns声明:xmlns:tools="http://schemas.android.com/tools"
Luis A. Florit 2012年

谢谢,它是由Eclipse自动添加的。对于其他IDE用户来说,这是一个很好的补充。
Snicolas 2012年

我使用的是Eclipse 4.2.1,它没有添加它,却给出了一个错误(至少使用默认配置?)。它只是说:The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound,并且没有选择解决此问题。
路易斯·弗洛里特

如果删除tools:foo = bar语句,它将添加它,然后在出现错误/警告时,右键单击并使用快速修复程序添加tools语句。
Snicolas 2012年

1
特殊情况是SyncService,应将其导出,但您只希望系统使用它。对于SyncService或AuthenticatorService,请添加android:permission =“ signature”
Entreco,2015年

4

正如Jens所说,“这意味着用户在手机上拥有的其他(任意)应用程序可以绑定到您的服务并调用通过您的AIDL界面公开的任何他们喜欢的方法。”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.