1

BackupAgentHelper1.6 の下位互換性を含め、ドキュメントに従って を実装して、すべてのSharedPreferences. エミュレータ Android 2.2 でテストするとき、および USB 経由でストック Android 2.3.3 を実行する私のデバイスで実行するときは、問題なく動作しています。これらの両方のテスト ケースで、次を発行しますadb shell bmgr run。これにより、バックアップがトリガーされます。

しかし、Android マーケットからアプリを再インストールすると、すべてSharedPreferences消えてしまいます。ドキュメントには、それdataChanged()が呼び出された後、「バックアップマネージャーは、将来の適切な時期にバックアップエージェントの onBackup() メソッドを呼び出す」と記載されています。結構ですが、システムが実際にバックアップを行う理由を知っている人はいますか? 私の場合、これは起こっていないと思います。

ドキュメントには、「デバイスを使用している場合は、システム設定を開き、プライバシーを選択してから、データのバックアップと自動復元を有効にしてください。」しかし、そのオプションは私のデバイス(SE Xperia Mini)にはありません。このオプションは常に有効になっており、オフにすることはできないと推測できます。私はスウェーデンのテリアをオペレーターとして使用しています(それが重要な場合).

マーケットから再インストールするとバックアップが機能しないのに、エミュレーターを使用し、USB 経由でデバイスを使用すると完全に機能する理由を知っている人はいますか?

4

2 に答える 2

2

プライバシー設定のバックアップと復元の設定はベンダー固有です。Privacy クラスから取得した次のコード フラグメントを参照してください。

    // Vendor specific
    if (getPackageManager().resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) {
        screen.removePreference(findPreference(BACKUP_CATEGORY));
    }

Sony Ericsson は、条件ステートメントをその内容に置き換え、この設定を無条件に削除します。

このコードはApache Licenseでカバーされているため、SE はソース コードを提供する必要はありません。この目的でのリバース エンジニアリングが合法である国に住んでいる場合 (私は弁護士ではありません)、次のことができると思います。

  1. デバイスから設定パッケージをプルします。

    adb pull /system/app/Settings.apk Settings.apk
    
  2. apktoolを使用して settings.apk をデコードします。

    apktool d -s Settings.apk
    
  3. 新しく作成された設定ディレクトリには、classes.dex があります。Smali を使用して逆コンパイルするには (code.google.com にあります):

    baksmali classes.dex -o classes
    
  4. 最後に、あなたはclasses/com/android/settings/PrivacySettings.smaliに興味があります

Android Emulator から取得した Settings.apk で同じことを行い、これら 2 つのファイルを比較できます。

私もXperia mini proSK17i)を持っていますが、その好みもありません。

于 2011-10-14T05:15:52.707 に答える
0

マーケットを使用するときの機能をテストする以前の試みは、(比較的迅速な?) シーケンスですべてを実行することでした。SharedPreferences のいくつかのパラメーターを変更した後、電話を再起動してからアプリをアンインストールしました。シャットダウンすると、保留中のバックアップ同期アクションがトリガーされるのではないかと考えました。残念ながら、それはバックアップ サーバーへの同期をトリガーせず、SharedPreferences が失われました。

次に、有益で有益な部分に進みます。一部の SharedPreferences を変更し、アプリをアンインストールする前に電話を数時間放置しました。次にマーケットからインストールしたときに、SharedPreferences がクラウド バックアップから復元されました。したがって、解決策は、「将来の適切な時期」を実現することでした。この動作は好きではありませんが、 dataChanged() が呼び出されるたびにサーバーと同期できないことがわかっているので、受け入れることができます。

少なくとも、[プライバシー] の下の [データをバックアップして自動復元] オプションがデバイスに存在しない場合でも、BackupAgent を使用してバックアップが実行されることがわかっています。それを行うには、ある程度の(未定義の)時間が必要です。

于 2011-08-31T12:04:54.320 に答える