@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

adb backup で Android 端末のバックアップを作成する(9)

adb backup の -shared オプションですが、内蔵ストレージ、SDカード含めストレージのバックアップを取る事ができる点は便利なのですが、古いバージョンでは不具合があったり少し注意が必要なオプションです。

十分確認できていないのですが、Andrillerの作者がTwitterでAB経由でサイズの問題があったので修正したってコメントを書いてましたので、このあたりは使うツールによっても色々とあるのかもしれません。

また、Android 4 系では、SDカードへのアプリケーションのインストール自体が制限されているようですので、アプリケーションのバックアップという点だけで見た場合にはそれほど大きな意味はないかもしれません。

次に Android 4.4.x(KitKat)では、SDカードへのアプリケーションからの書き込みも制限という事のようですね。

KitKat端末では今後アプリからMicro SDカードへの書き込みができくなる模様
http://juggly.cn/archives/106598.html

Android 4.4でSDカードにファイルを書き込む
http://qiita.com/ariarijp/items/aa365ff47b6e572be3d4

試しに、手元の Android 4.4.2 で写真を撮り保存先としては内蔵ストレージを指定しておきます。次にSDカードへの移動またはコピーをしようとして写真を使って従来の共有のメニューから SD カードを指定する方法は取れないように見えます。

手元の Android は 4.4.2 ですので、標準でインストールされている File Commander を使った場合には、コピー&ペーストにより SD カード上のメディアにコピーする事ができました。

SDカードに写真データがある状態で、adb backup -shared -all コマンドを実行し、作成できた .ad ファイルを tar へ変換・展開して中身を確認してみます。

手元の Android は Xperia Ultra Z ですが、tar を展開すると shared フォルダ配下に 0 と 1 の二つのフォルダが作成されています。

フォルダ 0 が内蔵ストレージで、フォルダ 1 が SD カードという事になります。

保存しているデータ容量に依存しますが、例えば手元では(暗号化なしの状態)約 6GBのバックアップファイルが作成されました。

残念ながら手元の Experia Ultra Z ではマルチユーザーモードが使えない為、マルチユーザーモードでのストレージのバックアップがどうなるかは未確認です。

 

 

adb backup で Android 端末のバックアップを作成する(8)

adb backup のオプションには -shared | -noshared があり、SDカード内データのバックアップを指定できます。

Android Backup Extractor の Readme.txt には下記記述があり、どうやら古いバージョン?のバックアップには問題があるようです。

Creating a backup with -shared flag has know issues (corruption)

具体的にどのバージョン段階でのお話か記述がないのですが、Googleで検索してみたところ下記のツールがありました。このツールではバージョン 4.0.4/4.0.4 では破損状況になる(データは大丈夫)という事のようですね。

rebuild-adb-backup
https://github.com/rmgrimm/rebuild-adb-backup

This program aims to rebuild ADB backup files that were corrupted by --shared on Android versions 4.0.3 / 4.0.4.

The corrupt ADB backup files are still fully usable and contain no data loss. Instead, the problem is that an uncompressed chunk of data is written to the file directly -- bypassing any encryption and all compression. Additionally, this happens before the encryption/compression are able to finish writing out the compressed data which causes decryption and inflation routines to fail.

 他にも Google で adb backup shared issues などで検索すると、4.2 段階でも既知の不具合があるといった情報があったりしますので、古いバージョンの 4 系を使っているケースでは、shared オプションの指定は避けた方が無難かもしれませんね。

もしくは、展開できるのを確認した上でオプションを付与するかですが。。。

 

adb backup で Android 端末のバックアップを作成する(7)

adb backup のオプションで パッケージ名を指定する事で、個別アプリケーションのバックアップを行う事ができます。

デバイス内のアプリケーションを確認するには、adb shell pm list packages コマンドを使うことが出来ます。下記では -3オプションによりサードパーティのアプリケーションにリストを絞っています。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb shell pm list packages -3
package:com.linkedin.android
package:com.sonymobile.comicpirate
package:com.akazoo.music
package:jp.co.netvision.WifiConnectWI2
package:com.qoowaa.act
package:com.sonyericsson.trackid
package:jp.co.yahoo.android.yjtop
package:com.sonyericsson.androidapp.recorder
package:com.apalon.calculator.gp
package:com.evernote
package:la.droid.qr
package:com.hulu.plus.jp
package:jp.naver.line.android
package:de.gavitec.semc
package:jp.co.yahoo.android.apps.transit
package:com.sonymobile.androidapp.diagnostics
package:com.pixlr.express
package:com.ntt.voip.android.com050plus
package:jp.radiko.Player
package:com.mobisystems.office
package:com.whatsapp
package:wni.WeathernewsTouch.jp
package:com.twitter.android
package:jp.ad.iij.couponswitch
package:com.box.android
package:Unyverse.sony
package:com.facebook.orca
package:com.sony.gsmguxmk.xperiaprivilege2012
package:com.sony.playmemories.mobile
package:com.sony.tvsideview.phone

バックアップしたいアプリケーションを確認した後、adb backup コマンドでパッケージを指定してバックアップします。(Protectedの場合には、この方法ではバックアップは取れませんが)

例えば以下のようにパッケージ名を指定して実行します。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb backup -apk -obb jp.naver.line.android
Now unlock your device and confirm the backup operation.

作成されたバックアップファイルを android backup extractor で tar 形式データに変換・展開すると、該当パッケージのフォルダのみが出力されている事を確認できます。

 

android backup extractor にはバックアップファイルを分割する sh スクリプトも含まれています。adb-split.sh を使うことでバックアップファイルをパッケージ毎に分割して出力してくれます。(先にCygwin環境にstar.exeをコピーしておく必要があります)

adb backup -apk -obb -all

バックアップを作成して、スクリプトを実行してみますがstarコマンドでこけました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
star compression failed at android. Aborting.

 手元ではCygwin64 を使っていたのですが、32bit 版に変更してから実行してみたところ、問題なくパッケージ毎に分割されたバックアップファイルが作成できました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
cygwin warning:
MS-DOS style path detected: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils\0.xml
Preferred POSIX equivalent is: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils/0.xml
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
Done
Creating individual adb backups...
Done
Checking for apk existence...
Warning: apk not found in android
Warning: apk not found in com.android.apps.tag

Warning: apk not found in com.sonymobile.twitter.account
Warning: apk not found in com.svox.pico
Warning: apk not found in com.vmware.mvp.enabled
There are one or more apk missing. Generating apk-missing.html
Cleaning temporal files...
Done
Backup splitting complete.

 APKファイルが無いパッケージについては、apk-missing.html というファイルが生成されていますので、そちらで確認する事ができます。

 

雑談: 週末読書 7/20

今週は「シャーロック・ホームズの思考術」を図書館で借りてきて読んでいました。この本も残念ながらKindle版がないのですが、内容的にはブラックスワンと同じく何度も読み返し、よく考える必要がある本ですね。 

シャーロック・ホームズの思考術

シャーロック・ホームズの思考術

 

 内容としては、シャーロックホームズを題材に、脳における追認バイアスをどう扱うべきか、どう観察し考えるか?という点をかなり詳細に説明しています。最初は謎解きの説明かと思って読み始めたのですが、そうではなくむしろブラックスワンの内容に近いと感じますし、実際タレブ氏の名前も出てきます。

この本が面白いのは、追認バイアスを避けて考える為にはどうすればよいのか?といった点について色々と解説されている点でしょうか。ホームズを題材としてはいますが、脳が勝手に考える間違いにどう対抗すべきか?ということが主題のようにも思えます。

この書籍では「ワトスン・システム」と「ホームズ・システム」という二つの考え方について解説しており、章によっては練習問題?みたいなものが出てきます。

自分がやった練習問題はどれも間違えて「ワトスン・システム」による考え方になってしまいました。なかなかホームズのように考えることは出来ない、ということが良く分かります(笑)

シャーロック・ホームズの物語からの引用部分もかなりあり、ついついそちらのお話を再度読み直したくなります。この本を読み進めては正典を読んで楽しみ、再びこの本に戻るという読み方になってしまいましたが、久しぶりに読むシャーロック・ホームズはやはり面白いですね。

 この本で正典として参照している内容としては以下などがありますので、手元に置いておくとこの本は読み進めやすいと思います。個人的には新潮文庫のを揃えていますが、いまだと青空文庫ふくめ色々と種類がありますね。

緋色の研究 (新潮文庫)

緋色の研究 (新潮文庫)

 

   

四つの署名 (新潮文庫)

四つの署名 (新潮文庫)

 

  

バスカヴィル家の犬 (新潮文庫)

バスカヴィル家の犬 (新潮文庫)

 

  

シャーロック・ホームズ最後の挨拶 (新潮文庫)

シャーロック・ホームズ最後の挨拶 (新潮文庫)

 

  

シャーロック・ホームズの冒険 (新潮文庫)

シャーロック・ホームズの冒険 (新潮文庫)

 

  

シャーロック・ホームズの帰還 (新潮文庫)

シャーロック・ホームズの帰還 (新潮文庫)

 

  

恐怖の谷 (新潮文庫)

恐怖の谷 (新潮文庫)

 

 

adb backup で Android 端末のバックアップを作成する(6)

adb backup で取得したバックアップデータ内にあるパッケージフォルダと、adb shell pm list packages で取得したリストを比較してみます。

手元の Xperia Ultra Z には幾つかのアプリケーションを追加でインストールしていますが、adb shell pm list packages では 308件が確認できました。

これに対して、adb backup コマンドで取得したデータを変換・展開してみたフォルダとしては 202件と、106件の差異がありました。

以下は、adb backup コマンドで取得したバックアップファイル内でパッケージのフォルダが確認できなかったサンプルリストになります。

android.res.overlay
com.android.backupconfirm
com.android.bluetooth
com.android.browser.res.overlay
com.android.certinstaller
com.android.defcontainer
com.android.exchange
com.android.inputdevices
com.android.internal.res.overlay
com.android.keychain
com.android.location.fused
com.android.packageinstaller
com.android.phone
com.android.printspooler
com.android.providers.contacts
com.android.providers.partnerbookmarks.res.overlay
com.android.settings
com.android.sharedstoragebackup
com.android.shell
com.android.stk
com.android.systemui
com.android.vpndialogs
com.box.android
com.dsi.ant.server
com.estrongs.android.pop
com.evernote
com.google.android.apps.books
com.google.android.apps.magazines
com.google.android.configupdater
com.google.android.gms
com.google.android.gsf
com.google.android.partnersetup
com.jensdriller.contentproviderhelper
com.kakao.talk
com.pixlr.express
com.qualcomm.location
com.qualcomm.wfd.service
com.sony.nfx.service.WirelessControllerManagerService
com.sonyericsson.advancedwidget.clock
com.sonyericsson.advancedwidget.music
com.sonyericsson.advancedwidget.onoff
com.sonyericsson.advancedwidget.photo
com.sonyericsson.advancedwidget.recentcalls
com.sonyericsson.advancedwidget.weather
com.sonyericsson.album.overlay
com.sonyericsson.android.bootinfo
com.sonyericsson.android.semcrilextension
com.sonyericsson.android.servicemenu
com.sonyericsson.android.wakeup
com.sonyericsson.capabilities.res.overlay
com.sonyericsson.crashmonitor
com.sonyericsson.credentialmanagerservice
com.sonyericsson.customizedsettings
com.sonyericsson.extras.liveware.product.res.overlay
com.sonyericsson.idd.agent
com.sonyericsson.initialbootsetup
com.sonyericsson.mtp.extension.factoryreset
com.sonyericsson.mtp.extension.update
com.sonyericsson.music
com.sonyericsson.music.product.overlay
com.sonyericsson.psm.sysmonservice
com.sonyericsson.r2r.client.res.overlay
com.sonyericsson.settings
com.sonyericsson.settings.wifi
com.sonyericsson.setupwizard
com.sonyericsson.setupwizard.res.overlay
com.sonyericsson.shutdownanim
com.sonyericsson.simcontacts.res.overlay
com.sonyericsson.soundenhancement
com.sonyericsson.startupflagservice
com.sonyericsson.textinput.uxp
com.sonyericsson.textinput.uxp.dictionaries
com.sonyericsson.trackid.res.overlay
com.sonyericsson.tvout.mhl
com.sonyericsson.unsupportedheadsetnotifier
com.sonyericsson.updatecenter
com.sonyericsson.usbotg
com.sonyericsson.uxp
com.sonyericsson.vendor.backuprestore
com.sonyericsson.xhs
com.sonymobile.advancedwidget.sonyselect
com.sonymobile.advancedwidget.topcontacts
com.sonymobile.anondata
com.sonymobile.aptx.notifier
com.sonymobile.cameracommon.permission
com.sonymobile.crashmonitor.system
com.sonymobile.drm.ui
com.sonymobile.enterprise.service
com.sonymobile.faceregistration
com.sonymobile.mirrorlink.system
com.sonymobile.moviecreator
com.sonymobile.phoneusage
com.sonymobile.playanywhere
com.sonymobile.premiumsmsupdate
com.sonymobile.remotefileaccess
com.sonymobile.remotestorage
com.sonymobile.runtimeskinning.core
com.sonymobile.settings.wifi.hotspot2
com.sonymobile.simlockunlockapp
com.sonymobile.smallapps.clipper
com.sonymobile.superstamina
com.sonymobile.tvout.wifidisplay
com.sonymobile.whitebalance
org.codeaurora.bluetooth
org.codeaurora.ims
org.simalliance.openmobileapi.service

 

adb backup で Android 端末のバックアップを作成する(5)

ここまでの adb backup コマンドでは、-apk は指定していませんでした。今回は -apk を指定して実行してみます。

adb backup -apk -all

オプションとして apk を指定した場合、インストールされているアプリケーションの apk ファイルもバックアップ対象に含まれる事になりますが、注意点としてバックアップされないアプリケーションもあるということです。

Android Backup Extractor の Readme.txt には下記の記述があります。

- Some apps include a policy where the apk is never backed up even if specified.

 apkオプションを付与してadb backup を実行し、.ab ファイルを tar 形式に変換・展開すると、アプリケーション毎に a フォルダが作成され、そこに .apk ファイルが保存されている事が確認できます。

 デバイスにインストールされているアプリケーションは、adb shell から pm(パッケージマネージャ)コマンドを使うことで確認できます。

Using package manager (pm)

http://developer.android.com/tools/help/adb.html#shellcommands

 オプションとして -f を指定するとパスを含めて確認できます、サードパーティだけに絞る場合には -3 が使えます。

shell@C6833:/ $ pm list packages -f
pm list packages -f
package:/system/app/CameraExtensionPermission.apk=com.sonyericsson.cameraextension.permission
package:/system/priv-app/DefaultContainerService.apk=com.android.defcontainer
package:/system/priv-app/CameraCommon.apk=com.sonymobile.cameracommon
package:/system/app/OrangeTheme.apk=com.sonyericsson.orangetheme
package:/system/priv-app/SemcPhone.apk=com.android.phone
package:/system/app/Initial-boot-setup.apk=com.sonyericsson.initialbootsetup
package:/system/priv-app/filecommander.apk=com.mobisystems.fileman
package:/system/app/UnsupportedHeadsetNotifier.apk=com.sonyericsson.unsupportedheadsetnotifier
package:/system/priv-app/PMSservice.apk=com.sonyericsson.providers.protectedmedia
package:/system/priv-app/SEMCFacebookProxy.apk=com.sonyericsson.facebook.proxylogin
package:/data/app/com.linkedin.android-1.apk=com.linkedin.android
package:/system/app/Bluetooth.apk=com.android.bluetooth
package:/system/priv-app/CalendarProvider.apk=com.android.providers.calendar
package:/system/app/SmallAppsLauncher.apk=com.sony.smallapp.launcher

ここで、パスに /priv-app/ が含まれている場合には保護されているのでバックアップ対象になってきません。

残念ながら手元の Android には有料アプリケーション入れていませんので、/data/priv-app/ になっているものがないので実物確認できていませんが。。。

 

KakaoTalk のように package:/data/app/com.kakao.talk-1.apk=com.kakao.talk となっていて、/priv-app で ない 場合でもバックアップ対象に含まれないものがあるそうで、これは別の制御によるもののようですね。

大徳さんから教えていただいた情報によると、AndroidManifest.xml ファイルにて android:allowBackup="false" が設定されている影響ではないか?ということでしたので、実際に確認してみたところそうなっていました。

APK のみをバックアップ対象外にするのか、アプリケーション全体でバックアップの対象外にするのかを細かく制御できるのか理解できていませんが、パッケージリストと比較して取れてパッケージを確認ですかね。

 

adb backup のオプションで -apk を指定すれば APK ファイルのバックアップが可能ですが、アプリケーションが拡張ファイルを持っている場合には、-obb オプションを指定する事でバックアップが可能になります。

(-obb|-noobb enable/disable backup of any installed apk expansion (aka .obb) files  associated with each application; the default is noobb.)

 

adb backup で Android 端末のバックアップを作成する(4)

adb backup コマンドでバックアップを取る際、端末側の確認画面でパスワードを指定する事により、バックアップファイルを暗号化する事ができます。

Android Backup Extractor に添付されている Reame.txt には以下の記載があります。

- Android debugging bridge is very slow: about 1 MBps if the backup is password encrypted, 1.6 MBps if not, so consider that backing and restoring may take a long time.

バックアップにパスワードを設定した場合、かなりバックアップ速度が遅くなり、おおよそ 1MBps という事ですので対象サイズによってはかなり待つ事になります。60MB/分、3,600MB/時間 だとすると、35GB のデータがあると、暗号化した場合には 10時間程度かかるという事でしょうかね。

 

暗号化されたバックアップファイルを、Android Backup Extractor  に追加モジュールなしで tar ファイルに変換しようとした場合、以下のようにエラーになります。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar 139
Strong AES encryption not allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: AES-256
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illega
l key size
at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:350)
at org.nick.abe.Main.main(Main.java:64)
... 5 more
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
at javax.crypto.Cipher.implInit(Cipher.java:790)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1348)
at javax.crypto.Cipher.init(Cipher.java:1282)
at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:264)
... 6 more

Readme.txt に記載がありますが、AES 256bit 暗号に対応したバックアップファイルを展開するには、Java の環境に追加のパッケージが必要になります。(輸出規制の関係ですね)

ポリシーファイルを適用(Javaの対象フォルダにコピー)すると、暗号化されたバックアップファイルを tar ファイルに変換できるようになります。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar 139
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: AES-256
IV: 12DBE921F10A0F2AD12D3086BCDFE35D
MK: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
MK checksum: 6286D0A09C6BF549F1129255BACA9CBE7E28C956074AB79ED1DFCBB359CBA08D
key bytes: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
salt bytes: C6F298CBA06A053DE9D0C5162CFC0FBE6AC4ADEC380692DF0EBA4E0B18CC1047D708
09413232A244463496A60DC9230B3FCD27F74A0A61CBB439E7336ACFC321
MK as string: [.????ロ?AハフD"a゙'??ユx???'???H]
Key format: RAW
Calculated MK checksum (use UTF-8: false): 2D8040C3E91E8823FC72F813FC68FB2AEBCBD
E42ACDC80361836373730D52743
Checksum does not match.
key bytes: 2EFB0CC5EE17B49B3F418A8C442261119E1327A1AD9578F8EBC627F611CBF548
salt bytes: C6F298CBA06A053DE9D0C5162CFC0FBE6AC4ADEC380692DF0EBA4E0B18CC1047D708
09413232A244463496A60DC9230B3FCD27F74A0A61CBB439E7336ACFC321
MK as string: [.????ロ?AハフD"a゙'??ユx???'???H]
Key format: RAW
Calculated MK checksum (use UTF-8: false): 6286D0A09C6BF549F1129255BACA9CBE7E28C
956074AB79ED1DFCBB359CBA08D
234758656 bytes written to backup.tar.

暗号化した場合と、暗号化しなかった場合での差異についてですが、手元で連続して取得したデータを WinMargeで比較した範囲では、ファイルやフォルダの差異は発生していないように見えます。

デフォルトのオプション以外を指定して実行した場合に、取得範囲に差異が出るかは未確認です。

 

adb backup で Android 端末のバックアップを作成する(3)

adb backup コマンドを使いバックアップファイルを作成しましたが、このバックアップファイルの内容を展開・確認するには環境の準備が必要になります。

①Java 環境、②Cygwin環境 を手元の Windows 環境で設定しておく必要がありますので、それぞれ配布元のページからインストールしておきます。

Javaはインストール後に環境変数PATHに Java をインストールしたパスを設定しておきます。

次に、バックアップファイルを展開する為のツールとして、Android Backup Extractor を下記 URL からダウンロードします。adb backup で作成したバックアップファイルはそのままでは取り扱いが出来ないので、Android Backup Extractor  などのツールを利用して一般的に扱いが可能なデータ形式に変換する必要があります。*1

Android Backup Extractor

http://sourceforge.jp/projects/sfnet_adbextractor/

 Windows用のandroid-backup-extractor-20140615-bin.zipを展開すると、abe.jar ファイルがありますので、これをバックアップファイルと同じ場所にコピーしておきます。

*2

Javaのインストールと、環境変数にパスが設定されていれば、コマンドプロンプトからabe.jar を実行してバックアップファイルを tar 形式ファイルに変換する事ができます。

下記では事前に Backup フォルダに abe.jar ファイルと、adb backup コマンドで作成したバックアップファイル(暗号化なし)をコピーして置き、それをtar形式ファイルへ変換しています。

c:\backup>java -jar abe.jar unpack backup.ab backup.tar
Strong AES encryption not allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
234871296 bytes written to backup.tar.

作成した backup.tar ファイルを Cygwin 環境で tar コマンドを使って展開してみます。

 $ tar -xvf backup.tar

appsというフォルダが作成され、その配下にファイルが展開されている事が確認できるはずです。

さて、tar 形式ファイルの展開ですが、WinRAR でも展開する事ができますが、Cygwin の tar で展開した時とでは、手元では差異が発生しています。TARファイルを展開する時に使うツールによって差異が出るのは個人的にはよくあるケースだと考えています。

Cygwinで展開した場合:

ファイル数: 5829

フォルダ数: 538

サイズ: 219MB

バイト数:230,122,305

WinRARで展開した場合:

ファイル数:5826

フォルダ数: 539

サイズ: 219MB

バイト数: 230,077,935

 具体的な差異内容については確認していませんが、WinRARで展開した場合には同一パスのエラーが出たりしますので、Cygwin 環境下のtarコマンドで展開する方が安全ではないかと思われます。(少なくとも正しく展開できると確認できているツールを選択する必要があります)

もし、Cygwinのtarではなく別のツールを使う場合には、事前に出力される件数に差異が発生しないかを確認してから使う方がよいと思います。

Cygwinのtarにより展開されたファイルのタイムスタンプですが、作成日時は展開日時になりますが、ファイルの最終更新日時はオリジナルが維持された状態になっているはずです。

 

*1:Android Backup Extractor ツールは、Javaベースになっていますので使う為にはJavaの環境が必要になります。

*2:暗号化されたバックアップファイルの展開には更に追加でファイルが必要になります、Readme.txt に詳細が書かれています。

adb backup で Android 端末のバックアップを作成する(2)

adb devices コマンドでデバイスが認識できている状況が確認できましたので、次にバックアップを作成してみます。

adb backup には幾つかのオプションがありますが、まずはオプション指定せずにそのまま実行してみたいと思います。

adb backup -all

コマンドを実行すると、端末側でフルバックアップの許可を求める画面が表示されます。ここでは暗号化のパスワード入力を求められますが、入力せずにそのまま「データをバックアップ」をタップしてバックアップを開始します。

C:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb backup -all
Now unlock your device and confirm the backup operation.

上記ではオプションとして -all のみを指定しています。この場合、その他のオプションとしてはデフォルト値として以下が使われます。

-f

バックアップファイル名はbackup.abとなりカレントフォルダにバックアップファイルが作成される

-noapk

APKファイルのバックアップは行わない

-noobb

各アプリケーションの .obb ファイルのバックアップは行わない

-noshared

SDカードのバックアップは行わない

-system

システムアプリケーションのバックアップを行う

 コマンド実行後、手元では約 92MB の backup.ab ファイルが作成されました。時間的にも数分で完了する作業になりますが、デフォルト値では APK ファイルなど取ってない項目もあるので、短時間で終わるという事ですね。

 

 

 

adb backup で Android 端末のバックアップを作成する(1)

手元の Android 端末は SONY Experia Z Ultra なのですが、adb backup を使いバックアップを作成しておきたいと思いますので、そのメモとなります。

Android のバージョンは 4.4.2 になりますので、Android 4.0 以降に搭載されたという adb backup コマンドを使うことでバックアップを PC から取得できるはずです。

まずは、SDK をダウンロードしてインストールする必要がありますので、Android SDK の Web から SDK をダウンロードしインストールを完了しておきます。

次に、Android 側の設定になりますが、まずはここで少しはまりました(笑)

以前は、設定⇒開発者向けオプション から USB デバッグを有効にできていましたが、手元の 4.4.2 では「設定」を開いても「開発者向けオプション」の項目がありません。

検索してみると、下記の Web を発見、どうやら標準では表示されない状況になっているようですので、7回タップするというおまじないを実施する必要があるようです。

Nexus 5などのAndroid 4.4(KitKat)を搭載した端末で「開発者向けオプション」を表示する方法
http://juggly.cn/archives/99144.html

①設定 を開く、②端末情報 を開く、③ビルド番号 の項目を 7回タップする、④開発者になった旨の表示が行われる、⑤設定に戻ると「開発者向けオプション」が表示されている、⑥USBデバッグ をチェックする、という一連の作業で Android 側の設定が完了します。*1

USBデバッグを有効にした状態で PC に接続すると、USB Debugging whitelist 機能によりデバイス側で機器の認証画面が表示されますので、OKをクリックします。*2

手元のExperiaではSONYのサイトから該当するUSBドライバーをインストールしないと認識しませんでしたので、ドライバをインストールしています。

New ADB Debug Whitelist Feature in Android 4.2.2

http://www.androidheadlines.com/2013/02/new-adb-debug-whitelist-feature-in-android-4-2-2.html

PCとデバイスが正しく接続され、認識できていれば、adb devices コマンドで機器が認識できている事が確認できます。下記は USB Debugging whitelist  の確認画面でまだ認証をOKしていない状況で adb devices を実行したところです。

C:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb devices
List of devices attached
EP7337CXCZ unauthorized

デバイス側で認証をOKすると、以下になります。

C:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb devices
List of devices attached
EP7337CXCZ device

もし、デバイスがPC側で正しく認識されていない場合には、下記の表示状況になるので、デバイスマネージャでデバイスの状況を確認する必要が出てきます。

C:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb devices
List of devices attached

 

 デバイスが認識されない場合には、大抵 USB ドライバーが正しくインストールされていない可能性が高いと思われます。

SDK には Google USB Driver があるので、まずはこれがインストールされているかを Android SDK Manager で確認します。Installed となっているにも関わらず、デバイスマネージャで不明な機器になっている場合には、機器メーカーが提供しているドライバが必要という事になります。

SONY Experia の場合には Google で型番と USB Driver で検索する事ですぐにドライバを発見する事ができました。メーカーによっては専用ツールなどと一緒にインストールする事になるかもしれませんが、注意すべき点としてドライバだけでなくツールもインストールしたケースでしょうか。

メーカーが提供しているツールには、デバイスとの同期を取る機能が大抵ついていますので、PCとデバイスを接続した時に、自動的に機器の更新や同期を行う設定になっている場合が考えられます。

バックアップを取る前に不要な同期や更新をされるのは困りますので、もしメーカーのツール類が入っている場合には、マニュアルを確認しそういった同期処理が発生しないか、設定で無効化できるかを確認し、無効にしておく必要があります。

 

 

 

 

*1:この設定を変更するには、パスコードやパターンでロックされている場合にはそもそも出来ませんので、まずはロックを解除しての作業になります。

*2:PC側でデバイスドライバが適切にインストールされていないとこの段階で認識されず、何も表示されない状況が発生するはずです。