ThreeTenABP と ThreeTenBP の関係について (Android における JSR-310 バックポート)
「ThreeTenABP って Android フレームワークに依存するけど、ドメインレイヤとかで Android 依存を排除したい場合どうするのがいいんですかね」 という相談を受けて、ThreeTenABP 周りを調べたのでメモ。
ThreeTenABP って何?
- JSR 310 Date and Time API の Android 向け Backport。 Jake 氏作。
- GitHub リポジトリ : GitHub - JakeWharton/ThreeTenABP: An adaptation of the JSR-310 backport for Android.
- 『An adaptation of the JSR-310 backport for Android.』 とのこと。
JSR 310 Date and Time API 周りの話
- ThreeTen - Home page and Documentation
- Java SE 8 で Java API に導入された時刻周りの API。
- Java SE 7 以前の環境向けのバックポートも存在する : ThreeTen Backport
ThreeTenABP が存在する意味は?
ThreeTenABP の具体的な実装
というわけで
ThreeTenABP を使いたいけど Android フレームワークに依存させたくないというモジュールでは、ThreeTen Backport に依存させて、テストを書く際にタイムゾーン情報の扱いだけなんとかする、みたいなことをすれば良さそう。
タイムゾーン情報周りを厳密にテストしなくていいなら、compileOnly "org.threeten:threetenbp:${threetenbp_version}"
と testCompile "org.threeten:threetenbp:${threetenbp_version}"
を依存に追加しちゃうのが手軽でいい気がする。 (バージョン周りはよしなに。 これでうまくいくだろうと思って書いてるけど特に何も確認はしてない。)
関連ページ
- ThreeTen-Backport – Changes : ThreeTen Backport の 1.3 でタイムゾーン情報を持たない JAR ファイルもリリースされるようになった。 Android 用。
- GitHub - dlew/joda-time-android: Joda-Time library with Android specialization : Joda-Time でも同じような問題があって、Android 用のものが作られてる。
- Joda Time's Memory Issue in Android : タイムゾーン情報を JAR から読み込む方式だと Android でメモリ使用量が大きくなる話。 (Joda-Time の話だけど ThreeTen Backport も同じらしい。)
- Android の Java で時刻を扱う (Date、Calendar、DateFormat クラス) - ひだまりソケットは壊れない : 本筋ではないけど冒頭で ThreeTen ABP の紹介をした。