【Android】android:exported 属性とは?
android:exported
アプリのService
Activity
Provider
Receiver
を、外部アプリに公開するかどうか設定する属性。
どこに設定するのか
AndroidManifest.xml
の<service>
<activity>
<provider>
<receiver>
タグに記述する。
今回は<service>
と<activity>
だけ調べてみた。
service
タグの場合
外部アプリが自身のアプリのService
を呼び出せるか、やりとり出来るかを指定する。
true
は「許可」、false
なら「許可しない」。
false
の場合、同じアプリのコンポーネントまたは同じユーザーIDを持つアプリのみが、Service
を開始・バインドすることが出来る。
exported
のデフォルト値は、service
タグ内に<intent-filter>
が記述されているかどうかで変わる。
記述されていない場合
デフォルト値はfalse
。
<intent-filter>
がない場合「Serviceの正確なクラス名がないと呼び出せない = 外部アプリがクラス名を知ることはない」ので、自身のアプリ内でのみ呼び出すことが出来る。
記述されている場合
1つでも<intent-filter>
が存在すれば、デフォルト値はtrue
になる。
activity
タグの場合
外部アプリが自身のアプリのActivityを起動出来るかを指定できる。
Service
同様true
なら許可、false
なら許可しない。
false
のときは、同アプリのコンポーネまたは同じユーザーIDのアプリからのみ起動できる。
<intent-filter>
を使っているときは、exported
をfalse
にしない
<intent-filter>
を設定した状態でandroid:exported=false
にしてしまうと、ActivityNotFoundException
がスローされてしまう。
<intent-filter>
がない場合
デフォルト値はfalse
。
android:exported=true
を設定すると、正確なクラス名を知っているアプリから呼び出すことが出来るようになる。
ただ、暗黙的インテントでは呼び出すことは出来ない。
Discussion