Realmで暗号化して、中身を確認するまで。
暗号化
Realmで暗号化するには、公式のサンプル通り、以下のような感じでやればよい
このサンプルの通りだと、毎回ランダムな文字が割り振られてしまうので、一旦文字列をキーにして、byte列に変換して入れる事にする。 実際に使う時はコードに直接書いちゃうと意味ないのでいい感じに見れないところに置く必要がある。
val key = "fadfasdfdsfdassfasdfa…" // 64文字 RealmConfiguration config = new RealmConfiguration.Builder() .encryptionKey(key.toByteArray()) .build(); Realm realm = Realm.getInstance(config);
中身を確認する
さて、実際にどんなデータが入ってるのか中身を確認したい。 中身を確認するには以下の3つの方法がある。
- stetho-realmを使う
- Realm Browserを使う
- Realm Object Serverを使う
順に書いていく
1. stetho-realmを使う
これを使う。
https://github.com/uPhyca/stetho-realm#integration
この辺のサンプル通りにやれば、普通に使える。(雑
。。。はずなんだけど、僕が作ってるアプリだと見れなかった。。。
https://github.com/realm/realm-java/issues/3700
この辺が関係しているのかも?ゼロから自分で作って試してみたら、普通に見ることが出来たので何かしらの何かが影響して見れなくなっているんだと思う。
2. Realm Browserを使う
ざっくりした使い方は以下を参照
ただし、realmファイルを取得するためには、一工夫必要だった。↑の方法では、端末のインストールしたパッケージのデータ置き場に保存しているファイルを、一度どこからでもアクセス可能な領域にコピーする。と書いてあったけど、これがうまくいかなかった。
なので、以下のコマンドでrealmファイルの保存場所から直接自分のMacに落としてきて、開いてる。 Windowsだとどうなるかわからない。。
adb -d shell run-as com.mapyo.sample cat /data/data/com.mapyo.sample/files/default.realm | perl -pe 's/\r\n/\n/' > default.realm
com.mapyo.sample
とdefault.realm
は自分の環境に合わせてよしなに修正してください。
そして、落としてきたrealmファイルをいざ開こうとすると、
The encryption key must be entered as a 128-character string of hexadecimal values.
こういうメッセージが出た。まあ、暗号化した時のやつを入れればいいんだな。という事はわかったのだけど、128文字??16進数??どういう事??という感じでよくわからなかった。
いろいろググると答えを見つけた。
https://teratail.com/questions/52401
暗号化キーのバイト列を16進数で表せばいいだけだった。 Kotlinだとこんな感じ
val key = "3fdafad...." // 64文字 val encryptionKey = key.toByteArray().map { String.format("%x", it) }.joinToString(separator = "") println(encryptionKey)
ということで、ここで確認出来たキーを入れれば見れた!
3. Realm Object Serverを使う
僕は試してないけど、
exception-think.hatenablog.com
こんな感じでやれば出来るっぽい(雑 Twitterでstetho-realmで見れないー。。。とつぶやいてたら紹介してもらった!! ありがたや!!
所感
stetho-realmが使えると一番便利そうなんだけど、見れなくて切ない。。。