Ich habe einen Dienst erstellt, der über AIDL an andere Anwendungen gebunden ist, und füge ihn dem Manifest wie folgt hinzu:
<service android:name=".MyService">
<intent-filter>
<action android:name="org.example.android.myservicedemo.IService" />
</intent-filter>
</service>
Dabei ist IService die AIDL-Schnittstelle.
Auf diese Weise zeigt Eclipse mir die Warnung Exportierter Dienst erfordert keine Berechtigung . Wenn ich das entferne intent-filter
, verschwindet die Warnung, aber die Anwendungen können sich offensichtlich nicht an den Dienst binden.
Was bedeutet diese Warnung?
android
android-service
enzom83
quelle
quelle
Service
Dies bedeutet, dass andere (willkürliche) Anwendungen, die der Benutzer auf seinem Telefon hat, sich an Ihre binden und eine beliebige Methode aufrufen können, die über Ihre AIDL-Schnittstelle verfügbar gemacht wird.android:permission
Attribut Ihrer<service>
Deklaration. Oder ignorieren Sie einfach die Warnung - was soll der Dienst tun? Wenn Sie damit einverstanden sind, den Dienst "intern" zu halten, ist es viel einfacher, ihn einfachandroid:exported="false"
auf Ihren<service>
Antworten:
Ich hatte das gleiche Problem, als ich das SDK auf Version 20 aktualisierte . Ich habe es entfernt und Android hinzugefügt : exportierte Eigenschaft
android:exported="false"
wie folgt:Siehe dieses Dokument
quelle
Wenn Sie die Verwendung Ihrer Aktivität auf Ihre eigene Anwendung beschränken möchten, sollten
exported=false
Sie die Manifest-Anweisung Ihrer Aktivität ergänzen .Wenn Sie anderen Anwendungen erlauben möchten, es zu verwenden (explizit über den Klassennamen oder besser durch die Verwendung einer Absicht mit einem Datentyp oder einer Aktion), haben Sie zwei Möglichkeiten:
tools:ignore="ExportedActivity"
zur Manifest-Anweisung Ihrer Aktivität hinzu.- -
Gleiches gilt für einen Dienst mit
tools:ignore="ExportedService"
und Inhaltsanbieter mittools:ignore="ExportedContentProvider"
.quelle
xmlns:tools="http://schemas.android.com/tools"
The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound
, und es werden keine Auswahlmöglichkeiten gegeben, um dies zu beheben.Wie Jens sagte: "Dies bedeutet, dass andere (willkürliche) Anwendungen, die der Benutzer auf seinem Telefon hat, sich an Ihren Dienst binden und jede Methode aufrufen können, die über Ihre AIDL-Schnittstelle verfügbar gemacht wird."
quelle