adbコマンドでAndroid端末とパソコン間でファイルをコピーする

公開日:2019/10/06 更新日:2019/10/06
adbコマンドでAndroid端末とパソコン間でファイルをコピーするのサムネイル

はじめに

Android端末向けのアプリ開発をしている際にAndroid端末内にあるファイルをパソコンに移したり逆にパソコン内のファイルをAndroid端末に移動したりしたいことがあり、その際にadb(Android Debug Bridge)コマンドを使用したのでその使い方を簡単にまとめておきます。

前提と環境

以下の通りです。

  • adbコマンドはインストール済とする。Android StudioのSDK Managerからインストールできます。詳細は後述の公式ドキュメントをご参照ください。
  • Android端末の「開発者向けオプション」は有効化済とする
  • Android : 8.0 以上
  • Android端末とパソコンはUSBケーブルで接続済とする

adbコマンドは、パソコンからコマンドライン経由でAndroid端末にアクセスしてファイルのやりとりやその他の色々な作業をできるようにするツールです。adbコマンドでAnrdoid端末にアクセスした後は、例えばlscdなどのシェルコマンドを使用して操作できます。adbコマンドのインストール方法や使うにあたっての注意点は以下の公式ドキュメントに記載されているので必要な方は見てみてください。

developer.android.com

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_flutterMyDatabase.dbは私が適当に付けた名前です。
run-asは、アプリとしてコマンドを実行します。すなわち、指定したアプリと同じファイルアクセス権限を持ってファイルを操作できます。詳しくは以下の公式ドキュメントをご確認ください。
developer.android.com

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コマンドを使用することでファイルのコピー以外にもアプリのインストールなども実行できるようです。ファイルのコピーが必要な方の参考になれば幸いです。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。