3

バックグラウンド

Google は Android M に優れた新機能を導入しました。これにより、このビデオで示されているように、ADB を使用してもアプリをバックアップおよび復元できます。

次のように、コマンドを使用してadb shell bmgrアプリをバックアップおよび復元するだけです。

バックアップ:

adb shell bmgr fullbackup PACKAGE_NAME

アプリを復元します。

adb shell bmgr restore PACKAGE_NAME

そして、それはうまく機能します。

問題

ドキュメントはかなり新しい段階にあるため、この新しいツールに関するいくつかの質問に対する回答が見つかりません。

私が試したこと

を入力するadb shell bmgrと、使い方の手がかりが得られますが、質問に対する答えが見つかりません。Android M を搭載したデバイスではなく、代わりにエミュレーターを使用すると、動作が異なると思います。

このコマンドを入力すると、次のように記述されます。

使用方法: bmgr [backup|restore|list|transport|run] bmgr backup PACKAGE bmgr enable BOOL bmgr enabled bmgr list transports bmgr list sets bmgr transport WHICH bmgr restore TOKEN bmgr restore TOKEN PACKAGE... bmgr restore PACKAGE bmgr run bmgr Wipe TRANSPORT PACKAGE bmgr フルバックアップ パッケージ...

「backup」コマンドは、指定されたパッケージのバックアップ パスをスケジュールします。パッケージに保存する変更データが実際にない場合、バックアップ パスは事実上ノーオペレーションになることに注意してください。

「enable」コマンドは、バックアップ メカニズム全体を有効または無効にします。引数が「true」の場合は有効になり、それ以外の場合は無効になります。無効にすると、バックアップ操作も復元操作も実行されません。

「有効」コマンドは、バックアップ メカニズムの現在の有効/無効状態を報告します。

「list transports」コマンドは、デバイスで現在使用可能なバックアップ トランスポートの名前を報告します。これらの名前は、'transport' および 'wipe' コマンドに引数として渡すことができます。現在アクティブなトランスポートは、'*' 文字で示されます。

「list sets」コマンドは、現在アクティブなトランスポートを介してデバイスで使用可能な各復元セットのトークンと名前を報告します。

「transport」コマンドは、指定されたトランスポートを現在アクティブなものとして指定します。この設定は、再起動後も維持されます。

「restore」コマンドは、restore トークンだけを指定すると、現在アクティブなトランスポートからシステム全体の復元操作を開始します。TOKEN 引数で指定された復元セットを、その復元セットにデータを提供した各アプリケーションに配信します。

トークンと 1 つ以上のパッケージ名が指定された場合の「restore」コマンドは、TOKEN 引数で指定された復元セットから指定されたパッケージのみの復元操作を開始します。これは、トークンのみを提供する「復元」操作と事実上同じですが、復元するアプリケーションのセットにフィルターを適用します。

「restore」コマンドは、パッケージ名だけを指定すると、RestoreSession.restorePackage() メソッドで使用される復元セット選択アルゴリズムに従って、その 1 つのパッケージのみの復元を開始します。

「run」コマンドを使用すると、スケジュールされたバックアップ操作がすぐに開始されます。データ変更をまとめてバッチ処理するための通常の待機時間はありません。

'wipe' コマンドは、指定されたパッケージのすべてのバックアップ データを指定されたトランスポートのストレージから消去します。特定のアプリケーションが実行する次のバックアップ操作は、そのデータ セット全体を書き換えます。ここで使用するトランスポート名は、'list transports' によって報告されたものです。

「fullbackup」コマンドは、1 つ以上のパッケージの完全なデータ ストリーム バックアップを作成します。データは、現在アクティブなトランスポート経由で送信されます。

質問

いくつかの質問を聞きたいんです:

  1. デバイス自体を介してこれらのコマンドを呼び出したとします。それらは機能しますか? そうでない場合、ルート化されたデバイスで動作しますか? または、少なくとも現在のアプリをバックアップして復元します(アプリXのバックアップと復元自体)?

  2. バックアップはどこに保存されていますか? それらをカスタマイズされたパスに保存することは可能ですか? たぶん、PCのものでさえありますか?

  3. 同じアプリを複数の状態にバックアップすることはできますか? たとえば、アプリは、ログインしたときのバックアップと、いくつかの設定が構成されているときのバックアップを持つことができます。このようにして、それらの各バックアップに復元できます。

  4. 彼らは、「現在アクティブなトランスポート」について上記の説明に書いています。正確には何ですか?カスタマイズできますか?

  5. すべてのアプリでバックアップ/復元を実行できますか? または、すべてのアプリのパッケージを配置する必要がありますか?

  6. 「フルバックアップ」はすぐにバックアップを行うようです。「実行」属性は何に使用されますか? それとも、エミュレータを使用しているからですか?

4

2 に答える 2

4

まだご覧になっていない場合は、自動バックアップに関連する新機能のリファレンス ドキュメントをご覧ください。バックアップ機能は以前のバージョンに存在し、このガイドで説明されています。私は KitKat で彼らと協力しました。クイック スキャンの後、M プレビューの新機能は次のようになります。

  1. 毎日の自動バックアップ
  2. バックアップに含まれるものを構成および制御するためのより多くのオプション。

あなたの質問の多くはadb shell bmgrツールに焦点を当てています。それは開発者のテスト用です。通常のデバイスの使用では、デバイスがアイドル状態で、充電中で、Wi-Fi ネットワークに接続されている場合、バックアップは 24 時間ごとに自動的に行われます。

デバイス自体を介してこれらのコマンドを呼び出したとします。それらは機能しますか?

バックアップは自動的に行われますが、その必要はありますか?

バックアップはどこに保存されていますか? それらをカスタマイズされたパスに保存することは可能ですか? たぶん、PCのものでさえありますか?

ユーザーの Google ドライブ アカウントに保存されます。いいえ いいえ

彼らは、「現在アクティブなトランスポート」について上記の説明に書いています。正確には何ですか?カスタマイズできますか?

Google 提供。そうは思わないでください。

すべてのアプリでバックアップ/復元を実行できますか? または、すべてのアプリのパッケージを配置する必要がありますか?

デフォルトでは、すべてのアプリがバックアップされます。リファレンス ドキュメントには、含まれるものを制限する方法が説明されています。

「フルバックアップ」はすぐにバックアップを行うようです。「実行」属性は何に使用されますか? それとも、エミュレータを使用しているからですか?

新しい自動バックアップ機能に加えて、上記のガイドで説明されているように、アプリは増分バックアップを実行できます。このrunコマンドはテスト用に提供されており、開発者が増分バックアップ処理の即時アクティブ化を強制できるようにします。

于 2015-06-26T15:13:06.703 に答える
3

こんにちは、アンドロイド開発者です。私たちは多くの共通の関心を持っているようです (私は GcmNetworkManager であなたの質問に答えました)。

  1. デバイス自体を介してこれらのコマンドを呼び出したとします。それらは機能しますか? そうでない場合、ルート化されたデバイスで動作しますか? または、少なくとも現在のアプリをバックアップして復元します (アプリ X 自体をバックアップして復元します) ?*

    残念ながら、私はあなたが何を意味するのか正確にはわかりません. エミュレーターと比較して実際のデバイスで動作するかどうかを尋ねていると思いますが、答えはイエスです。エミュレータでは機能するが、実際のデバイスでは機能しないという可能性はほとんどありません。通常はその逆です。

  2. バックアップはどこに保存されていますか? それらをカスタマイズされたパスに保存することは可能ですか? たぶん、PCの1つでも?*

    バックアップには 2 種類あります。BackupAgentを実装することによってアプリケーション自体によって駆動される古いキー/値のバックアップと、Android M の時点では、フレームワークが BackupAgent の実装を提供する「フル アプリ データ バックアップ」があります。

    どちらの場合も、バックアップ データは Google のサーバーに保存されます。独自のバックアップ トランスポートを作成する以外に、カスタマイズされたパスにそれらを格納する方法はありません (これは、OEM のみが実行できるか、独自のカスタム ROM を構築した人だけが行うことができます)。

  3. 同じアプリを複数の状態にバックアップすることはできますか? たとえば、アプリは、ログインしたときのバックアップと、いくつかの設定が構成されているときのバックアップを持つことができます。このようにして、これらの各バックアップに復元できます。*

    いいえ。デバイスごとのアプリケーションごとに 1 つの「バックアップ セット」があります。工場出荷時設定にリセットすると、新しいデバイスと見なされ、別のバックアップ セットが作成されます。

  4. 彼らは、「現在アクティブなトランスポート」について上記の説明に書いています。正確には何ですか?カスタマイズできますか? *

    BackupTransport は、バックアップ データの保存場所を決定する役割を担う特権 (つまり /system) アプリです。BackupManagerは OSの一部であり、バックアップがいつ実行されるかを管理し、アプリケーションからデータを取得してトランスポートに渡します。トランスポートはそのデータをどう処理するかを決定します。OS はこの b/c について責任を負うことができず、データがどこに送られるべきかわからないため、ベンダー提供のトランスポートに委任します。トランスポートは、システム イメージと共に出荷する必要がある非常に特権的なアプリです。現在、ローカルの「デバッグ」トランスポートと Google 提供のトランスポートの 2 つのトランスポートしかありません。

  5. すべてのアプリでバックアップ/復元を実行できますか? それとも、すべてのアプリのパッケージを配置する必要がありますか?*

    adb shell bmgr を実行するという意味だと思います。いいえ、これを行う方法はありません。ただし、BackupManager には隠し API があり、完全な復元を開始するために呼び出すことができます (たとえば、セットアップ ウィザードがこれを行います)。API は隠されているため、ソースをダウンロードしてそれに対してコンパイルする (またはリフレクションを使用する) 必要があります。また、 @SystemApi アノテーションが付けられた許可android.permission.BACKUPも必要です。私はこれを自分で行ったことがないので、理論的には可能であることはわかっていますが、完全に文書化されていないため、おそらく大きな頭痛の種です(OEMや独自のデバイスを出荷する他のベンダー向けです)。

  6. 「フルバックアップ」はすぐにバックアップを行うようです。「実行」属性は何に使用されますか? それとも、エミュレーターを使用しているからでしょうか?*

    android-M より前は、キーと値のバックアップしかありませんでした。

    adb shell bmgr backup <PACKAGE..>
    adb shell bmgr run
    

    どちらもキー/値のバックアップ フロー用です。アプリは、独自の BackupAgent (上記のリンク) を実装するのに苦労した場合にのみ、キー/値のバックアップを使用できます。たとえば、多くのシステム コンポーネントがこれを行います (たとえば、デバイス間で WiFi AP が復元される方法です)。一部のシステムアプリもこれを行います (Gmail、Google ランチャーなど)。

    adb shell dumpsys backup
    

    キー/値バックアップを使用するすべてのパッケージのリストが表示されます。「bmgr backup p1 p2 etc」を呼び出してから「bmgr run」を呼び出す必要がある理由は、「bmgr backup」コマンドが「将来」バックアップされるパッケージをステージングするためです。「bmgr run」を呼び出すと、バックアップ パスが手動で開始されます。上記の投稿が言うように、これはデバッグ用です。

    あなたが実行する場合

    adb shell dumpsys backup
    

    M デバイスでは、フル アプリ データ バックアップ フローを使用してバックアップされたアプリのリストと、k/v バックアップを使用して将来のバックアップ用に「ステージング」されたアプリのリストも表示されます (この実行するタイミングによっては空になる場合があります)。

    今、

    adb shell bmgr fullbackup <PACKAGE..>
    

    はフル バックアップ フロー用です。ただし、落とし穴があります。この 2 つ (キー/値のバックアップとフル バックアップ) は完全に独立していますが、 BackupManagerはキー/値のメカニズムを使用してフル バックアップ パッケージのメタデータを追跡します (このメタデータには、アプリのバージョン、署名、タイムスタンプなどが含まれます)。これが、実行する必要がある理由です

    adb shell bmgr run
    

    フル バックアップ フローを正常に使用する前に、フル アプリ データ メタデータが正しくバックアップされていることを確認します。

    エミュレーターを実際のデバイスと何ら異なるものと考えないでください。理論的には、実際のデバイスを正確に「エミュレート」することになっています。エミュレーターと物理的なものの間に違いはないはずなので、(AFAIK)実際のデバイスでは機能しないエミュレーターで機能する「特別な」コマンドはありません。

于 2015-07-18T22:13:27.760 に答える