動作の変更点: すべてのアプリ

Android 13 プラットフォームには、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、targetSdkVersion に関係なく、Android 13 上で稼働するすべてのアプリに適用されます。該当する場合は、アプリをテストし、必要に応じて修正して、適切に対応してください。

Android 13 をターゲットとするアプリにのみ影響する動作変更のリストも必ずご確認ください。

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

タスク マネージャー

通知ドロワーの下部に、現在バックグラウンドで実行されているアプリの数を表示するボタンがあります。このボタンを押すと、さまざまなアプリ名のリストを含むダイアログが表示されます。各アプリの右側に [停止] ボタンがあります。
図 1. タスク マネージャーのワークフロー。フォアグラウンド サービスが進行中のアプリをユーザーが停止できるようにします。このワークフローは、Android 13 以上を搭載したデバイスにのみ表示されます。

Android 13(API レベル 33)以上では、図 1 に示すように、ユーザーは通知ドロワーでワークフローを完了し、フォアグラウンド サービスが進行中のアプリを停止できます。このアフォーダンスは、タスク マネージャーといいます。アプリは、ユーザーが開始したこの停止を処理できる必要があります。

JobScheduler によるプリフェッチ ジョブの処理の改善

JobScheduler を使用すると、アプリは特定のジョブを「プリフェッチ ジョブ」としてマークできます(JobInfo.Builder.setPrefetch() を使用)。つまり、ユーザー エクスペリエンスを向上させるには、次回のアプリ起動の直前にそれらのジョブを実行することが理想的です。これまで JobScheduler は、シグナルを使用して、機会があればプリフェッチ ジョブが空いているデータまたは余分なデータを使用できるようにするだけでした。

Android 13(API レベル 33)以上では、次にアプリが起動されるタイミングをシステムが判断しようと試み、その予測に基づいてプリフェッチ ジョブを実行します。アプリでは、次回のアプリ起動前に実行する予定のすべての処理について、プリフェッチ ジョブの使用を試みる必要があります。

バッテリー リソース運用

Android 13(API レベル 33)でデバイスのバッテリー駆動時間を適切に管理する方法を以下に示します。

これらの変更を加えたアプリをテストする際は、次の点を確認してください。

  • システムがアプリを「制限付き」のアプリ スタンバイ バケットに配置したとき、アプリがどのように応答するかをテストします。次の Android Debug Bridge(ADB)コマンドを使用して、アプリをこのバケットに割り当てます。

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • バックグラウンドのバッテリー使用量について「制限付き」状態にあるアプリに一般的に適用される次の制限に対して、アプリがどのように応答するかをテストします。

    • フォアグラウンド サービスを起動できない
    • 既存のフォアグラウンド サービスがフォアグラウンドから削除される
    • アラームがトリガーされない
    • ジョブが実行されない

    次の ADB コマンドを使用して、アプリをこの「制限付き」状態にします。

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

優先度の高い Firebase Cloud Messaging(FCM)の割り当て

Android 13(API レベル 33)では Firebase Cloud Messaging(FCM)の割り当てが更新され、優先度の高い FCM に応じて通知を表示するアプリに対する、優先度の高い FCM の配信の信頼性が向上しました。Android 13(API レベル 33)では以下の点が変更されました。

  • アプリ スタンバイ バケットは、アプリが使用できる優先度の高い FCM の数を決定するものではなくなりました。
  • 優先度の高い FCM の割り当ては、優先度の高い FCM に応じてユーザーに表示される通知の数に比例してスケーリングされます。

以前のバージョンの Android と同様に、割り当てを超える優先度の高い FCM は通常の優先度にダウングレードされます。FCM に応じてフォアグラウンド サービス(FGS)を開始する場合は、RemoteMessage.getPriority() の結果を通じて、それが PRIORITY_HIGH であるか、また潜在的な ForegroundServiceStartNotAllowedException 例外が処理されているかを確認することをおすすめします。

優先度の高い FCM に応じて常にアプリに通知を表示するわけではない場合は、それらの FCM の優先度を標準に変更し、通知のトリガーとなるメッセージがダウングレードされないようにすることをおすすめします。

プライバシー

通知に関する実行時の権限

Android 13(API レベル 33)では、実行時の通知権限 POST_NOTIFICATIONS が導入されました。この変更は、ユーザーが重要な通知に集中するのに役立ちます。

この機能による制御の強化と柔軟性の向上の効果を得るため、できるだけ早く Android 13 以上をターゲットに設定することを強くおすすめします。

詳しくは、アプリの権限に関するおすすめの設定をご覧ください。

機密コンテンツをクリップボードで非表示にする

パスワードやクレジット カード情報などの機密コンテンツを、アプリ内でクリップボードにコピーできるようにする場合は、ClipboardManager#setPrimaryClip() を呼び出す前に、ClipData の ClipDescription にフラグを追加する必要があります。このフラグを追加すると、コンテンツのプレビューに機密コンテンツが表示されなくなります。

機密コンテンツのフラグを設定せずにコピーされたテキストのプレビュー
機密コンテンツのフラグを設定せずにコピーされたテキストのプレビュー
機密コンテンツのフラグを設定してコピーされたテキストのプレビュー
機密コンテンツのフラグを設定してコピーされたテキストのプレビュー

機密コンテンツのフラグを設定するには、ClipDescription にブール型のエクストラを追加します。対象 API レベルにかかわらず、すべてのアプリでこれを行う必要があります。


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

新しいクリップボード UI について詳しくは、コピー&ペースト機能のページをご覧ください。

セキュリティ

共有ユーザー ID から移行する

サポートが終了した android:sharedUserId 属性をアプリで使用している場合、すでにこの属性の機能にアプリが依存していないなら、次のコード スニペットに示すように、android:sharedUserMaxSdkVersion 属性を 32 に設定できます。

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

この属性は、アプリが共有ユーザー ID に依存しなくなったことをシステムに伝えます。アプリが android:sharedUserMaxSdkVersion を宣言し、Android 13 以上を搭載したデバイスに新しくインストールされた場合、アプリは android:sharedUserId が定義されていないかのように動作します。更新されたアプリは引き続き既存の共有ユーザー ID を使用します。

ユーザー ID を共有すると、パッケージ マネージャー内での動作が非決定性を持ちます。代わりに、アプリで適切な通信メカニズム(サービスやコンテンツ プロバイダなど)を使用して、共有コンポーネント間の相互運用性を促進することをおすすめします。

ユーザー エクスペリエンス

閉じることができるフォアグラウンド サービスの通知

Android 13 以上を搭載したデバイスでは、デフォルトで、ユーザーはフォアグラウンド サービスに関連付けられた通知を閉じることができます

コア機能

以前のスピーチ サービスの実装を削除

Android 13 では、SpeechService 実装(Voice IME、RecognitionServiceインテント ベースの API など)が Google アプリから削除されます。

Android 12 では以下の点が変更されました。

  • SpeechService 機能が Google スピーチ サービス アプリに移行され、これがデフォルトの SpeechService プロバイダになりました。
  • オンデバイスの音声認識をサポートするため、RecognitionService 機能が Android System Intelligence アプリに移動しました。

Android 12 でのアプリの互換性を維持するため、Google アプリはトランポリンを使用してトラフィックを Google スピーチ サービス アプリに転送します。Android 13 では、このトランポリンが削除されました。

アプリでは SpeechService について、特定のアプリをハードコードするのではなく、デバイスのデフォルトのプロバイダを利用する必要があります。