Android 11以下では、AndroidManifestにActivity、Service、またはBroadcast receiverを宣言するとき、 android:exported
を明示的に宣言していない。
デフォルトは exported=true
あるので、外部に公開したくない場合にのみ、exported=false
に宣言するれました。
<activity android:name="com.example.app.backgroundService">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</activity>
Android 12の変更:エクスポートされた明示的な宣言
Android 12デバイスからSDK API 31(android 12)をTarget sdkに設定したアプリは、 intent-filter
を宣言したActivityなどのComponentにexported
を明示的に宣言する必要があります。
そうでなければ、次のようなエラーが発生し、インストールが失敗します。
Targeting S+ (version 10000 and above) requires that an explicit value for
android:exported be defined when intent filters are present
The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
SDK API 31をターゲットとするアプリでも、
intent-filter
がないComponentはexported宣言を省略することができます。
次のように明示的にexportedを宣言する必要があります。
<service android:name="com.example.app.backgroundService"
android:exported="false">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
intent-filter
は、外部にアプリのComponentを公開するための方法の一つです。暗黙的インテントのリジョルビングを介して、私のアプリのComponentが実行される可能性があるからです。
一方、私のアプリの内部でのみ、暗黙的インテントにComponentを実行させるための目的で使われる場合も多いが、exportedを設定していない外部に公開され、このため、暗黙的インテントのリジョルビングに影響を与える可能性があります。
Googleはこのような問題を減らそうと、明示的にexportedを宣言するようにアプリのインストールで制限を置いたものです。
Related Posts
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - adbコマンドでActivity実行
- アンドロイド - MediaStoreにメディアファイルを保存する方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android11 - Storage(ストレージ)の変更まとめ
- Jetpack Compose - RowとColumn
- Android 13 - 細かいメディアファイルの権限
- Android 13でNotification権限をリクエスト、通知を表示する
- エラー解決:android gradle plugin requires java 11 to run. you are currently using java 1.8.
- Query method parameters should either be a type that can be converted into a database column or a List
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - adbコマンドで特定のパッケージのプロセスの終了
- Android - adb push、pullでファイルのコピー、ダウンロード
- Android - adbコマンドでsettings value確認、変更、
- Android 12 - IntentFilterのexported明示的な宣言
- Android - adb logcatコマンドでログ出力
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - Foreground Service実行
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - アプリの権限を確認(Permission check)
- Android - adbで実行中のプロセス、スレッドリスト及びメモリ情報の確認
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Cleartext HTTP ... not permitted例外解決方法
- Androidのビルドエラー - Calls to Java default methods are prohibited in JVM target 1.6
- アンドロイド - Assetsでファイルを読み取る方法
- アンドロイドのさまざまなNotification種類と実装方法
- アンドロイド - INSTALL_FAILED_TEST_ONLYエラー解決方法
- Android EspressoのCustom Matcher実装方法
- Android Espressoを使用してUIをテストする方法(3)
- アンドロイド - CTS hostsideをgradleで構築する方法
- Androidのアプリのデータフォルダーのパスと内部/外部ストレージ説明
- アンドロイド - 最初のApp作成
- Androidをインストールする方法(Windows)