Realm Blog

Realm Java 0.85 — 暗号化実装方式の刷新!

Realm Javaの最新版をwebサイトMavenリポジトリでリリースしました。

このリリースでは、従来のシグナルハンドラベースの暗号化実装を、すべての端末で動作する一般的な方式へ変更しています。また、新規のAPIとしてRealm.isEmpty()が追加されています。

暗号化実装の刷新

“A Look Into Realm’s Core DB Engine”(日本語未翻訳)で触れているように、 Realmの暗号実装はPOSIXシグナルハンドラに依存していました。

シグナルベースのアプローチは、ソフトウエアとしてはとてもシンプルでエレガントなものです。ところが現実のAndroidの世界では、このシグナルベースのアプローチに起因する奇妙なクラッシュがいくつか発生していました。

  • 5.0 Lollipop以降、AndroidはPlay StoreでChromium WebViewを提供し始めました。ところがこのChromium WebViewのv40には、Realmの暗号化機能とともに使用するとアプリケーションのクラッシュを引き起こすというバグがありました。詳細はこちらのissueコメントに書かれています。
  • いくつかの古い端末(HTC One X等)では、シグナルハンドラが正しく動作しません。このHTC One Xでの問題はFirefox for Androidでも発生していました。詳細はこちらのBugzillaページを参照してください。

できる限り多くの端末で暗号化機能を使用できるようにワークアラウンドを組み込みましたが、HTC One Xのように必要なAPIが正しく動作しない端末で動作させることはできませんでした。

これらの状況をふまえ、Realmの暗号化実装のアプローチを見直し全面的に書き換えることにしました。その結果本バージョン(0.85.0)以降では、Realmの暗号化実装はあらゆる端末で動作するものになりました。

すべての端末で暗号化が利用できるようになったので、RealmEncryptionNotSupportedExceptionのcatch節は不要になります。

新規API - Realm.isEmpty()

Realmが1つでもデータを含んでいるかまったく何も含んでいないかということをRealm.isEmpty()でチェックできるようになりました。

非互換の変更

RealmEncryptionNotSupportedExceptionは不要になったので、本リリースで削除されています。🎉

Realm.executeTransaction()はトランザクション内で発生したRuntimeException例外を別のRuntimeExceptionにラップすることなくそのままスローするようになりました。 発生した例外がそのままスローされるので、よりデバッグが行いやすくなります。トランザクション処理での例外発生時は、今まで通り自動的にトランザクションはロールバックされます。

RealmQuery.isNull()RealmQuery.isNotNull()について、関連をたどるクエリ(プロパティ名を.で連結した文字列)が指定されその最後の要素が他のオブジェクトへの関連である場合にスローされる例外がRealmErrorからIllegalArgumentExceptionに変更されました。


Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.

記事の更新情報を受け取る