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

enz*_*m83 136 android android-service

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

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

其中IService是AIDL接口.

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

这个警告意味着什么?

Nam*_* Vu 122

当我将SDK更新到版本20时,我遇到了同样的问题.我删除它添加android:exports属性, android:exported="false"如下所示:

<service android:name=".MyService"
    android:exported="false">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

看到这个文档


Sni*_*las 52

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

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

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

-

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

  • 这对我有用,谢谢!! 但是,请注意这需要在清单文件的顶部添加*xmlns声明:`xmlns:tools ="http://schemas.android.com/tools"` (8认同)

JD.*_*JD. 4

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