adbコマンドでAndroid端末とパソコン間でファイルをコピーする
はじめに
Android端末向けのアプリ開発をしている際にAndroid端末内にあるファイルをパソコンに移したり逆にパソコン内のファイルをAndroid端末に移動したりしたいことがあり、その際にadb(Android Debug Bridge)コマンドを使用したのでその使い方を簡単にまとめておきます。
前提と環境
以下の通りです。
- adbコマンドはインストール済とする。Android StudioのSDK Managerからインストールできます。詳細は後述の公式ドキュメントをご参照ください。
- Android端末の「開発者向けオプション」は有効化済とする
- Android : 8.0 以上
- Android端末とパソコンはUSBケーブルで接続済とする
adbコマンドは、パソコンからコマンドライン経由でAndroid端末にアクセスしてファイルのやりとりやその他の色々な作業をできるようにするツールです。adbコマンドでAnrdoid端末にアクセスした後は、例えばls
やcd
などのシェルコマンドを使用して操作できます。adbコマンドのインストール方法や使うにあたっての注意点は以下の公式ドキュメントに記載されているので必要な方は見てみてください。
Android Debug Bridge は、デバイスと通信するための多用途コマンドライン ツールです。
パソコンからAndroid端末内にアクセスする
adb
コマンドには色々なツールが用意されています。ここでは、まずパソコンからAndroid端末内にアクセスしてファイルを確認してみます。
$ adb shell
CPH1851:/ $
パソコンとAndroid端末がUSB接続されている状態でパソコンの端末(ターミナル)からadb shell
を実行すると、簡単にAndroid端末にアクセスできます。上記のCPH1851
はAndroid端末の機種名です。
以下はPermission deniedが出てしまっていますが、ls
コマンドなどが使用できます。
CPH1851:/ $ ls
ls: ./ueventd.reserve.rc: Permission denied
ls: ./ueventd.rc: Permission denied
ls: ./opporeserve: Permission denied
(...省略...)
ls: ./init.at.post_boot.sh: Permission denied
ls: ./init: Permission denied
ls: ./fstab-at.qcom: Permission denied
acct cache d dev firmware persist root storage tombstones
bt_firmware charger data dsp mnt proc sbin sys vendor
bugreports config default.prop etc oem res sdcard system
なお、開発中のアプリ内のファイルを見たい場合は、以下のようにrun-as
を使用すればアプリのルートディレクトリに移動できます。以下のcom.example.myapp
は各自のアプリで指定したドメイン名です。
CPH1851:/ $ run-as com.example.myapp
CPH1851:/data/data/com.example.myapp $
これでコピーしたいファイルのパスなどを確認しておきます。
Android端末から出たい場合は、exit
を実行します。
CPH1851:/ $ exit
以降でファイルのコピー方法についてまとめます。
Android端末内のファイルをパソコンにコピーする
まず、Android端末内にあるファイルをユーザのデータを置くディレクトリである/sdcard
に移動します。
例えば、Android端末内にある開発中のアプリのデータベースファイル(.db)をパソコンに移動したい場合は、以下のようにします。なお、以下はAndroid端末にアクセスした状態ではなく、パソコンの端末(ターミナル)から実行します。
$ adb shell "run-as com.example.myapp cp /data/data/com.example.myapp/app_flutter/MyDatabase.db /sdcard/MyDatabase.db"
上記の内、各自で置き換えが必要なのは以下です。
com.example.myapp
:各自が指定したアプリのドメイン名に置換/data/data/com.example.myapp/app_flutter/MyDatabase.db
:アプリのデータベースファイルのパス、ファイル名に置換。app_flutter
、MyDatabase.db
は私が適当に付けた名前です。
run-as
は、アプリとしてコマンドを実行します。すなわち、指定したアプリと同じファイルアクセス権限を持ってファイルを操作できます。詳しくは以下の公式ドキュメントをご確認ください。
Android Debug Bridge は、デバイスと通信するための多用途コマンドライン ツールです。
もし上記を実行してPermission denied
が表示される場合は、一旦以下でコピーしょうとしているファイルの権限を変更してみてください。
$ adb shell "run-as com.example.myapp chmod 666 /data/data/com.example.myapp/app_flutter/MyDatabase.db"
後は以下のコマンドでAnrdoi端末からパソコンにファイルをコピーできます。パソコン内の~/Downloads
フォルダにコピーしています。
$ adb pull /sdcard/MyDatabase.db ~/Downloads/MyDatabase.db
パソコンのファイルをAndroid端末内にコピーする
この場合はpull
の代わりにpush
を使用します。
$ adb push ~/Downloads/MyDatabase.db /sdcard/MyDatabase.db
以下でアプリ内のディレクトリにコピーできます。
$ adb shell "run-as com.example.myapp cp /sdcard/MyDatabase.db /data/data/com.example.myapp/app_flutter/MyDatabase.db"
まとめ
adbコマンドを使用することでファイルのコピー以外にもアプリのインストールなども実行できるようです。ファイルのコピーが必要な方の参考になれば幸いです。
関連記事
- 公開日:2019/12/23 更新日:2019/12/23
複数デバイス間でローカルのファイルを無制限に同期できるSyncthingをLinuxで使用する手順
Syncthingはローカルにあるファイルを複数のデバイス間で同期することができるオープンソースソフトウェアです。クラウド経由でファイルを同期するのではなく、ローカル同士で同期します。この記事ではUbuntuとAndroidでSyncthingを使用してファイルを同期するまでをまとめます。
- 公開日:2019/12/09 更新日:2019/12/09
Google Play Consoleに登録してデベロッパーアカウントを作成する手順
Android用にアプリをGoogle Play Storeで公開して配布するには、まずGoogle Play Consoleに登録してデベロッパーアカウントを作成する必要があります。この記事ではこの手順をまとめます。
- 公開日:2019/12/03 更新日:2019/12/03
Android App Bundleを実機にインストールして試すために使うbundletoolの使い方
Flutterなどで開発したAndroidアプリを自分の手元にある実機にインストールして試したい場合はbundletoolを使用するよう公式ドキュメントに記載されています。ただ、常識であるためなのか詳しい使い方が書かれておらず戸惑ったのでメモしておきます。
- 公開日:2019/08/17 更新日:2019/08/17
Androidスマートフォンの画面をパソコン上にミラーリングして操作できるScrcpyの使い方
Androidスマートフォンの画面をパソコン上にミラーリングして表示し、さらに操作もできるScrcpyというアプリをUbuntuにインストールして使ってみたのでその使い方をまとめます。なお、ScrcpyはWindows、macOSでも動作します。