149

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

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

其中 IService 是 AIDL 接口。

这样,Eclipse 向我显示警告Exported service does not require permission。如果我删除intent-filter,警告消失,但显然应用程序无法绑定到服务。

这个警告是什么意思?

4

3 回答 3

134

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

请参阅此文档

于 2012-08-04T06:04:59.970 回答
60

如果您想将 Activity 的使用限制在您自己的应用程序中,那么您应该添加exported=false到您的 Activity 的清单语句中。

如果您想允许其他应用程序使用它(明确地通过其类名,或者更好的是,通过使用具有数据类型或操作的意图),那么您有两种选择:

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

--

同样的推理也适用于服务tools:ignore="ExportedService"和内容提供商tools:ignore="ExportedContentProvider"

于 2012-08-31T14:23:28.560 回答
4

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

于 2012-07-26T03:55:31.333 回答