Экспортированная служба не требует разрешения: что это значит?

Я создал службу, связанную с другими приложениями через AIDL, и добавлю ее в манифест следующим образом:

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

где IService - это интерфейс AIDL.

Таким образом, Eclipse покажет мне, что для экспортированного сервиса не требуется разрешение. Если я удалю intent-filter, предупреждение исчезнет, ​​но, очевидно, приложения не смогут привязываться к службе.

Что означает это предупреждение?

Ответ 1

У меня была такая же проблема, когда я обновил 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>

Смотрите doc

Ответ 2

Если вы хотите ограничить использование активности вашим собственным приложением, добавьте exported=false в свой манифест манифеста активности.

Если вы хотите разрешить другим приложениям использовать его (явно через его имя класса или, лучше, используя намерение с типом данных или действием), у вас есть два варианта:

  • ограничивать эти приложения с помощью разрешения
  • разрешить всем приложениям использовать его, затем вы можете добавить tools:ignore="ExportedActivity" в свой манифест манифеста активности.

-

То же рассуждение относится к сервису, tools:ignore="ExportedService" и контент-провайдеры tools:ignore="ExportedContentProvider".

Ответ 3

Как Jens сказал:" Это означает, что другие (произвольные) приложения, которые пользователь имеет на своем телефоне, могут привязываться к вашей службе и вызывать любой метод, который им нравится подвергается через интерфейс AIDL.