エクスポートされたサービスは許可を必要としません:それはどういう意味ですか?


143

AIDLを介して他のアプリケーションによってバインドされるサービスを作成し、次のようにしてマニフェストに追加します。

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

ここで、IServiceはAIDLインターフェースです。

このように、Eclipseは「エクスポートされたサービスは許可を必要としない」という警告を表示します。を削除するintent-filterと警告は消えますが、アプリケーションは明らかにサービスにバインドできません。

この警告はどういう意味ですか?


31
それは、ユーザーが自分の電話に持っている他の(任意の)アプリケーションがあなたにバインドしService、AIDLインターフェースを通じて公開されている任意のメソッドを呼び出すことができることを意味します。
イェンス

25
AndroidManifest.xmlに新しい<permission>を作成し、その名前を宣言のandroid:permission属性として使用します<service>。または警告を無視してください-サービスは何をするつもりですか?サービスを「内部」に保つことで問題がなければ、設定android:exported="false"するだけではるかに簡単になります<service>
Jens

3
次に、警告を無視するか、<permission>を追加するか、それらすべてが同じ証明書で署名された独自のアプリケーションである場合は「signature」を使用します。それ以外の場合は「通常」で続行します。
イェンス

3
すでに(リリース)証明書を使用してアプリケーションに署名しています-署名保護は、権限を要求するアプリケーションが、権限を定義したアプリケーションと同じ署名であることを確認します。
イェンス

2
@ジェンズありがとう...それは私を助けてくれた...ところであなたは答えとしてコメントを追加することができます。enzom83にそれを受け入れさせます。
Vijay C

回答:


128

SDKをバージョン20更新したときにも同じ問題が発生しました。私はandroid:exportedプロパティを 追加してそれを削除しましandroid:exported="false"た:

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

このドキュメントを見る


56

アクティビティの使用を独自のアプリケーションに制限する場合はexported=false、アクティビティのマニフェストステートメントに追加する必要があります。

他のアプリケーションがそれを使用できるようにしたい場合は(明示的にクラス名を使用するか、データ型またはアクションでインテントを使用することにより)、2つの選択肢があります。

  • 権限を使用してそれらのアプリケーションを制限する
  • すべてのアプリケーションで使用できるようにしてtools:ignore="ExportedActivity"から、アクティビティのマニフェストステートメントに追加できます。

-

tools:ignore="ExportedService"とのコンテンツプロバイダーとのコンテンツプロバイダーにも同じ考え方が適用されますtools:ignore="ExportedContentProvider"


8
これでうまくいきました、ありがとう!! ただし、これはする必要があること、予告追加マニフェストファイルの先頭にxmlns宣言を:xmlns:tools="http://schemas.android.com/tools"
ルイス・A. Florit

ありがとう、Eclipseによって自動的に追加されました。これは、他のIDEユーザーにとって素晴らしい補完物です。
Snicolas

私はEclipse 4.2.1を使用していますが、追加されず、エラーが発生します(少なくともデフォルトの構成では?)。それはただ言う:The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound、そしてこれを修正するための選択肢は与えられない。
Luis A. Florit 2012年

tools:foo = barステートメントを削除すると追加されます。エラー/警告がある場合は、右クリックしてクイックフィックスを使用してtoolsステートメントを追加します。
Snicolas 2012年

1
特別なケースはSyncServiceです。これはエクスポートする必要がありますが、システムで使用するだけです。SyncServiceまたはAuthenticatorServiceの場合は、android:permission = "signature"を追加します
Entreco

4

以下のようイェンスは言った、「これは、ユーザーが自分の携帯電話に持っている他の(任意)アプリケーションを意味し、あなたのAIDLインタフェースを介して公開されているものの方法、彼らがしてください、あなたのサービスとのコールにバインドすることができます。」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.