ガイド
adbかMTPか:同じケーブルでファイルを移す2つの方法
Androidスマホがコンピュータにファイルを渡す方法は2つあります。1つは誰でも使えて、設定も要りません。もう1つは開発者向けで、スイッチを1つ入れる必要がありますが、できることはずっと多くなります。
MTPは、スマホのUSB設定でファイル転送を選んだときに使われるものです。ほかには何も要らず、MTPアプリがあるどのコンピュータでも使え、スマホのファイルを一覧で表示して、ドラッグで出し入れできます。adb(Android Debug Bridge)は、Androidの開発者ツールが使うプロトコルです。USB デバッグを一度オンにする必要がありますが、そのかわりにコンピュータは、ファイルのコピー機能、スマホ上のシェル、そしてそれらの上に作られたあらゆるものを使えるようになります。
借りたコンピュータで写真を数枚移すだけなら、MTPが手軽です。ターミナル、スクリプト、大きなフォルダ、4 GBを超えるファイル、あるいはスマホをドライブとして扱いたいなら、adbのほうが強力です。どちらもmacOSには組み込まれていないので、Macではどちらもアプリかダウンロードを通じて使います。
MTPとは
MTP(Media Transfer Protocol)は、カメラ用のプロトコルPTPの拡張としてMicrosoftで生まれ、Androidでは2011年からUSBでのファイル転送に使われています。スマホはストレージの管理を手放さず、すべてのファイルとフォルダを番号付きのオブジェクトとして提供します。コンピュータはまず一覧を求め、次にオブジェクトを1つずつ、一度に1つの操作で要求します。仕組みと、Macが単独ではMTPをマウントできない理由は、MTPのしくみでくわしく説明しています。
adbとは
adbは、GoogleのSDK Platform-Toolsに含まれています。macOS、Windows、Linux向けに無料でダウンロードできます。adbは3つの部分でできています。入力するadbコマンド、コンピュータのバックグラウンドで動くサーバー、そしてそれに応答するスマホ上のデーモンです。Android Studioは要りません。Homebrewが入ったMacなら、コマンド1つでインストールできます。
brew install --cask android-platform-tools
スマホをつないで許可したら、ファイルの操作に使うのは次のコマンドです。
adb devices
adb pull /sdcard/DCIM/Camera ~/Pictures/Phone
adb push ~/Music/Album /sdcard/Music/
adb shell ls -l /sdcard/Download
adb pullはスマホからファイルやフォルダごとコピーし、adb pushはスマホへコピーします。adb shellはスマホ上でコマンドを実行し、コマンドを指定しなければ対話型のシェルを開きます。
スマホ側で必要なこと
MTP:ファイル転送モード
- スマホのロックを解除し、ケーブルをつなぎます。
- このデバイスを USB で充電中の通知をタップします。
- USB の接続用途でファイル転送を選びます。Pixelではファイル転送 / Android Auto(File transfer / Android Auto)と表示されます。
ほとんどのスマホは、次につないだときには充電だけに戻ります。そうしたくない場合は、開発者向けオプションにデフォルトの USB 設定があります。
adb:USB デバッグ
- 設定 > デバイス情報を開き、ビルド番号を7回タップします。Samsungでは端末情報(About phone) > ソフトウェア情報(Software information)の中にあります。
- 新しく現れた開発者向けオプションで、USB デバッグをオンにします。
- ケーブルをつなぎます。スマホにUSB デバッグを許可しますか?と表示され、コンピュータのRSAキーのフィンガープリントが示されます。このパソコンからの USB デバッグを常に許可するにチェックを入れ、許可をタップします。
メニューの場所はメーカーによって変わるので、Samsung、Pixel、Xiaomi、OnePlus、Motorolaの手順はUSB デバッグをオンにする方法にまとめています。
USB デバッグは安全?
自分のコンピュータだけを許可しているかぎり、USB デバッグは名前から受ける印象よりも安全です。Android 4.2.2以降、スマホは、誰かがロックを解除してそのコンピュータの鍵を受け入れるまで、そのコンピュータからのadbコマンドを1つも受け付けません。
- コンピュータごとに固有の鍵があります。adbは最初の実行時にRSAの鍵ペアを作ります。GoogleのadbはMacでは
~/.android/adbkeyに保存します。確認画面に表示されるフィンガープリントは、この鍵のものです。 - スマホは許可した鍵を覚えています。知らないコンピュータは何もできません。許可をタップするまで、
adb devicesはスマホをunauthorizedと表示します。 - 許可したコンピュータは多くのことができます。スマホの共有ストレージの読み書き、アプリのインストール、シェルコマンドの実行ができます。シェルは権限の限られたユーザーとして動くので、ほかのアプリの非公開データは読めませんが、許可はロックを解除したスマホを手渡すのと同じだと考えてください。
- 許可は期限切れになることがあります。Android 11以降、初期設定では、7日以内に再接続しなかったコンピュータをスマホは忘れます。adb 承認無効のタイムアウトをオンにしている場合は別です。
- まとめて取り消せます。開発者向けオプションのUSB デバッグの許可の取り消しで、すべてのコンピュータをまとめて忘れさせられます。USB デバッグをオフにすれば、もう一度オンにするまで入口は完全に閉じます。
MTPの仕組みはもっと単純です。スマホのロックが解除されている必要があり、ファイル転送がオンのあいだは、ケーブルをつないだ人なら誰でも共有ストレージにアクセスできます。コンピュータごとの許可はありません。
それぞれにできること
| MTPアプリ | ターミナルでadb | SideMount(Finderでadb) | |
|---|---|---|---|
| スマホ側 | ファイル転送(つなぐたびに選ぶ) | USB デバッグ(一度オンにするだけ) | USB デバッグ(一度オンにするだけ) |
| 双方向のファイルコピー | 可能 | 可能 | 可能 |
| 4 GBを超えるファイル | アプリによる | 可能 | 可能 |
| Macのどのアプリからでも、ファイルをその場で開く | スマホをマウントするアプリのみ | 不可(先にpullが必要) | 可能 |
| ターミナル、スクリプト、rsync | 不可 | 独自のコマンドのみ(rsyncは不可) | 可能(ボリューム上で) |
| スマホ上のシェル、アプリのインストール | 不可 | 可能 | 不可 |
| Wi-Fi経由 | 不可 | 可能(Android 11以降) | 可能(Android 11以降) |
左の列の多くは、MTPのオブジェクトモデルが理由です。MTPは番号でオブジェクトを丸ごと渡し、一度に1つの操作しかできません。これは、ウインドウにファイルをドラッグで出し入れするのには向いています。adbのファイル機能はパスで動くので、ターミナルやスクリプトが期待するとおりに使えます。また、adbのシェルを使えば、何もコピーせずに、スマホ上でファイルを探したり、移動したり、削除したりできます。
共通点もあります。一度にスマホを使えるプログラムは1つだけです。MTPのセッションも、adbの接続も1つだけ。MTPアプリが開いていれば別のアプリは接続できず、スマホを使えるadbサーバーも一度に1つだけです。
使い分け
- 写真を数枚だけ移すとき、あるいは自分のものではないコンピュータを使うとき。MTP。オンにするものも、あとで取り消すものもありません。
- 開発者向けオプションがロックされた仕事用のスマホ。MTP。adbが使えないからです。
- 大きなフォルダ、4 GBを超えるファイル、スクリプトで処理したいもの。adb。
adb pullとadb pushはフォルダごと扱え、シェルでスマホ上の整理もできます。 - スマホをFinderのドライブとして使いたいとき。ボリュームを作るアプリ。SideMountは、adbの方法をFinderのボリュームにしたものです。ケーブル越しに自分でadbを話すので、adbサーバーもPlatform-Toolsもインストール不要で、Macのどのアプリからもスマホ上のファイルをその場で開き、保存し、コピーできます。macOS 26以降が必要です。MacDroidも、MTPまたはadbでスマホをFinderにマウントします。
SideMountと自分のadbを両方使う場合は、交代で使います。マウントする前に自分のadbサーバーを終了し、Finderでスマホを取り出せば、スマホは自分のadbに戻ります。最初の接続はセットアップガイドで順に説明しています。ワイヤレスの方法も含めたAndroidとMacのあいだでファイルを移すすべての方法もあわせてどうぞ。
よくある質問
adbはMTPより速いですか?
本質的には変わりません。USB 3ケーブルでつないだ最近のスマホなら、どちらも大きなファイルを速く移せます。プロトコルよりも、コンピュータ側のアプリの違いのほうが大きく効きます。USB 2のスマホやケーブルでは、どちらも約20〜40 MB/sが上限です。
adbを使うにはAndroid Studioが必要ですか?
いいえ。adbは、GoogleのSDK Platform-Toolsという小さな単体のダウンロードに含まれています。Homebrewならbrew install --cask android-platform-toolsでも入れられます。Macアプリの中には自分でadbを話すものもあり、その場合はどちらも要りません。
USB デバッグを通じて、誰かにファイルをコピーされることはありますか?
スマホがすでに許可したコンピュータからだけです。新しいコンピュータには、スマホのロック解除と、「USB デバッグを許可しますか?」の確認での許可が必要です。念のため、開発者向けオプションの「USB デバッグの許可の取り消し」を使うか、必要ないときはUSB デバッグをオフにしてください。
adb devicesでunauthorizedと表示されるのはなぜですか?
スマホが、まだこのコンピュータの鍵を受け入れていないからです。ロックを解除して、「USB デバッグを許可しますか?」の確認を探してください。表示されない場合は、開発者向けオプションで許可を取り消し、つなぎ直して、スマホにもう一度尋ねさせてください。