アナログ金木犀

つれづれなるまままにつれづれする

AndroidでDBとかキャッシュを取り出したいけど、取り出せない時の対処法

f:id:kgmyshin:20150619000510j:plain

開発中、実際に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で呼びかけてみたところ、ゴレイヌというアイデアをいただくことができました。 私自身、かねてよりゴレイヌさんのことをリスペクトしており、ゴレイヌさんのようにテレポートも出来て、またゴレイヌさんのように最強説が出てくることを祈ってこの名前を採用させていただきました。

@konifarさんありがとうございました!!

えげつねェな...

matome.naver.jp

ゴレイヌさん、えげつねェな...