Android korzysta z biblioteki ICU i projektu CLDR, aby zapewniać obsługę Unicode i innych funkcji związanych z międzynarodowością. Opis obsługi standardu Unicode i internacjonalizacji jest podzielony na 2 sekcje: Android 6.0 (poziom interfejsu API 23) i starszy oraz Android 7.0 (poziom API 24) i nowszy.
Obsługa standardu Unicode i internacjonalizacji do Androida 6.0 (poziom API 23)
Platforma Androida korzysta z ICU i CLDR do wdrożenia różnych klas do obsługi ortografii łacińskich i innych niż łacińskie oraz ujawniania klas takich jak Locale
, Character
i wielu podklas klasy java.text
. Aplikacja, która wymaga funkcji internacjonalizacji wykraczających poza klasy ujawnione i jest kierowana na wersje platformy do Androida 6.0 (poziom interfejsu API 23), musi zawierać bibliotekę ICU.
Obsługa wersji
Kolejne wersje platformy Android odpowiadają nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 1 pokazuje tę korespondencję w Androidzie 6.0 (poziom API 23).
Platforma (poziom interfejsu API) | OIOM | CLDR | Unicode |
---|---|---|---|
Android 1.5–2.0 (poziomy API 3–7) | 3,8 | 1,5 | 5,0 |
Android 2.2 (poziom API 8) | 4.2 | 1.7 | 5.1 |
Android 2.3–3.0 (poziomy interfejsu API 9–13) | 4.4 | 1,8 | 5.2 |
Android 4.0 (poziomy API 14–15) | 4.6 | 1,9 | 6.0 |
Android 4.1 (poziomy interfejsu API 16–17) | 4.8 | 2,0 | 6.0 |
Android 4.3 (poziom 18 interfejsu API) | 50 | 22.1 | 6.2 |
Android 4.4 (poziomy API 19–20) | 51 | 23 | 6.2 |
Android 5.0 (poziomy interfejsu API 21–22) | 53 | 25 | 6.3 |
Android 6.0 (poziom 23 interfejsu API) | 55,1 | 27.0.1 | 7,0 |
Platforma Androida zapewnia bardziej kompleksową obsługę Unicode i międzynarodowościowości w przypadku aplikacji kierowanych na Androida 7.0 (poziom interfejsu API 24) i nowszych. W następnej sekcji znajdziesz szczegółowe informacje na temat tej pomocy.
Obsługa standardu Unicode i internacjonalizacji w Androidzie 7.0 (poziom API 24) i nowszych
W przypadku Androida 7.0 (poziom interfejsu API 24) i nowszych platforma Androida udostępnia podzbiór interfejsów API ICU4J deweloperom aplikacji w pakiecie android.icu
.
ICU4J to powszechnie używany zestaw bibliotek Java, które zapewniają obsługę Unicode i międzynarodową aplikacji oprogramowania.
Interfejsy API ICU4J wykorzystują dane lokalizacji znajdujące się na urządzeniu. Dzięki temu możesz zmniejszyć rozmiar swojej aplikacji, nie kompilując w niej bibliotek ICU4J. Zamiast tego możesz wywoływać je w ramach frameworka. W takim przypadku warto udostępnić kilka wersji pliku APK, aby użytkownicy korzystający z wersji Androida starszych niż 7.0 (poziom interfejsu API 24) mogli pobrać wersję aplikacji zawierającą biblioteki ICU4J.
W tej sekcji znajdziesz podstawowe informacje o minimalnych poziomach interfejsu Android API wymaganych do obsługi tych bibliotek. Następnie wyjaśnia, co musisz wiedzieć o implementacji ICU4J na Androida. W tym artykule znajdziesz też informacje o tym, jak używać interfejsów ICU4J API w ramach Androida.
ICU4J na Androidzie
Android udostępnia podzbiór interfejsów API ICU4J za pomocą pakietu android.icu
, a nie com.ibm.icu
. Niektóre interfejsy ICU4J nie są udostępniane przez platformę Androida, ponieważ są wycofane lub nie są deklarowane jako stabilne. W miarę jak zespół OIOM-ów będzie w przyszłości wycofywać interfejsy API, Android również oznaczy je jako wycofane, ale wciąż będzie je uwzględniać.
Oto kilka przypomnięć:
- Interfejsy API platformy ICU4J Androida nie obejmują wszystkich interfejsów ICU4J API.
- Interfejsy API na platformie Androida nie zastępują obsługi lokalizacji za pomocą zasobów w Androidzie.
- W niektórych przypadkach platforma Androida obsługuje więcej znaków niż biblioteki ICU. Dotyczy to na przykład obsługi emoji przez klasę
android.text
.
Przejdź na pakiet android.icu z com.ibm.icu
Jeśli w swojej aplikacji używasz już interfejsów ICU4J i interfejsy android.icu
spełniają Twoje wymagania, przeniesienie na interfejsy frameworku wymaga zmiany importów Java z com.ibm.icu
na android.icu
. Następnie możesz usunąć swoją kopię plików ICU4J z aplikacji.
Uwaga: interfejsy API w ramach ICU4J używają przestrzeni nazw android.icu
zamiast com.ibm.icu
. Ma to na celu uniknięcie konfliktów nazw przestrzeni w aplikacjach, które zawierają własne biblioteki com.ibm.icu
.
Migracja do interfejsów API android.icu z innych interfejsów API pakietu Android SDK
Niektóre klasy w pakietach java
i android
mają odpowiedniki w pakiecie ICU4J. Jednak ICU4J często zapewnia szerszą obsługę standardów i języków.
Tabela 2 zawiera kilka przykładów tych odpowiedników:
Kategoria | Alternatywy |
---|---|
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
|
ICU4C na Androidzie
Android udostępnia podzbiór interfejsów API ICU4C za pomocą biblioteki libicu.so
, a nie libicuuc.so
lub libicui18n.so
. Interfejsy API są dostępne od Androida 12 (poziom API 31). Nagłówki NDK są dostępne od wersji NDK r22b.
Interfejs C++ nie jest udostępniany przez NDK Androida. Niektóre interfejsy C są niedostępne.
Obsługa wersji
Kolejne wersje platformy Android odpowiadają nowszych wersji ICU oraz odpowiadających im wersji CLDR i Unicode. Tabela 3 przedstawia tę zgodność od Androida 7.0 (poziom interfejsu API 24). Aby uzyskać informacje o wersji ICU w czasie działania, użyj interfejsu API
VersionInfo.ICU_VERSION
(dostępnego od Androida 7.0).
Platforma (poziom interfejsu API) | OIOM | CLDR | Unicode |
---|---|---|---|
Android 7.0–7.1 (poziomy API: 24–25) | 56 | 28 | z Androidem 8.0 |
Android 8.0–8.1 (poziomy API: 26–27) | 58,2 | 30.0.3 | 9.0 |
Android 9 (poziom 28 interfejsu API) | 60,2 | 32.0.1 | 10,0 |
Android 10 (poziom 29 interfejsu API) | 63,2 | 34 | 11.0 |
Android 11 (poziom 30 interfejsu API) | 66,1 | 36 | 13,0 |
Android 12 (poziom 31–32 interfejsu API) | 68,2 | 38,1 | 13.0 |
Android 13 (poziom 33 interfejsu API) | 70,1 | 40 | 14,0 |
Android 14 (poziom API 34) | 72,1 | 42 | 15,0 |
Android 15 (poziom API 35) | 75,1 | 45 | 15.1 |
Ustawienie formatu godziny 24h/12h
ICU na Androidzie nie uwzględnia ustawień formatu czasu 24-godzinnego lub 12-godzinnego użytkownika uzyskanych zDateFormat.is24HourFormat()
.
Aby zaobserwować to ustawienie, użyj metod formatowania czasu DateFormat
lub DateUtils
albo zastosuj wzorce formatowania czasu ICU z odpowiednimi symbolami wzorca godzin (h” oznacza 12 godzin, „H” dla 24 godzin) dla różnych wartości zwracanych is24HourFormat()
.
Ten kod generuje na przykład ciąg znaków z bieżącą godziną, który rejestruje ustawienie 12 godzin/24 godzin dla użytkownika:
Kotlin
val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm" val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton( skeleton, Locale.getDefault()).format(Date() )
Java
String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm"; String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());
Stabilność transliteratora
Od Androida 10 (poziom interfejsu API 29) usługaTransliterator
jest dostępna do transliteracji tekstu z jednego formatu na drugi. Zestaw dostępnych identyfikatorów transliteracji jest niestabilny w różnych wersjach Androida i na różnych urządzeniach. Producenci urządzeń mogą dodawać dodatkowe identyfikatory transliteracji. Przed transliteracją tekstu deweloperzy muszą sprawdzić dostępne identyfikatory, które można uzyskać z
Transliterator.getAvailableIDs()
.
Licencjonowanie
ICU4J jest udostępniany na licencji ICU. Szczegółowe informacje znajdziesz w przewodniku użytkownika po ICC.