問題タブ [android-backup-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - AndroidSharedPreferencesバックアップが機能しない
私はAndroidアプリケーションでSharedPreferencesをバックアップする方法、特に下位互換性を維持するためにリフレクションを使用する方法について宿題をしています。少なくとも私は試してきました。残念ながら、私のコードはどれも実際にはバックアップを作成することにはなりません!これには、ここで説明するように、エミュレーターでadbbmgrコマンドを強制することが含まれます。だから私はコミュニティがおそらく私を助けてくれるのだろうか、そしてその過程でいくつかのより良いドキュメントを考え出すことができるのだろうか?
これが私のコードです。これを他の人にとって可能な限り一般的なものにするために、 com.example.andyというパッケージ名でアプリケーションAndyを呼び出すだけです。
Androidマニフェスト(抜粋)
backupHelper.java
注:/data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml
BackupAgentWrapper
そして最後に、実行時にバックアップを開始するコマンド。私のアプリケーションでは、このコードは、アプリケーションで使用可能なクラス(メインアクティビティではない)から実行され、作成時にコンテキストとして渡され、プライベート変数mContextに格納されます。
要約すると、上記の関数も以下のコマンドも実際にはデータをバックアップしません。
android - Androidのバックアップ/復元:内部データベースをバックアップする方法は?
BackupAgentHelper
提供されているを使用して、所有しFileBackupHelper
ているネイティブデータベースをバックアップおよび復元するように実装しました。これは、通常一緒に使用するデータベースでContentProviders
あり、に存在し/data/data/yourpackage/databases/
ます。
これは一般的なケースだと思うでしょう。ただし、ドキュメントでは何をすべきかが明確ではありません:http: //developer.android.com/guide/topics/data/backup.html。これらの典型的なデータベースには特にありません。BackupHelper
したがって、を使用しFileBackupHelper
、 ""の.dbファイルをポイントし、/databases/
のdb操作(などdb.insert
)の周りにロックを導入し、インストール後に存在しないため、以前に""ディレクトリContentProviders
を作成しようとしました。/databases/
onRestore()
SharedPreferences
私は過去に別のアプリで成功するために同様のソリューションを実装しました。ただし、emulator-2.2で新しい実装をテストするとLocalTransport
、ログからのバックアップが実行されていることと、復元が実行されている(およびonRestore()
呼び出されている)ことがわかります。ただし、dbファイル自体は作成されません。
これはすべて、インストール後、アプリの最初の起動前、復元の実行後であることに注意してください。それとは別に、私のテスト戦略はhttp://developer.android.com/guide/topics/data/backup.html#Testingに基づいていました。
また、自分で管理しているsqliteデータベースについても、SDカードや独自のサーバーなどへのバックアップについても話していません。
カスタムを使用するようにアドバイスしているデータベースについての言及をドキュメントで見ましたBackupAgent
が、それは関連していないようです:
ただし、次のことが必要な場合は、BackupAgentを直接拡張することをお勧めします。*データベース内のデータをバックアップします。ユーザーがアプリケーションを再インストールするときに復元するSQLiteデータベースがある場合は、バックアップ操作中に適切なデータを読み取るカスタムBackupAgentを構築し、テーブルを作成して復元操作中にデータを挿入する必要があります。
少し明確にしてください。
SQLレベルまで自分でそれを行う必要がある場合は、次のトピックについて心配しています。
データベースとトランザクションを開きます。アプリのワークフローの外で、このようなシングルトンクラスからそれらを閉じる方法がわかりません。
バックアップが進行中であり、データベースがロックされていることをユーザーに通知する方法。時間がかかる場合があるので、プログレスバーを表示する必要があるかもしれません。
復元時に同じことを行う方法。私が理解しているように、復元は、ユーザーがすでにアプリの使用を開始したとき(およびデータベースにデータを入力したとき)に発生する可能性があります。したがって、バックアップされたデータを元の場所に復元する(空のデータまたは古いデータを削除する)とは限りません。どういうわけかそれに参加する必要がありますが、IDが原因で、重要なデータベースでは不可能です。
復元が完了した後、ユーザーが到達不能な時点で立ち往生することなくアプリを更新する方法。
データベースがバックアップまたは復元時にすでにアップグレードされていることを確認できますか?そうしないと、期待されるスキーマが一致しない可能性があります。
android - Androidバックアップサービス-HTCデバイスの連絡先のバックアップとHTCDesire2での復元
あるデバイスから連絡先のバックアップを実行し(HTCマジック)、別のデバイスで復元する(HTC Desire2)必要があるユースケースがあります。
Android Backup APIを使用してみましたが、テスト中に、別のデバイス(HTC Desire2)でデータを復元できないことがわかりました。しかし、同じデバイス上のデータを正常に復元することができました(HTCマジック)。
いくつかのクエリ:
別のデバイスでデータを復元する方法はありますか?
requestRestore()
BackupManagerのAPIを明示的に呼び出したいのですが、マニフェストに権限SecurityException
があるのにAPIを呼び出すとスローされます。android.permission.BACKUP
プラットフォーム証明書を使用してアプリケーションに署名する必要がありますか?
android - リストア中のバックアップ エージェントの署名の不一致
[編集] 私が追加したすべての情報から、これは、同じ apk で同じビルドであるにもかかわらず、同じ UID の下で新しいアプリとして自分自身を登録するアプリが原因である可能性が高いようです。どこから修正を開始するかについてのアイデアは大歓迎です
BackupAgent
共有設定ファイルのみをバックアップしたいので、Helper クラスを使用してアプリに を実装しました。
バックアップコールはうまくいっているようです。アプリが実行した後に「bmgr run」を実行するとdataChanged()
、logcat で次のようになります。
ただし、すぐに実行したとしても、「bmgr restore」アクションを実行すると、logcat で次のようになります。
復元のコンソール出力は次のとおりです。
何か案は?アンインストール/消去/何もしていないので、明らかに同じバージョンと署名です。私はすべてバックアップサービスにサインアップしており、キーは正しく入っています。
編集: デバッグ キーの署名付きビルドとしては正常に動作するようですが、エクスポートされ、難読化され、zipalign されたリリース キーの署名付き apk では、このように失敗します。デバッグ ビルドからリリース ビルドにデータを復元しようとしていた場合、それは理にかなっていますが、そうではありません。
edit2:ヘルパー名などを変更しようとしましたが、それでも同じ動作が得られます。デバッグ キーで署名された apk は完全に機能し、バックアップ、アンインストール、再インストールが可能で、自動的に復元されます。キー署名付き apk をリリースすると、毎回これが行われます。内部関数呼び出しが 1 回しかないにもかかわらず、@ 番号が異なるバックアップ呼び出しが繰り返されることに、まだ少し懸念があります。ただし、デバッグ用のものもこれを行うため、完全にそうではありません。
dumpsys バックアップの出力には、パッケージが 4 回表示されます...
edit3: アンインストールと再インストールを繰り返すと、アプリの新しいインスタンスが同じ UID の下に追加され続けます。これは、同じ apk からの同じアプリの同じビルドですが、そのリストで自分自身の新しいインスタンスを作成し続けるだけです。それは正しい行動ですか?ソースを調べたBackupManager
ところ、デバッグ モードではマネージャはシグネチャをあまり気にしていないように見えます (正しく読んだ場合)。
java - Androidアプリケーションのバックアップと復元?
私が作成しているアプリケーションの場合、ユーザーがアプリケーションデータを(たとえばSDカードに)バックアップできるようにしたいと思います。私がアプリケーションデータとは、設定とSQLiteデータベースを意味します。また、データを復元できるようにしたいと思います。
BackupManagerでこれを行うことは可能ですか?はいの場合、誰かが私に簡単な例を教えてもらえますか?
android - Google バックアップ サービスへの共有設定の Android バックアップが機能しない
ユーザーが電話を紛失したり、新しい電話にアップグレードしたりしても、データが失われないように、AndroidアプリでデータをGoogleバックアップにバックアップする方法を調査して従いました。ただし、テスト (自分でアプリを使用してからアンインストールしてから再インストール) すると、データは復元されません。これが私がやったことです。おそらく、誰かが何が間違っているかを理解できるでしょう。
- Google からバックアップ キーを申請済み
次のコードをマニフェスト ファイルに配置しました (キーの代わりにキーの値を追加し、packageName にはアプリのパッケージ名を使用しました)。
/li>MyPrefsBackup
次のコードでクラスを作成しました。バックアップしたい共有設定ファイルの名前は UserDB と呼ばれます。に関する限りPREFS_BACKIP_KEY
、私はそれを prefs と呼びました。私が理解していることから、これはマニフェスト ファイルに含まれるキーと同じキーではありません。
コード:
BackupManager mBackupManager = new BackupManager(this);
次のステップでバックアップマネージャーを呼び出すメインクラスに追加しました最後に、私のメイン プログラムでは
/li>backupHelper
、次の行でデータが変更されたときに呼び出します。
どんな助けでも大歓迎です。
android - SharedPreferences ファイル全体の Android バックアップ
Android アプリで sharedpreferences ファイルのバックアップを取得しようとしてきましたが、今のところ機能していません。開発者ガイドの簡単な Google コードを使用しています。MyPrefsBackup
以下は、クラス のコードです。
PREFS_BACKUP_KEY
実際には、データを保存した特定のキーでなければならないことにようやく気付いたと思います。「設定」を使用しただけなので、データがバックアップされていなかったのだと思います。ただし、ファイルにかなりの量のデータを保存しているため、個々のキーをすべて指定せずにファイルSharedPreferences
全体を保存するにはどうすればよいですか。SharedPreferences
(一部のキーはアプリによって生成されるため、ユーザーがデータを入力するまで、それらが使用されているかどうかさえわかりません)。
BackupHelper
クラスにファイル全体をバックアップするように指示する方法はありSharedPreferences
ますか?
android - BackupAgentHelper の onBackup() メソッドを呼び出せません
私はデータのバックアップを取って同じものを復元するクラスを持っています。APIデモで与えられた例を参照しました。しかし、それはまったく機能しません。
誰でもこの問題について私を助けることができますか?
Android Manifest.xml
MyActivity.class
MyBackupAgent.class
android - Android マーケットからの再インストール時に BackupAgent が機能しない
BackupAgentHelper
1.6 の下位互換性を含め、ドキュメントに従って を実装して、すべてのSharedPreferences
. エミュレータ Android 2.2 でテストするとき、および USB 経由でストック Android 2.3.3 を実行する私のデバイスで実行するときは、問題なく動作しています。これらの両方のテスト ケースで、次を発行しますadb shell bmgr run
。これにより、バックアップがトリガーされます。
しかし、Android マーケットからアプリを再インストールすると、すべてSharedPreferences
消えてしまいます。ドキュメントには、それdataChanged()
が呼び出された後、「バックアップマネージャーは、将来の適切な時期にバックアップエージェントの onBackup() メソッドを呼び出す」と記載されています。結構ですが、システムが実際にバックアップを行う理由を知っている人はいますか? 私の場合、これは起こっていないと思います。
ドキュメントには、「デバイスを使用している場合は、システム設定を開き、プライバシーを選択してから、データのバックアップと自動復元を有効にしてください。」しかし、そのオプションは私のデバイス(SE Xperia Mini)にはありません。このオプションは常に有効になっており、オフにすることはできないと推測できます。私はスウェーデンのテリアをオペレーターとして使用しています(それが重要な場合).
マーケットから再インストールするとバックアップが機能しないのに、エミュレーターを使用し、USB 経由でデバイスを使用すると完全に機能する理由を知っている人はいますか?
android - BackupAgentは何もしません
マニフェスト:
コード:
私がトップレベルではなくPrefsBackupAgent
、トップレベルにいることは重要ですか?また、参考までに、ログに「バックアップ」が表示されていません。com.backme
com.backme.utils