我创建了一个由其它应用程序通过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:出口属性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"
你的活动的清单声明。
-
同样reasonning适用于服务,用tools:ignore="ExportedService"
和内容提供商与tools:ignore="ExportedContentProvider"
。
正如延斯说,“这意味着其他(任意)应用程序的用户对自己的手机可以绑定到你的服务,并呼吁他们取悦任何方法是通过你的AIDL接口暴露出来。”