导出的服务不需要权限:这意味着什么



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

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

其中 IService 是 AIDL 接口。

通过这种方式,Eclipse 向我显示警告"导出的服务不需要权限"。如果我删除intent-filter,警告会消失,但显然应用程序无法绑定到服务。

此警告是什么意思?

当我将 SDK 更新到版本 20 时,我遇到了同样的问题。我删除了它,添加了android:export属性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添加到活动的清单语句中。

如果要允许其他应用程序使用它(显式通过其类名,或者更好的是,通过将 Intent 与数据类型或操作一起使用),则有两种选择:

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

--

同样的理由也适用于具有tools:ignore="ExportedService"的服务,以及具有tools:ignore="ExportedContentProvider"的内容提供商。

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

最新更新