ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。从 Android 7.0(API 级别 24)开始,Android 在 android.icu
软件包下显示 ICU4J API 子集,供应用开发者使用。这些 API 使用设备上具有的本地化数据。因此,您可以通过不将 ICU4J 库编译到 APK 来减少 APK 占用空间;相反,您可以只在框架中调用它们。(在此情况下,您可能想要提供多个版本的 APK,这样,运行比 Android 7.0(API 级别 24)低的 Android 版本的用户可以下载包含 ICU4J 库的应用版本。)
本文档开头提供了有关支持这些库所需的最低 Android API 级别的一些基本信息。然后,介绍关于 Android 特定的 ICU4J 实现您需要了解的内容。最后,介绍如何在 Android 框架中使用 ICU4J API。
与 ICU4J 的关系
Android 通过android.icu
软件包(而非 com.ibm.icu
)显示 ICU4J API 的子集。由于种种原因,Android 框架可能选择不显示 ICU4J API;例如,Android 不显示一些已弃用的 API 或 ICU 团队尚未将其声明为“稳定”的 API。由于 ICU 团队将来会弃用这些 API,因此,Android 也会将其标记为已弃用,但将继续包含它们。
Android API 级别 | ICU 版本 | CLDR 版本 |
---|---|---|
Android 7.0(API 级别 24) | 56 | 28 |
以下是几点注意事项:
- ICU4J Android 框架 API 不包含所有的 ICU4J API。
- NDK 开发者应了解 Android ICU4C 不受支持。
- Android 框架中的 API 不会取代 Android 对使用资源进行本地化的支持。
从 com.ibm.icu 迁移至 android.icu 软件包
如果您已在应用中使用 ICU4J API,且android.icu
API 符合您的要求,那么要迁移至框架 API,需要将 Java 导入从 com.ibm.icu
更改为 android.icu
。然后,您可以从 APK 移除您自己的 ICU4J 文件的副本。
注:ICU4J 框架 API 使用 android.icu
命名空间,而不是 com.ibm.icu
。这是为了避免在包含自己的 com.ibm.icu
库的 APK 中出现命名空间冲突。
从其他 Android SDK API 迁移至 android.icu API
java
和 android
软件包中的某些类与在 ICU4J 中找到的一些类等效。不过,ICU4J 通常为标准和语言提供更广泛的支持。
下面是一些入门示例:
类 | 替代项 |
---|---|
java.lang.Character |
android.icu.lang.UCharacter |
java.text.BreakIterator |
android.icu.text.BreakIterator |
java.text.DecimalFormat |
android.icu.text.DecimalFormat |
java.util.Calendar |
android.icu.util.Calendar |
android.text.BidiFormatter |
android.icu.text.Bidi |
android.text.format.DateFormat |
android.icu.text.DateFormat |
android.text.format.DateUtils |
android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter |
授权
ICU4J 按照 ICU 许可发布。如需了解详情,请参阅 ICU 用户指南。