🦔

【Android】android:exported 属性について

2021/03/02に公開

android:exportedは「アプリのServiceActivityProviderReceiverを外部アプリに公開するかどうか」を設定する属性です。

設定する場所

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>を使っている場合

  • exportedfalseにしない
  • <intent-filter>を設定した状態でandroid:exported=falseにしてしまうと、ActivityNotFoundExceptionが throw されてしまう。

<intent-filter>がない場合

  • デフォルト値はfalse
  • android:exported=trueを設定すると、正確なクラス名を知っているアプリから呼び出すことが出来るようになる
  • ただ、暗黙的インテントでは呼び出すことは出来ない。

Discussion