AndroidでDBとかキャッシュを取り出したいけど、取り出せない時の対処法
開発中、実際にSQLiteとかcacheにしている画像がどうなってるかを確認したいことがよくあります。
その場合、エミュレータなどであればもともとroot権限だったりするので、adb pullで/data/data/package_name
をまるっと引っこ抜くことができます。
しかし、端末の場合はroot権限を持っていないため、adb pullはできません。
よくある手法としてadb shell run-as package_name
で実行ユーザをアプリにして覗くというものがあります。ただこの手法は端末によって使えないこともあるので万能な手法ではありません。(これで全てが救えてたならなにも問題はなかった。)
他にもIntellij Pluginであったりするんですが、Ultimate Editionが前提だったりしてあまりお手軽感がないです。
で、最終的にライブラリを作ることにしました。
その名もGoreinuです。
使い方
準備
build.gradleに下記を追加します。
dependencies { debugCompile 'kgmyshin:goreinu:0.0.10' releaseCompile 'kgmyshin:goreinu-no-op:0.0.10' }
Applicationクラスなどで、install(context)
を呼び出します。
public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); Goreinu.install(this); } }
これだけで準備は完了です。
LeakCanaryに似せて作ったので、すでにLeakCanaryを使ってる人は違和感なく使えると思います。
さらにLeakCanary同様、releaseバージョンではinstallを呼んでもなにもしないようになっております。
まるっとコピーしてくる
準備が完了して開発しているアプリを立ち上げると、ランチャーに下記が追加されます。
これをクリックすると、 /data/data/packagename
にあるものがまるっと/sdcard(ここはAndroid OSバージョンに依存)/Goreinu/packagename
にコピーされます。
また、コマンドラインから
adb shell am broadcast -a com.kgmyshin.goreinu.intent
を実行してもできます!
まとめ
前々から /data/data/package_name
配下を簡単に取得できなかったので、これでなんとかなったかなと。
あと、LeakCanaryみたいな「一行追加するだけでいいだぜ?」っていうの作りたかったのでできてよかったです。
余談
はじめは「まるっと」コピーしてくるので「marutto」としていたのですが、Twitterで呼びかけてみたところ、ゴレイヌというアイデアをいただくことができました。 私自身、かねてよりゴレイヌさんのことをリスペクトしており、ゴレイヌさんのようにテレポートも出来て、またゴレイヌさんのように最強説が出てくることを祈ってこの名前を採用させていただきました。
@kgmyshin テレポート、ゴレイヌ、グリードアイランドあたりしか思いつきませんでした
— こにふぁー (@konifar) 2015, 6月 17
@konifarさんありがとうございました!!
えげつねェな...
ゴレイヌさん、えげつねェな...