自動バックアップでユーザーデータをバックアップ
アプリの自動バックアップは、Android6.0(APIレベル23)以降でターゲットと実行されているアプリからユーザーデータを自動的にバックアップします。 Androidは、ユーザーのGoogleドライブにアップロードすることによってappdataを保持します—それはユーザーのGoogleアカウントの資格情報によって保護されています。 データの量は、アプリのユーザーあたり25MBに制限されており、バックアップデータを保存するための料金はありません。 アプリはバックアッププロセスをカスタマイズするか、disablingbackupsによってオプトアウトします。Androidのバックアップオプションの概要と、バックアップおよび復元するデータに関するガイダンスについては、データbackupoverviewを参照してください。
バックアップされるファイル
デフォルトでは、自動バックアップには、システムによってアプリに割り当てられているほとんどのディレ アプリの内部ストレージに保存されたファイルは、getFilesDir()
getDir(String, int)
によってアクセスされます。
getDatabasePath(String)
SQLiteOpenHelper
クラスで作成されたファイルも含まれます。 getExternalFilesDir(String)
。 自動バックアップは、getCacheDir()
getCodeCacheDir()
によって返されたディレクトリ内のファイルを除外します。 これらの場所に保存されたファイルは、一時的にのみ必要であるか、意図的にバックアップ操作から除外されます。
特定のファイルを含めたり除外したりするようにアプリを設定できます。 詳細については、”ファイルのインクルードと除外”セクションを参照してください。注:Androidはコンポーネントの設定をユーザーデータとして扱いません。 アプリの実行中にマニフェスト内の特定のコンポーネントを有効または無効にする場合は、AutoBackupが構成を保存して復元することは期待しないでくださ 構成状態を保持するには、共有設定に保存し、復元時に共有設定を復元します。 アプリの状態を保存する場合は、状態を共有環境設定に保存し、復元時に共有環境設定を復元します。
バックアップの場所
バックアップデータは、ユーザーのGoogleドライブアカウントのプライベートフォルダに保存され、アプリごとに25MBに制限され 保存されたデータは、ユーザーの個人的なGoogleドライブのクォータにはカウントされません。 最新のバックアップのみが保存されます。 Abackupが作成されると、以前のバックアップ(存在する場合)が削除されます。 バックアップデータは、ユーザーやデバイス上の他のアプリによって読み取られることはありません。ユーザーは、Google DriveAndroidアプリでバックアップされたアプリのリストを見ることができます。
ユーザーは、Google DriveAndroidアプリでバックアップされたアプリのリストを Android搭載デバイスでは、ユーザーは設定>>アプリデータの下のDriveappのナビゲーションドロワーでこのリストを見つけるこ
各device-setup-lifetimeからのバックアップは、次の例に示すように別々のデータセットに格納されます。
- ユーザーが二つのデバイスを所有している場合、各デバ
- ユーザーが工場出荷時にデバイスをリセットし、同じアカウントでデバイスを設定すると、バックアップは新しいデータセットに格納されます。 廃止されたデータセットは、アクティブでない期間が経過すると自動的に削除されます。
バックアップスケジュール
バックアップは、次のすべての条件が満たされると自動的に実行されます。
- ユーザーがデバイスでバッ Android9では、この設定はinSettings>System>Backupです。
- 最後のバックアップから少なくとも24時間が経過しました。
- デバイスはアイドル状態です。
- デバイスがWi-Fiネットワークに接続されています(デバイスユーザーがモバイルデータバックアップを選択していない場合)。
実際には、これらの条件はほぼ毎晩発生しますが、デバイスはバックアップされない可能性があります(たとえば、ネットワークに接続しない場合)。 Networkbandwidthを節約するために、アップロードはアプリデータが変更された場合にのみ行われます。
自動バックアップ中、システムはアプリをシャットダウンして、ファイルシステムに書き込まれていないことを確認します。 既定では、ユーザーが自分のアプリがシャットダウンされていることに気付くため、バックアップシステムはフォアグラウンドで実行されている デフォルトの動作を上書きするには、backupInForeground
属性をtrueに設定します。
テストを簡素化するために、Androidにはアプリのバックアップを手動で開始できるツールが含まれています。 詳細については、”バックアップと復元のテスト”を参照してください。
Restore schedule
データは、アプリがインストールされるたびに、Playストアから、デバイスのセットアップ中(システムが以前にインストールされたアプリをイ 復元操作は、APKがインストールされた後、ユーザーがアプリを起動できるようになる前に行われます。
初期デバイスセットアップウィザード中に、使用可能なバックアップデータセットのリストが表示され、どのデータを復元するかを尋ねられます。 バックアップデータセットが選択されている方が、デバイスの先祖データセットになります。 デバイスは、独自のバックアップまたは先祖データセットのいずれかから復元できます。 両方のソースからのバックアップが利用可能な場合、デバイスは独自のバックアップに優先順位を付けます。 ユーザーがデバイスセットアップウィザードを実行しなかった場合、デバイスは独自のバックアップからのみ復元できます。
テストを簡素化するために、Androidにはアプリの復元を手動で開始できるツールが含まれています。 詳細については、”バックアップと復元のテスト”を参照してください。
バックアップの有効化と無効化
Android6.0(APIレベル23)以上を対象としたアプリは、自動バックアップに自動的に参加します。 アプリマニフェストファイルで、ブール値android:allowBackup
true
<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>
android:allowBackup
false
に設定することで、バックアップを無効にすることができます。 あなたのアプリが他のメカニズムを介してその状態を再作成できる場合、またはあなたのアプリがAndroidがバックアップすべきではない機密情報を
ファイルのインクルードと除外
デフォルトでは、ほぼすべてのアプリデータがバックアップされます。 詳細については、”バックアップされるファイル”を参照してください。 このセクションでは、バックアップ対象を制御するカスタムXMLルールを定義する方法を説明します。p>
-
AndroidManifest.xml
android:fullBackupContent
<application>
要素に追加します。 この属性は、バックアップルールを含むXMLファイルを指します。 たとえば、<application ... android:fullBackupContent="@xml/my_backup_rules"></application>
-
my_backup_rules.xml
というXMLファイルをres/xml/
<include>
<exclude>
device.xml
<?xml version="1.0" encoding="utf-8"?><full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/></full-backup-content>
XML config syntax
The XML syntax for the configuration file is shown below:
<full-backup-content> <include domain= path="string" requireFlags= /> <exclude domain= path="string" /></full-backup-content>
Inside the <full-backup-content>
tag, you can define <include>
and <exclude>
elements:
-
<include>
– Specifies a file or folder to backup. By default, Auto Backup includes almost all app files. <include><include>要素を使用します。注意:
getCacheDir()
getCodeCacheDir()
getNoBackupFilesDir()
によって返されるディレクトリ内のファイルは、それらをインクルードしようとしても常に除外されます。 p> -
<exclude>
-バックアップ中に除外するファイルまたはフォルダを指定します。 通常、バックアップから除外されるファイルは次のとおりです。- サーバーによって発行された、またはデバイス上で生成されたデバイス固有の識別子を たとえば、Google Cloud Messaging(GCM)では、ユーザーが新しいデバイスにアプリをインストールするたびに登録トークンを生成する必要があります。 古い登録トークンが復元されると、アプリが予期せず動作することがあります。
- アカウントの資格情報またはその他の機密情報。 このような情報をバックアップに保存するのではなく、復元されたアプリを初めて起動するときにユーザーに再認証を求めることを検討してくださ
- アプリのデバッグに関連するファイル。
- アプリが25MBのバックアップクォータを超える大きなファイル。 注:設定ファイルで両方の要素が指定されている場合、バックアップには、
<include>
<exclude>
<exclude>
が優先されます。各要素には、次の2つの属性が含まれている必要があります。
-
domain
-リソースの場所を指定します。-
domain
-リソースの場所を指定します。 この属性の有効な値は次のとおりです。-
root
-このアプリに属するすべてのプライベートファイルが格納されているファイルシス -
file
getFilesDir()
によって返されるディレクトリ。 -
database
getDatabasePath()
SQLiteOpenHelper
で作成されたデータベースはここに格納されます。 -
sharedpref
SharedPreferences
が格納されているディレクトリ。 /li> -
external
getExternalFilesDir()
-
-
path
:バックアップに含めるファイルまたはフォルダを指定します。 注意:- この属性は、ワイルドカードまたは正規表現の構文をサポートしていません。
-
.
..
。 - ディレクトリを指定すると、この規則はディレクトリ内のすべてのファイルと再帰的なサブディレクトリに適用されます。
注:これらの場所以外のファイルをバックアップすることはできません。
include
requireFlags
属性を含めることもできます。バックアップに必要なデバイス条件の定義
アプリが機密情報をデバイスに保存する場合、アプリのデータをユーザーのバックアップに含 Android9(APIレベル28)またはhigherに次の条件を追加できます。
-
clientSideEncryption
:ユーザーのバックアップはクライアント側のsecretで暗号化されています。 この形式の暗号化は、ユーザーがAndroid9orhigherでバックアップを有効にし、デバイスのascreenロック(PIN、パターン、またはパスワード)を設定している限り、Android9orhigherを実行しているデ -
deviceToDeviceTransfer
:ユーザーは、ローカルデバイス間のdevicetransferをサポートするanotherdevice(たとえば、Google Pixel)にバックアップを転送しています。
開発デバイスをAndroid9にアップグレードした場合は、アップグレード後にデータバックアップを無効にしてから、再度有効にする必要があります。 これは、Androidが設定またはセットアップウィザードでユーザーに通知した後、クライアント側の秘密でバックアップを暗号化するためです。
包含条件を宣言するには、
requireFlags
<include>
要素のdesired値に設定します。my_backup_rules。xml
<?xml version="1.0" encoding="utf-8"?><full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /><full-backup-content>
アプリがキーと値のbackupsystemを実装している場合、または自分でbackupagentを実装している場合は、
BackupDataOutput
FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
FLAG_DEVICE_TO_DEVICE_TRANSFER
フラグ。次のコードスニペットは、このメソッドの使用例を示しています:自動バックアップを実装するアプリは、実装する必要はありません
BackupAgent
Java
class MyCustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here.}
Java
public class MyCustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here.}
Backupagentを実装
自動バdiv>。 ただし、必要に応じてカスタム
BackupAgent
を実装できます。 通常、これを行うには2つの理由があります。-
onRestoreFinished()
onQuotaExceeded(long, long)
などのバックアップイベントの通知を受 これらのコールバックメソッドは、アプリが実行されていない場合でも実行されます。 - バックアップするファイルのセットをXMLルールで簡単に表現することはできません。 このようなまれなケースでは、必要なものを格納するために
onFullBackup(FullBackupDataOutput)
をオーバーライドするBackupAgentを実装できます。 システムのデフォルト実装を保持するには、super.onFullBackup()
を使用してスーパークラスの対応するメソッドを呼び出します。
BackupAgentを実装する場合、デフォルトでは、システムはアプリがキー/値のバックアップと復元を実行することを期待しています。 代わりにファイルベースの自動バックアップを使用するには、アプリのマニフェストで
android:fullBackupOnly
true
に設定します。自動バックアップおよび復元操作中に、システムは制限モードでアプリを起動し、競合の原因となるファイルへのアクセスを防ぎ、
BackupAgent
Application
BackupAgent
Application
onBackup()
onRestore()
を実装する必要があります。 しかし、キーと値のバックアップを実行したくない場合は、これらのメソッドの実装を空白のままにすることができます。詳細については、”Backupagentの拡張”を参照してください。
-
-