C-FRONT

エモくありたい

ICU4JをAndroidで使う時

Unicodeの文字変換を行えるICU4jというライブラリをAndroidで使う時に遭遇したことや対応したことなどのちょっとしたメモです。

一言でいえばここを見れば済む話である。

Unicode and internationalization support  |  Android Developers

最新versionの63.1を使用するとAPI level23以下のデバイスでは次のようなエラーでアプリが落ちる。 (自分の場合は半角文字を全角文字に変換するという処理の時で使っていて遭遇)

java.lang.NoClassDefFoundError: Failed resolution of: Ljava/util/Locale$Category;
    at com.ibm.icu.util.ULocale$JDKLocaleHelper.getDefault(ULocale.java:4130)

icu4jの内部で使っているLocale.CategoryというクラスがAndroidではAPI level24から追加されたのでそれ以前の端末では動かない。

公式のページにもあるように対応するICU4jのversionを使えばAPI24以下でもicu4jの機能は使えるようになった。 4.4から対応させたかったので51.2を使用。

site.icu-project.org

ちなみにAPI24以上であればandroidパッケージの中のICU4JのAPIを使えるようになる。

developer.android.com

なかなかググってもわからずAPI23以下はこの文字変換機能を諦めようとしていたので解決策が見つかってよかった。