2

[編集] 私が追加したすべての情報から、これは、同じ apk で同じビルドであるにもかかわらず、同じ UID の下で新しいアプリとして自分自身を登録するアプリが原因である可能性が高いようです。どこから修正を開始するかについてのアイデアは大歓迎です

BackupAgent共有設定ファイルのみをバックアップしたいので、Helper クラスを使用してアプリに を実装しました。

バックアップコールはうまくいっているようです。アプリが実行した後に「bmgr run」を実行するとdataChanged()、logcat で次のようになります。

06-17 09:58:41.618: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d66190 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.618: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d66190 uk.co.randomicon.rstb}
06-17 09:58:41.628: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@408864e8
06-17 09:58:41.628: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40b2f328
06-17 09:58:41.638: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d75cc0 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.648: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d75cc0 uk.co.randomicon.rstb}
06-17 09:58:41.648: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@40708660
06-17 09:58:41.648: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40b08e50
06-17 09:58:41.668: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d6b420 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.668: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d6b420 uk.co.randomicon.rstb}
06-17 09:58:41.668: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@40789930
06-17 09:58:41.668: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40ae3b70
06-17 09:58:41.688: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d92b38 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.688: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d92b38 uk.co.randomicon.rstb}
06-17 09:58:41.688: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@408521c0
06-17 09:58:41.688: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40acfd20
06-17 09:58:41.708: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40dd4c50 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.708: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40dd4c50 uk.co.randomicon.rstb}
06-17 09:58:41.708: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40ababb0
06-17 09:58:41.718: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@40887ee0
06-17 09:58:41.728: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d725b0 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.728: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d725b0 uk.co.randomicon.rstb}
06-17 09:58:41.728: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40aaa058
06-17 09:58:41.728: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@40835bd0
06-17 09:58:41.738: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40da2cd8 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.748: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40da2cd8 uk.co.randomicon.rstb}
06-17 09:58:41.748: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@408769b8
06-17 09:58:41.748: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40a99a20
06-17 09:58:41.768: DEBUG/PerformBackupThread(303): starting agent for backup of BackupRequest{app=ApplicationInfo{40d451b8 uk.co.randomicon.rstb} full=false}
06-17 09:58:41.768: DEBUG/BackupManagerService(303): awaiting agent for ApplicationInfo{40d451b8 uk.co.randomicon.rstb}
06-17 09:58:41.768: DEBUG/BackupHelperDispatcher(6720): handling existing helper 'rstb_prefs' android.app.backup.SharedPreferencesBackupHelper@40708440
06-17 09:58:41.768: DEBUG/BackupManagerService(303): agentConnected pkg=uk.co.randomicon.rstb agent=android.os.BinderProxy@40a89c58

ただし、すぐに実行したとしても、「bmgr restore」アクションを実行すると、logcat で次のようになります。

06-17 09:38:36.002: DEBUG/BackupManagerService(303): MSG_RUN_RESTORE observer=android.app.backup.IRestoreObserver$Stub$Proxy@40c0ec50
06-17 09:38:36.682: WARN/BackupManagerService(303): Signature mismatch restoring uk.co.randomicon.rstb

復元のコンソール出力は次のとおりです。

restoreStarting: 2 packages
onUpdate: 0 = uk.co.randomicon.rstb
restoreFinished: 0
done

何か案は?アンインストール/消去/何もしていないので、明らかに同じバージョンと署名です。私はすべてバックアップサービスにサインアップしており、キーは正しく入っています。

編集: デバッグ キーの署名付きビルドとしては正常に動作するようですが、エクスポートされ、難読化され、zipalign されたリリース キーの署名付き apk では、このように失敗します。デバッグ ビルドからリリース ビルドにデータを復元しようとしていた場合、それは理にかなっていますが、そうではありません。

edit2:ヘルパー名などを変更しようとしましたが、それでも同じ動作が得られます。デバッグ キーで署名された apk は完全に機能し、バックアップ、アンインストール、再インストールが可能で、自動的に復元されます。キー署名付き apk をリリースすると、毎回これが行われます。内部関数呼び出しが 1 回しかないにもかかわらず、@ 番号が異なるバックアップ呼び出しが繰り返されることに、まだ少し懸念があります。ただし、デバッグ用のものもこれを行うため、完全にそうではありません。

dumpsys バックアップの出力には、パッケージが 4 回表示されます...

Backup Manager is enabled / provisioned / not pending init
Auto-restore is enabled
Last backup pass: 1308330167956 (now = 1308330359754)
  next scheduled: 1308333767956
Available transports:
  * com.google.android.backup/.BackupTransportService
       com.android.inputmethod.latin - 112 state bytes
       com.android.browser - 20 state bytes
       com.android.providers.userdictionary - 8 state bytes
       com.android.vending - 0 state bytes
       android - 172 state bytes
       com.zegoggles.smssync - 100 state bytes
       com.smartandroidapps.audiowidgetpro - 416 state bytes
       org.connectbot - 260 state bytes
       net.cachapa.libra - 96 state bytes
       com.icenta.sudoku.ui - 52 state bytes
       com.android.providers.settings - 36 state bytes
       @pm@ - 378 state bytes
       uk.co.randomicon.rstb - 164 state bytes
    android/com.android.internal.backup.LocalTransport
Pending init: 0
Participants:
  uid: 1000
    com.android.providers.settings
    android
  uid: 10000
    com.android.providers.userdictionary
  uid: 10002
    com.android.browser
  uid: 10022
    com.android.inputmethod.latin
  uid: 10045
    com.android.vending
  uid: 10050
    uk.co.randomicon.rstb
    uk.co.randomicon.rstb
    uk.co.randomicon.rstb
    uk.co.randomicon.rstb
  uid: 10058
    com.zegoggles.smssync
  uid: 10063
    org.connectbot
  uid: 10084
    net.cachapa.libra
  uid: 10094
    com.smartandroidapps.audiowidgetpro
  uid: 10111
    com.icenta.sudoku.ui
Ancestral packages: 8
    com.android.browser
    com.zegoggles.smssync
    org.connectbot
    android
    com.android.vending
    com.android.providers.userdictionary
    com.android.inputmethod.latin
    com.android.providers.settings
Ever backed up: 12
    org.connectbot
    com.zegoggles.smssync
    com.android.browser
    com.icenta.sudoku.ui
    com.smartandroidapps.audiowidgetpro
    com.android.vending
    android
    net.cachapa.libra
    uk.co.randomicon.rstb
    com.android.providers.userdictionary
    com.android.inputmethod.latin
    com.android.providers.settings
Pending backup: 0

edit3: アンインストールと再インストールを繰り返すと、アプリの新しいインスタンスが同じ UID の下に追加され続けます。これは、同じ apk からの同じアプリの同じビルドですが、そのリストで自分自身の新しいインスタンスを作成し続けるだけです。それは正しい行動ですか?ソースを調べたBackupManagerところ、デバッグ モードではマネージャはシグネチャをあまり気にしていないように見えます (正しく読んだ場合)。

4

3 に答える 3

2

設定 -> プライバシーからバックアップを無効にすると、すべてのバックアップが削除されます。次に、それを有効にすると、すべてが再び機能します。

于 2012-01-14T09:08:04.433 に答える
2

私は同じ問題を抱えていて、bmgr wipe <transport> <package>解決しませんでした。

私を助けたのは、バックアップを次から切り替えることでしたadb shell

bmgr enable false
bmgr enable true
bmgr run

ところで。私は「通常の」ユーザーでしたが、次のエラーで失敗しました:

java.lang.SecurityException: uid 2000 does not have android.permission.UPDATE_APP_OPS_STATS.

suと操作が渡されたスーパーユーザーに切り替えました。

于 2014-03-11T11:54:12.540 に答える
1

それはちょうどそれ自体を修正しました。複数のインスタンスはすべてそこにありますが、現在は機能しています。突然、署名の不一致について不平を言うのをやめました。

学んだ教訓は、あなたがそれを正しくやったと確信しているなら、ただ待ってください:P

于 2011-06-17T20:05:01.153 に答える