バックアップと復元での変更点

Android 12 をターゲットとして動作するアプリでは、バックアップと復元の仕組みが変更されています。Android のバックアップと復元には 2 つの形式があります。

  • クラウド バックアップ: ユーザーデータはユーザーの Google ドライブに保存され、後でそのデバイスや新しいデバイスで復元できます。
  • デバイス間(D2D)転送: ケーブルを使用するなどして、ユーザーデータを旧デバイスから新デバイスに直接送信します。

データのバックアップと復元の詳細については、自動バックアップでユーザーデータをバックアップするAndroid Backup Service を使用して Key-Value ペアをバックアップするをご覧ください。

D2D 転送機能の変更

Android 12 以降をターゲットとして動作するアプリの場合:

  • android:allowBackup="false" を指定すると、Google ドライブへのバックアップは無効になりますが、アプリの D2D 転送は無効になりません。

  • XML 構成メカニズムを使用して追加ルールと除外ルールを指定すると、D2D 転送には影響しなくなりますが、Google ドライブへのバックアップには影響します。D2D 転送のルールを指定するには、次のセクションで説明する新しい構成を使用する必要があります。

追加と除外の新しい形式

Android 12 以降をターゲットとして動作するアプリは、使用する XML 構成の形式が異なります。この形式では、Google ドライブのバックアップと D2D 転送の違いを明確にするため、クラウド バックアップと D2D 転送に追加ルールと除外ルールを別々に指定する必要があります。

オプションで、バックアップのルールを指定することもできます。その場合、古い構成は無視されます。

XML 形式の変更

Android 11 以前のバックアップと復元の構成に使用する形式は次のとおりです。

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string" />
</full-backup-content>

形式の変更点を太字で示します。

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

構成の各セクション(<cloud-backup><device-transfer>)には、特定のタイプの転送にしか適用されないルールが含まれています。これにより、たとえば、あるファイルやディレクトリを Google ドライブのバックアップから除外しつつ、D2D 転送では転送するといったことが可能になります。これは、クラウドにバックアップするには大きすぎるがデバイス間の転送は問題なくできるファイルがある場合に便利です。

<device-transfer> セクションがないなど、特定のバックアップ モードに関するルールがない場合、バックアップ対象のファイルに記載されているように、no-backup ディレクトリと cache ディレクトリを除くすべてのコンテンツに対して、そのモードが完全に有効になります。

アプリでは、<cloud-backup> セクションに disableIfNoEncryptionCapabilities フラグを設定することで、ユーザーがロック画面を表示した場合など、暗号化可能な場合にのみバックアップが行われるようにできます。この制約を設定すると、ユーザーのデバイスが暗号化をサポートしていない場合はバックアップがクラウドに送信されなくなりますが、D2D 転送はサーバーに送信されないため、暗号化をサポートしていないデバイスでも動作し続けます。

アプリのマニフェスト フラグ

マニフェスト ファイルで android:dataExtractionRules 属性を使用して、アプリが新しい XML 構成を指すようにします。新しい XML 構成を指すと、古い構成を指す android:fullBackupContent 属性は無視されます。次のコードサンプルは、新しいマニフェスト ファイルのエントリを示しています。

<application
    ...
    <!-- The below attribute is ignored. -->
    android:fullBackupContent="old_config.xml"
    <!-- You can point to your new configuration using the new
         dataExtractionRules attribute . -->
    android:dataExtractionRules="new_config.xml"
    ...>
</application>