個人的にどうしようか悩んでいたケースです。
数年前に外国で購入した256GB内蔵メモリの android スマホをいまだに愛用しているのですが、数年間撮りためた大量の画像や動画をどうやって PC にバックアップしようか悩んでいました。
本ページはこんな方におすすめ
- Android スマホの多数の大容量のファイルを PC に移したい
- adbコマンドはインストール済
- Android 端末の「開発者向けオプション」は有効化済
- Android 8.0 以上のバージョンを使用している
- Android端末とパソコンはUSBケーブルで接続済
巷でよく見かける対応法は次のようなケースです。
- メール、SNSで転送する
- Bluetooth 経由で転送する
- Wi-Fi 経由で転送する
- USB 経由で転送する
- SD カードへまず転送する
今回の私の悩みは、内蔵メモリの半分以上を消費するようになった180GBほどの動画や写真ファイルを、PC にいかに効率よくバックアップするかというのが課題ですので、上の1から3までの方法は、通信が長時間にわたって安定しにくく、しかも速度が遅いので速攻却下です。
現実的には USB ケーブル経由で、android のファイルシステムにアクセスしてデータを取り出す方法ぐらいしか思いつきません。
その前に、android 端末本体の Type-C に USB メモリを繋いで、バックアップ的なものを取っておきます。
今回のミッション
- USB 接続した android デバイスからファイルを PC へコピーする
私が利用したのはトランセンドの「TS256GJF930C」で、Type-A と Type-C の両方の端子のついたものです。Type-C の端子をスマホに繋いで、標準のファイルマネージャからコピーをします。
ところが、Type-C をメモリが塞いでいる間は充電ができないので、180GB(総ファイル数約 155308)ものデータをコピーしているうちに、スマホの方のバッテリーが消耗しきってしまいコピーを充電1回の作業では終わらせることができませんでした。
結局、数回に分けて充電しては、データ転送を停止し、再度充電しては同じことを繰り返すという手作業を行いました。スマホの Type-C を塞いでいても、充電しているわけではなく開発者向けオプションのスリープ防止機能は働きません。特にデフォルト以外のアプリをインストールしていないので、面倒だと思いながらも、スマホの画面消灯を10分にして、ほぼ10分ごとにスマホを起こしてやるという手間をかけました。一回の充電でコピーできたファイル数は、スリープを防止して約 7,000 前後、スリープされたら 2,000 前後という感じです。大半がスマホ撮影の写真ですので、1ファイル数メガ以内、動画の場合なら数ギガほどあります。中断しては、充電して再開を繰り返し一週間ほどかけてバックアップを終えました。
次に行ったのは、「まず SD カードにデータを移す」方法です。私の場合は 512GB のマイクロ SD カードを購入して、ファイルマネージャーからコピー作業を行いました。この場合、スマホに USB ケーブルを挿して充電を行いながら作業ができますので、充電のために作業を停止するような必要はなくなります。
ただ、コピー速度は出ず、遅く、原始的な作業を監視するのも嫌になります。スマホのスリープ機能をうまくオフにできず、結局は3時間以上、作業に時間をとられました。
最終的には USB 接続して adb.exe 使ってコピー
高々スマホのデータコピーなので、これ以上悩むことはやめました。SE 系の人ならだけでも考える方法で、ベタな方法で終わらせます。
方法は以下の通りです。
- Android 端末をデベロッパーモードにする
- Android 端末と Windows PC を USB でつなぐ
- PC のコンソールから adb.exe で PC へコピーする
200GB 程度のコピーならこの方法が一番ベタですが、確実になんとかなりそうに思います。
10GB 程度なら USB でなくても、ネットワーク経由で転送するほうが楽です。でも、ファイルの数が細かくなったり、スマホのCPUパワーだとアーカイブに固めるのが一苦労というような場合は、素直に USB 経由でデータを取り出す方法が安全だと感じます。
Android SDK と JDK(Java Development Kit) はすでにインストール済みだということにします。インストールがまだの方は、Android Studio 公式サイトから、Android Studio を入手し、Android Studio を起動させて SDK をインストールします。Android Studio からインストールするので、昔のインストール方法とは手順が変わってきていますのでご注意ください。
上の画面を参考に、Android Studio から SDK Manager を起動させて、
次に、SDK Tools から Android SDK Platform-Tools、Google USB Driver を選んでインストールします。Android SDK Build-Tools も必要に応じてインストールして大丈夫です。
インストールが終われば、パスを確認して(通して)おいてください。
adb.exe を使う
原則は Windows のコマンドプロンプトを使います。
Cygwin(Cygterm) でも行えますが、PC の保存不オルダの指定形式以ほぼ動かし方は同じです。
Android 端末の開発者オプションをオンにして USB ケーブルをつなぐ
Android 端末の開発者オプション(デベロッパーモード)をオンにして、Windows PC と USB ケーブルをつなぎます。
Windows PC のコマンドプロンプトを起動します
Windows
Microsoft Windows [Version 10.0.22621.819]
(c) Microsoft Corporation. All rights reserved
~(途中略)~
c:\TEMP>adb --version
Android Debug Bridge version 1.0.41
Version 31.0.0-7110759
Installed as C:\platform-tools\adb.exe
adb --version
と打ってみて、コマンドが通るかどうか確認します。
通らなければ、パスを通して Windows を再起動します。
「error: more than one device/emulator」が出たときの対処法
次に adb.exe で直接スマホにアクセスするのですが、まれに
Windows
Microsoft Windows [Version 10.0.22621.819]
(c) Microsoft Corporation. All rights reserved
c:\TEMP>adb shell
adb.exe: more than one device/emulator
「error: more than one device/emulator」
というエラーになり、android デバイスにうまく接続できないことがあります。
意味は「android に繋げと言われても、システムには一つ以上のデバイスかミュレーターがあるので、どれに接続したいのかわかりません」という意味のエラーです。
単に adb devices
とすると、エミュレーターがあるかどうかわかります。
Windows
c:\TEMP>adb devices
List of devices attached
21dc6fc3f81d7eca device
emulator-5554 device
上の例では、エミュレーターが一つ表示されています。もう一つは USB 接続した android デバイスです。
今回のミッションは、USB 接続した android デバイスからファイルを PC にコピーすることでした。
このように1台しか USB 接続の android デバイスがつながっていない場合は、以下のようにして USB 接続 android につなぐことができます。
Windows c:\TEMP>adb devices List of devices attached 21dc6fc3f81d7eca device emulator-5554 device c:\TEMP>adb shell adb.exe: more than one device/emulator c:\TEMP>adb -d shell star2lte:/ $ exit
この方法(-d オプション)は、複数台の android デバイスがつながっているとエラーになりますので、もう少し具体的に繋げたいデバイスを指定する方法があります。
シリアル端末指定するには(-s オプション)を使います。以下の例を参考にしてください。
Windows c:\TEMP>adb devices List of devices attached 21dc6fc3f81d7eca device emulator-5554 device c:\TEMP>adb -s 21dc6fc3f81d7eca shell star2lte:/ $ exit
以下、記事を繋げますが、同様のエラーが起きたときは具体的な端末を指定してコマンドしてください。
Android 端末のどのディレクトリをコピーするか調べる
この例では、スマホのファイルマネージャーから見えるルートディレクトリ(システムのルートディレクトリのことではない)に保存した、_IMAGES というフォルダ(ディレクトリ)以下を PC にコピーします。
USB で繋いでエクスプローラからコピーする方法は、少ないファイル数なら問題なくできますが、今回のように大容量で数の多いファイル転送では、その方法で処理を続けるとスマホの CPU が処理できずに固まることが普通にあります。
そのため、すべてコマンドライン上で処理を完結させる必要があります。
私の環境では、
/storage/self/primary/
以下に目的の _IMAGES ディレクトリが見つかりました。
Windows c:\TEMP>adb -d shell star2lte:/ $ ls /storage/self/primary/ ApkPure LazyList Pixomatic _IMAGES ~(途中略)~ InBrowser Pencil_Sketch TunnyBrowser data star2lte:/ $ exit c:\TEMP>
ディレクトリの位置が確認できたら、exit
とやって、android のシェルを抜けておきます。
目的のデータを Windows マシンにコピーする
以上から、/storage/self/primary/_IMAGES
ディレクトリ以下を、Windows マシンの D
ドライブ、_SAVE
フォルダにコピーすることにします。あらかじめ、Windows マシンの D
ドライブに _SAVE
フォルダを作成しておきます。
Windows c:\TEMP>d: D:\> D:\>mkdir _SAVE D:\>adb -d pull /storage/self/primary/_IMAGES D:\_SAVE\ D:\>
これで、Windows マシンの D
ドライブ _SAVE
以下に android 端末の _IMAGES
ディレクトリがコピーされます。
Windows c:\TEMP>adb -d pull /storage/self/primary/DCIM D:\_SAVE\
上のようにやると、たまり溜まったデジカメ撮影ファイルが先の _SAVE
にコピーされます。
[オマケ]Cygwin で処理を行うときの保存先指定の仕方
Cygterm で処理をするときは、保存先ディレクトリの書き方が違います。
Cygwin c:\TEMP>adb -d pull /storage/self/primary/DCIM /cygdrive/d/_SAVE
D:\_SAVE\
は /cygdrive/d/_SAVE/
になります。