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

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

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

Где IService – это интерфейс AIDL.

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

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

Solutions Collecting From Web of "Экспортированная служба не требует разрешения: что это значит?"

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

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

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