🦔
【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>
が記述されているかどうかで変わる
記述されている場合
- 1つでも
<intent-filter>
が存在すれば、デフォルト値はtrue
になる
記述されていない場合
- デフォルト値は
false
-
<intent-filter>
がない場合「Serviceの正確なクラス名がないと呼び出せない = 外部アプリがクラス名を知ることはない」ので、自分のアプリ内でのみ呼び出すことが出来る
<activity>
タグの場合
外部アプリが自身のアプリのActivityを起動出来るかを指定できます。
true(許可) / false(許可しない)
-
false
のときは、同アプリのコンポーネまたは同じユーザーIDのアプリからのみ起動できる
<intent-filter>
を使っている場合
-
exported
をfalse
にしない -
<intent-filter>
を設定した状態でandroid:exported=false
にしてしまうと、ActivityNotFoundException
が throw されてしまう。
<intent-filter>
がない場合
- デフォルト値は
false
-
android:exported=true
を設定すると、正確なクラス名を知っているアプリから呼び出すことが出来るようになる - ただ、暗黙的インテントでは呼び出すことは出来ない。
Discussion