Android端末をバックアップ・リストアする(1)

N5落として液晶割ったので、N5Xに引っ越しする。
予備のN5Xは、娘にあげてしまったので、VRデモ端末なくなるのがつらい。
1.5kくらいで、N5の中古が買える相場らしいけど、Daydream時代にそれもね。
Daydream対応アップデートを行ったばかりの、ZTE Axon7も5万円強で買えるみたいだけど、850をイマサラという気もする。
とりあえずの移行先はN5Xとして、現在使っている状態をバックアップしておく。

N5X: 写真やダウンロードしたデータを保存する

アプリと設定は、adb backupでバックアップできるのだけど、これには写真データとかダウンロードデータは含まれない。
まず、これらをバックアップする。
USB接続して、端末をファイル転送モードに。Android File Transferアプリから、Macにデータを退避する。
デモ機なので、あんまりデータは入っていない。

N5X: ローカルアプリをバックアップする

さて、移行先のN5Xはデモで使っているので、こちらにもアプリが入っている。
容量のデカいものもあるので、共存はできない感じか。
しかし、自前ビルドで、ビルド環境失われたデモアプリとかも入っているので、これらはバックアップしておきたい。

$ adb shell pm list package | sort
package:android
package:android.autoinstalls.config.google.nexus
package:com.DemoScenes
package:com.HeadsetDemo
package:com.android.backupconfirm
package:com.android.bluetooth
package:com.android.bluetoothmidiservice
package:com.android.bookmarkprovider
package:com.android.calllogbackup
package:com.android.captiveportallogin
package:com.android.carrierconfig
package:com.android.cellbroadcastreceiver
package:com.android.certinstaller
package:com.android.chrome
package:com.android.connectivity.metrics
package:com.android.cts.ctsshim
package:com.android.cts.priv.ctsshim
package:com.android.defcontainer
package:com.android.documentsui
package:com.android.dreams.basic
package:com.android.egg
package:com.android.emergency
package:com.android.externalstorage
package:com.android.facelock
package:com.android.hotwordenrollment
package:com.android.htmlviewer
package:com.android.inputdevices
package:com.android.keychain
package:com.android.location.fused
package:com.android.managedprovisioning
package:com.android.mms.service
package:com.android.mtp
package:com.android.musicfx
package:com.android.nfc
package:com.android.omadm.service
package:com.android.pacprocessor
package:com.android.phone
package:com.android.printspooler
package:com.android.providers.blockednumber
package:com.android.providers.calendar
package:com.android.providers.contacts
package:com.android.providers.downloads
package:com.android.providers.downloads.ui
package:com.android.providers.media
package:com.android.providers.partnerbookmarks
package:com.android.providers.settings
package:com.android.providers.telephony
package:com.android.providers.userdictionary
package:com.android.proxyhandler
package:com.android.retaildemo
package:com.android.sdm.plugins.connmo
package:com.android.sdm.plugins.dcmo
package:com.android.sdm.plugins.diagmon
package:com.android.sdm.plugins.sprintdm
package:com.android.server.telecom
package:com.android.settings
package:com.android.sharedstoragebackup
package:com.android.shell
package:com.android.statementservice
package:com.android.stk
package:com.android.systemui
package:com.android.vending
package:com.android.vpndialogs
package:com.android.wallpaper.livepicker
package:com.android.wallpaperbackup
package:com.android.wallpapercropper
package:com.divegames.divecitycoaster
package:com.divegames.divedeep
package:com.divegames.launcher
package:com.futuremark.dmandroid.application
package:com.google.PlayGround
package:com.google.android.GoogleCamera
package:com.google.android.apps.books
package:com.google.android.apps.cloudprint
package:com.google.android.apps.docs
package:com.google.android.apps.docs.editors.docs
package:com.google.android.apps.docs.editors.sheets
package:com.google.android.apps.docs.editors.slides
package:com.google.android.apps.enterprise.dmagent
package:com.google.android.apps.gcs
package:com.google.android.apps.genie.geniewidget
package:com.google.android.apps.helprtc
package:com.google.android.apps.inputmethod.hindi
package:com.google.android.apps.maps
package:com.google.android.apps.messaging
package:com.google.android.apps.photos
package:com.google.android.apps.plus
package:com.google.android.apps.tycho
package:com.google.android.apps.walletnfcrel
package:com.google.android.backuptransport
package:com.google.android.calculator
package:com.google.android.calendar
package:com.google.android.carrierentitlement
package:com.google.android.configupdater
package:com.google.android.contacts
package:com.google.android.deskclock
package:com.google.android.dialer
package:com.google.android.ext.services
package:com.google.android.ext.shared
package:com.google.android.feedback
package:com.google.android.gm
package:com.google.android.gm.exchange
package:com.google.android.gms
package:com.google.android.gms.setup
package:com.google.android.googlequicksearchbox
package:com.google.android.gsf
package:com.google.android.gsf.login
package:com.google.android.ims
package:com.google.android.inputmethod.japanese
package:com.google.android.inputmethod.korean
package:com.google.android.inputmethod.latin
package:com.google.android.inputmethod.pinyin
package:com.google.android.keep
package:com.google.android.launcher
package:com.google.android.launcher.layouts.bullhead
package:com.google.android.marvin.talkback
package:com.google.android.music
package:com.google.android.onetimeinitializer
package:com.google.android.packageinstaller
package:com.google.android.partnersetup
package:com.google.android.play.games
package:com.google.android.printservice.recommendation
package:com.google.android.setupwizard
package:com.google.android.storagemanager
package:com.google.android.street
package:com.google.android.syncadapters.contacts
package:com.google.android.tag
package:com.google.android.talk
package:com.google.android.tts
package:com.google.android.videos
package:com.google.android.webview
package:com.google.android.youtube
package:com.google.audiospaces
package:com.google.castledefense
package:com.google.cdl
package:com.google.samples.apps.cardboarddemo
package:com.google.vr.cyclops
package:com.google.vr.inputcompanion
package:com.google.vr.ndk.samples.controllerpaint
package:com.google.vr.ndk.samples.treasurehunt
package:com.kinneko.jago360
package:com.kinneko.jago360dive
package:com.lge.HiddenMenu
package:com.lge.entitlement
package:com.lge.lifetimer
package:com.mypaceengine.mmdtest
package:com.qti.qualcomm.datastatusnotification
package:com.qualcomm.atfwd
package:com.qualcomm.qcrilmsgtunnel
package:com.qualcomm.qti.rcsbootstraputil
package:com.qualcomm.qti.rcsimsbootstraputil
package:com.qualcomm.timeservice
package:com.quicinc.cne.CNEService
package:com.unity3d.vrstandardassetscb
package:com.verizon.omadm
package:jp.bluetone.hardwarechecker
package:org.codeaurora.ims

なんか、157アプリも入っているんだね。
多すぎてよくわかんないな。
logcatで表示しながらアプリ起動するか、intentでコマンドでアプリ起動するとわかるか。
logcat死ぬほど出るので、オススメできない。

02-09 14:48:00.430 879 3671 I ActivityManager: Start proc 13125:com.google.PlayGround/u0a103 for activity com.google.PlayGround/com.google.unity.GoogleUnityActivity

設定->アプリからは65アプリがインストールされているのがわかる。
pm list packageで出てくる大半は、システムアプリ。表示しなくていいのに。
バックアップが必要なのは、このくらいしかなかった。前にvuforia試した時のアプリはいなくなっていた。

  • package:com.google.PlayGround
  • package:com.kinneko.jago360
  • package:com.kinneko.jago360dive

PlayGroundは、ソースを改変してDaydream機でなくてもリモコン動くようにしたやつ。
あとの2つは自前アプリ。

$ adb backup -f com.google.PlayGround -apk com.google.PlayGround
Now unlock your device and confirm the backup operation...

端末側に表示が出た。
端末が暗号化されているので、バックアップも暗号化がいるそうな。パスワードを入れろという。
端末を暗号化した記憶はないんだけどな。どうも、デフォルトで暗号化されているようだ。

$ ls -l com.google.PlayGround
-rw-r----- 1 kinneko staff 0 2 9 15:01 com.google.PlayGround

どゆこと?
パスワードの間違いとかも表示されない。
adb backupでは一括しかできないの?
オプション間違いか。

$ adb backup -apk com.google.PlayGround -shared -f com.google.PlayGround.ab
Now unlock your device and confirm the backup operation...

端末側でパスワードを入れ、「データをバックアップ」を押してしばらく待つとバックアップできたようだ。

$ ls -lh com.google.PlayGround.ab
-rw-r----- 1 kinneko staff 142M 2 9 15:09 com.google.PlayGround.ab

アプリ毎にこれを繰り返すのは超めんどくさい。

N5X: 端末のリセット

Felica対応端末ではないので、おサイフケータイは使っていないから、これは問題なし。
指紋認証も設定していないので、これも問題なし。
設定->セキュリティ->スマートフォンの暗号化に設定があるのだけど、暗号化されていて解除できないようだ。
設定->バックアップとリセット->自動復元をオフに。
設定->バックアップとリセット->データーのバックアップをオフに。
設定->バックアップとリセット->データの初期化を実行する。"モバイル端末をリセット"を押し、再確認の"すべて消去"も押す。
消去後、自動的に再起動してくる。
Welcome画面が出れば成功。