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

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

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

其中 IService 是 AIDL 接口。

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

这个警告是什么意思?

63938 次浏览

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

我有同样的问题,当我 更新 SDK到版本 20。我删除它添加 出口属性 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"的内容提供者。