[Android] Android 端末内のデータベースをPCに取り出してイジる

#はじめに
Android Studioで開発したAppにデータを保存する際、様々な方法が考えられる。
例えば、txt形式。これは一番簡単な方法だろう。（実際に私も処理を簡略にするため、よくやっちゃう）
でもこの方法だと、txt→database保存する時に形成作業が入るので、後々を考えた時に割と面倒。

そこで今回は、

+ Android端末内のデータベースをPCに取り込む
+ 取り込んだデータベースをイジる （DB Browser for SQLite を利用）

の一連の流れをやってみたので、メモとして残しておく。
Android端末内のデータベースを覗く方法は、[tesoro](http://qiita.com/tesoro)さんが以下のリンク先で分かりやすくまとめてくださっているので、こちらを参考にさせて頂いた。（ありがとうございます！）
[[Android]端末にあるデータベースの中身を見る方法](http://qiita.com/tesoro/items/d3e697bff8720db03b20)

#なぜ、端末内のデータベースをPCに移すの？
単一端末に限って何かをしたい場合は、今回の様にPC側にdatabase自体を抜き出す必要はない。
しかし現状で私がやりたことは、同時間に複数端末に溜めたデータを、同じデータベースに入れてちょちょちょい☆、っとイジりたい、ということなのです…。
この場合normalに攻めるなら、主に有効な方法が以下の2つになるかと思う。

###方法１ 
+ サーバをたてる
+ データベースを作る
+ app内でサーバを介し、データベースにアクセス・保存
+ データが集まった、わーい＼(^o^)／

###方法2 
+ データベース代わりに成るもの（オンラインストレージ or BaaS とか）の環境を作る
+ app内でapiを介して、これらにアクセス・保存
+ データが集まった、うぇーい＼(^o^)／

正攻法…正攻法でございます…。すみません、そんな時間がありません。（土下座
というわけで、今回は愚直にAndroid端末のデータベースに欲しいデータを集めてPCに回収する手法を取りました。

方法２に関しては、実が以前作ってしまった経緯があります。そのため、今回はそれとは違う方法をやってみたかった、というのもある。
方法２については、時間があったらブログにまとめる…まとめるもん…ヾ(｡>﹏<｡)ﾉﾞ✧*。（震え

#環境

+ OS: MacOS X El Capitan ver 10.11.6
+ Android Studio: ver 2.2.2
+ adb: version 1.0.36 （インストール済み)
+ DB Browser for SQLite (落としてね! [公式サイト](http://sqlitebrowser.org/)）

#Android端末内のデータベースをPCに取り込む
##1. adbで「/data/data/terget-app」以下を覗いて、databasesの場所を確認
terget-app（対象アプリ）内を覗いて、欲しいデータベースが有るか、確認する。
通常、この場所は権限が無いので覗けない。（root取ってたら別なのかな…）

そこでdeveloperの味方、adb(Android Debug Bridge)を、Android Studio上で使う。
Android Studio terminalでadbを利用して、terget-app（対象アプリ）の中を覗いてみる。

```rudy:AndroidStudioTerminal
adb shell
root@XX-XXX:/ # 
root@XX-XXX:/ # run-as [terget-app name（=package name）] <-- このコマンドで、terget-appに移動
root@XX-XXX:/data/data/terget-app name $ ls
:
databases <-- これ！
:
:
```
アルーーーદ=๑๑( ੭ ε:)੭ु⁾⁾
というわけで、データベースの場所は確認できた。
ここからPCにデータベースを移すわけですが、方法は２つあるっぽい。

+ catコマンドを打つ
+ Android Device Monitorを使う

Android Device Monitor使ったことが無いわ…、というわけで、今回はこれを使ってみる。

##2. Android Device MonitorでPCにデータベースを保存
やり方は極めて簡単。

Android Studio上で、Toolを探っていき、図の赤い部分を選択。
![monitor1.png](https://qiita-image-store.s3.amazonaws.com/0/148337/676096e1-0199-1bfa-9072-99bfc2c1686b.png)

Android Device Monitorが現れるので、さっき見つけたデータベースの場所まで、ぽちぽち。
![monitor2.png](https://qiita-image-store.s3.amazonaws.com/0/148337/6fff53b9-00fe-f68d-3d66-07195a854aef.png)

データベースを見つけたら、選択した状態で赤で囲っている部分をポチる。
![monitor3.png](https://qiita-image-store.s3.amazonaws.com/0/148337/d1db8482-45ac-066a-c1dc-8ab4a29972bc.png)

終わり…。超簡単、素敵♡

#取り込んだデータベースをイジる （DB Browser for SQLite を利用）
PCに取り込んだら、早速中身を確認してみる。
私はコマンドでイジイジするのが嫌（邪道で、すみませんすみませんすみません。）なので、便利グッズの[DB Browser for SQLite](http://sqlitebrowser.org/)を自分の環境に合わせてインストールしました。
コマンドに慣れてる人は、好きな環境でサクサクやっちゃえばいいと思います。

さっき落としたデータベースを開いてみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/16019dd2-3226-9f6c-95a9-9076dd5ca11c.png)

こうなる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/911dfdee-54a4-54fd-cab8-f83e9cb298ee.png)

選ぶ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/bd148237-1a9b-db5a-010a-0bf245872a94.png)

こうなる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/ffadaf0f-da89-ea13-6e99-95c968409588.png)

見えた〜。フィルタに値を入れると、ちゃんとフィルタリングもできる。
直接、データをイジることもできる（っぽい）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/9bb8c639-8965-51be-694a-729385dbf9e1.png)

SQL文を入れてイジることも可能。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/148337/57442064-15bb-0926-57ff-1802f2d3334f.png)

というわけで、私にもできました:)

#追記
nexus 6 端末だとこの方法でうまく行きませんでした。
こちらで紹介されている方法でうまく取り出せました。めちゃくちゃ助かりました、ありがとうございます！
[ADBコマンドを使って一発で端末のアプリ領域からファイルを取得する](https://stackoverflow.com/questions/13578416/read-binary-stdout-data-from-adb-shell)

#参考
[[Android]端末にあるデータベースの中身を見る方法](http://qiita.com/tesoro/items/d3e697bff8720db03b20)