Android 内蔵メモリから adb でファイルを移す

android Cygwin Windows

Android 端末の内蔵メモリから adb.exe で PC にファイルを移す方法

個人的にどうしようか悩んでいたケースです。
数年前に外国で購入した256GB内蔵メモリの android スマホをいまだに愛用しているのですが、数年間撮りためた大量の画像や動画をどうやって PC にバックアップしようか悩んでいました。

本ページはこんな方におすすめ

  • Android スマホの多数の大容量のファイルを PC に移したい
  • adbコマンドはインストール済
  • Android 端末の「開発者向けオプション」は有効化済
  • Android 8.0 以上のバージョンを使用している
  • Android端末とパソコンはUSBケーブルで接続済

巷でよく見かける対応法は次のようなケースです。

  1. メール、SNSで転送する
  2. Bluetooth 経由で転送する
  3. Wi-Fi 経由で転送する
  4. USB 経由で転送する
  5. SD カードへまず転送する

今回の私の悩みは、内蔵メモリの半分以上を消費するようになった180GBほどの動画や写真ファイルを、PC にいかに効率よくバックアップするかというのが課題ですので、上の1から3までの方法は、通信が長時間にわたって安定しにくく、しかも速度が遅いので速攻却下です。
現実的には USB ケーブル経由で、android のファイルシステムにアクセスしてデータを取り出す方法ぐらいしか思いつきません。
その前に、android 端末本体の Type-C に USB メモリを繋いで、バックアップ的なものを取っておきます。

今回のミッション

  • USB 接続した android デバイスからファイルを PC へコピーする
ネットワーク経由のコピーやバックアップは、データ送信側のメモリやCPUのパワーにも左右されるので、現在のスマホでも大きなサイズのファイルを大量に長時間送り続けるのは厳しいです。

私が利用したのはトランセンドの「TS256GJF930C」で、Type-A と Type-C の両方の端子のついたものです。Type-C の端子をスマホに繋いで、標準のファイルマネージャからコピーをします。
ところが、Type-C をメモリが塞いでいる間は充電ができないので、180GB(総ファイル数約 155308)ものデータをコピーしているうちに、スマホの方のバッテリーが消耗しきってしまいコピーを充電1回の作業では終わらせることができませんでした。
結局、数回に分けて充電しては、データ転送を停止し、再度充電しては同じことを繰り返すという手作業を行いました。スマホの Type-C を塞いでいても、充電しているわけではなく開発者向けオプションスリープ防止機能は働きません。特にデフォルト以外のアプリをインストールしていないので、面倒だと思いながらも、スマホの画面消灯を10分にして、ほぼ10分ごとにスマホを起こしてやるという手間をかけました。一回の充電でコピーできたファイル数は、スリープを防止して約 7,000 前後、スリープされたら 2,000 前後という感じです。大半がスマホ撮影の写真ですので、1ファイル数メガ以内、動画の場合なら数ギガほどあります。中断しては、充電して再開を繰り返し一週間ほどかけてバックアップを終えました。

少し前の Android 端末で、カメラやダウンロードアプリのデータなどを、直接 SD カードに保存できないものが存在します。その場合は、まずでデーターを本体のメモリに保存して、ファイルマネージャーなどのアプリであとから SD カードに移す手間が必要になります。

次に行ったのは、「まず SD カードにデータを移す」方法です。私の場合は 512GB のマイクロ SD カードを購入して、ファイルマネージャーからコピー作業を行いました。この場合、スマホに USB ケーブルを挿して充電を行いながら作業ができますので、充電のために作業を停止するような必要はなくなります。
ただ、コピー速度は出ず、遅く、原始的な作業を監視するのも嫌になります。スマホのスリープ機能をうまくオフにできず、結局は3時間以上、作業に時間をとられました。

最終的には USB 接続して adb.exe 使ってコピー

高々スマホのデータコピーなので、これ以上悩むことはやめました。SE 系の人ならだけでも考える方法で、ベタな方法で終わらせます。
方法は以下の通りです。

  1. Android 端末をデベロッパーモードにする
  2. Android 端末と Windows PC を USB でつなぐ
  3. 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

上の画面を参考に、Android Studio から SDK Manager を起動させて、

Android Studio SDK Install

次に、SDK Tools から Android SDK Platform-ToolsGoogle USB Driver を選んでインストールします。Android SDK Build-Tools も必要に応じてインストールして大丈夫です。
インストールが終われば、パスを確認して(通して)おいてください。

adb.exe を使う

原則は Windows のコマンドプロンプトを使います。
Cygwin(Cygterm) でも行えますが、PC の保存不オルダの指定形式以ほぼ動かし方は同じです。

Android 端末の開発者オプションをオンにして USB ケーブルをつなぐ

Android 端末の開発者オプション(デベロッパーモード)をオンにして、Windows PC と USB ケーブルをつなぎます。

Windows PC のコマンドプロンプトを起動します

Windows11 コンドプロンプト

 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/ になります。

-android, Cygwin, Windows
-,