adb backup でバックアップしたアプリケーション(例えば LINE)のデータを、adb restore で(エミュレータ上の仮想Androidへ)リストアすると、アプリケーションがエラーで起動しなくなります。
この点について、Android_ID が異なる影響を受けるといった情報もありますので、Android_ID について検索した内容をメモしておきたいと思います。
[Android]端末識別子Android_IDを変更する[要ROOT]
http://uchidak.net/change_android_id
上記URLの内容によりますと、data/data/com.android.providers.settings/databases/settings.db ファイル内に Android_ID が定義されているということです。
このファイルへのアクセスには root 権限が必要になるという事で、例えば adb backup -system コマンドでバックアップを作成してたとしても apps\com.android.providers.settings フォルダ配下に settings.db は含まれていません。
エミュレータ上のAndroidのsettings.db を確認してみたところ、secureテーブル内にandroid_id の項目があり、以下のような値が入っている事が確認できました。
"25","android_id","b80a6ca83c6effe6"
これを別の値に切り替えてみました。エミュレータ上のAndroidですので、以下のコマンドで変更されたandroid_id を確認できます。(値は適当です)
root@generic:/ # settings get secure android_id
settings get secure android_id
5cb098378611129e
contentコマンドを使い adb shell content query --uri content://settings/secure でも確認することができますね。(いずれのコマンドも、root権限がなくても実機で同様にandroid_idを確認できます)
Google Playには実機上でこの値を表示してくれるアプリケーションもあるようですね。
ANDROID_ID
http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
さて、android_id を実機と同じに設定した状態(かつ、ネットワークは切断した状態)で、adb backup で作成した LINE のアプリケーションバックアップを、adb restore コマンドからリストアしてみたところ、LINE アプリケーションがクラッシュせずに起動する事ができました。
とはいえ、エミュレータ上の Android にはスタンプのデータなどが無いようで、トークのメッセージは読めますが、スタンプや画像は×マークのアイコン表示となり確認する事はできませんね。
追加で、LINE アプリケーションの機能を使って作成したトーク履歴のバックアップをエミュレータ上の Android にリストアしたところ、バックアップデータ内に含まれていた画像と、恐らく有料ではないスタンプはリストアされ表示できていました。
ここまでのテストで、バックアップデータを実機ではない環境で読むことが可能なことは分かりましたが、実機で読める場合にはもちろんその方が簡単ですね。
第4回 Androidにおけるセキュリティ設計と動作(後編)
http://thinkit.co.jp/story/2012/03/09/3467/page/0/2