Android 13 デベロッパー プレビューへようこそ。フィードバックをお送りいただき、Android 13 をさらに優れたリリースにするためにご協力ください。

動作の変更点: Android 13 以上をターゲットとするアプリ

これまでのリリースと同様、Android 13 には、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、Android 13 以上をターゲットとするアプリにのみ適用されます。アプリが Android 13 以上をターゲットとする場合は、必要に応じてアプリを変更し、下記の動作に適切に対応できるようにしてください。

Android 13 で動作するすべてのアプリに影響する動作変更のリストも必ずご確認ください。

プライバシー

通知権限がフォアグラウンド サービスの表示に影響する

ユーザーが通知権限を拒否した場合、関連するフォアグラウンド サービスに関する通知はフォアグラウンド サービス(FGS)タスク マネージャーには引き続き表示されますが、通知ドロワーには表示されません。

付近の Wi-Fi デバイスに対する新しい実行時の権限

以前のバージョンの Android では、アクセス ポイント、Wi-Fi Direct 接続、Wi-Fi RTT などに関連するいくつかの一般的な Wi-Fi ユースケースに対応するため、ユーザーはアプリに ACCESS_FINE_LOCATION 権限を付与する必要があります。

ユーザーが位置情報の利用許可を Wi-Fi 機能に関連付けて理解するのは困難であることから、Android 13 では、デバイスから付近のアクセス ポイントへの Wi-Fi 接続を管理するアプリ向けに、NEARBY_DEVICES 権限グループに新しい実行時の権限を導入しています。この NEARBY_WIFI_DEVICES 権限により、上記のような Wi-Fi ユースケースに対応できます。

アプリが Wi-Fi API から物理的な位置情報を取得しないのであれば、Android 13 以上をターゲットに設定して Wi-Fi API を使用する場合は、ACCESS_FINE_LOCATION ではなく NEARBY_WIFI_DEVICES をリクエストしてください。このプロセスは、Bluetooth デバイス情報が位置情報に使用されないことを表明する場合に Android 12(API レベル 31)以上で実行するプロセスと似ています。

詳しくは、付近の Wi-Fi デバイスに対する権限をご覧ください。

バックグラウンドでボディセンサーを使用するには新しい権限が必要

Android 13 では、心拍数、体温、血中酸素率などを測定するボディセンサーへの「使用中」アクセスというコンセプトを導入しています。このアクセスモデルは、Android 10(API レベル 29)の位置情報でシステムに導入されたモデルとよく似ています。

Android 13 をターゲットとするアプリがバックグラウンドでの実行中にボディセンサー情報にアクセスする必要がある場合は、既存の BODY_SENSORS 権限に加えて、新しい BODY_SENSORS_BACKGROUND 権限を宣言する必要があります。

セキュリティ

インテント フィルタで一致しないインテントをブロックする

アプリから、Android 13 以上をターゲットとする別のアプリのエクスポート済みコンポーネントにインテントを送信する場合、そのインテントは、受信側アプリの <intent-filter> 要素と一致する場合にのみ配信されます。つまり、以下のインテントを除いて、システムは一致しないインテントをすべてブロックします。

  • 他のアプリのコンポーネントに送信されたインテント(そのコンポーネントがインテント フィルタを宣言していない場合)。
  • アプリ内の他のコンポーネントに送信されたインテント。
  • システムから送信されたインテント。
  • root レベルの権限を持つユーザーから送信されたインテント。

コンテキスト登録されたレシーバのエクスポートの安全性の強化

Android 13 では、ランタイム レシーバの安全性を高めるため、アプリ内の特定のブロードキャスト レシーバをエクスポートしてデバイス上の他のアプリから参照可能にするかどうかを指定できます。ブロードキャスト レシーバがエクスポートされた場合、他のアプリから保護されていないブロードキャストがアプリに送信される可能性があります。このエクスポート構成は、Android 13 以上をターゲットとするアプリで使用できます。この構成を使用すると、アプリの脆弱性の大きな原因を一つ防ぐことができます。

以前のバージョンの Android では、デバイス上のアプリから動的に登録されたレシーバに保護されていないブロードキャストを送信できるのは、そのレシーバが署名権限によって保護されていない場合に限られていました。

この安全性強化対策を実装する手順は次のとおりです。

  1. DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 互換性フレームワークの変更を有効にします。
  2. アプリの各ブロードキャスト レシーバで、他のアプリからそのレシーバにブロードキャストを送信できるかどうかを明示的に指定します。次のコード スニペットをご覧ください。

    Kotlin

    // This broadcast receiver should be able to receive broadcasts from other apps.
    // This option causes the same behavior as setting the broadcast receiver's
    // "exported" attribute to true in your app's manifest.
    context.registerReceiver(sharedBroadcastReceiver, intentFilter,
        RECEIVER_EXPORTED)
    
    // For app safety reasons, this private broadcast receiver should **NOT**
    // be able to receive broadcasts from other apps.
    context.registerReceiver(privateBroadcastReceiver, intentFilter,
        RECEIVER_NOT_EXPORTED)

    Java

    // This broadcast receiver should be able to receive broadcasts from other apps.
    // This option causes the same behavior as setting the broadcast receiver's
    // "exported" attribute to true in your app's manifest.
    context.registerReceiver(sharedBroadcastReceiver, intentFilter,
        RECEIVER_EXPORTED);
    
    // For app safety reasons, this private broadcast receiver should **NOT**
    // be able to receive broadcasts from other apps.
    context.registerReceiver(privateBroadcastReceiver, intentFilter,
        RECEIVER_NOT_EXPORTED);

パフォーマンスとバッテリー

バッテリー リソース運用

ユーザーが Android 13 をターゲットとするアプリをバックグラウンドのバッテリー使用量について「制限付き」状態に設定すると、システムによってブロードキャストに関するいくつかの制限が適用されます。

詳しくは、Android 13 で導入されたバッテリー リソース運用機能について説明しているページで、制限付きのバックグラウンドのバッテリー使用量に関する新しい制限をご覧ください。