O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Compatibilidade com Unicode e internacionalização

O Android utiliza a biblioteca ICU e o projeto CDLR (links em inglês) para oferecer compatibilidade com Unicode e outra internacionalização. A discussão deste documento sobre compatibilidade com Unicode e internacionalização é dividida em duas seções: Android 6.0 (API de nível 23) e versões anteriores e Android 7.0 (API de nível 24) e versões posteriores.

Compatibilidade com Unicode e internacionalização até o Android 6.0 (API de nível 23)

A plataforma Android usa ICU e CLDR para implementar várias classes para lidar com ortografias latinas e não latinas, expondo classes como Locale, Character e muitas subclasses de java.text. Quando internacionalização de um app funciona para além das classes expostas e se destina a versões da plataforma até o Android 6.0 (API de nível 23), é necessário incluir a biblioteca ICU em seu APK.

Controle de versões

Versões sucessivas da plataforma Android correspondem às versões mais recentes da ICU e às versões CLDR e Unicode correspondentes. A tabela 1 mostra essa correspondência até o Android 6.0 (API de nível 23).

Tabela 1. Versões da ICU e CLDR usadas até o Android 6.0 (API de nível 23).

Plataforma (nível de API) ICU CLDR Unicode
Android 1.5–2.0 (API de níveis 3–7) 3.8 1.5 5.0
Android 2.2 (API de nível 8) 4.2 1.7 5.1
Android 2.3–3.0 (API de níveis 9–13) 4.4 1.8 5.2
Android 4.0 (API de níveis 14–15) 4.6 1.9 6.0
Android 4.1 (API de níveis 16–17) 4.8 2.0 6.0
Android 4.3 (API de nível 18) 50 22.1 6.2
Android 4.4 (API de níveis 19–20) 51 23 6.2
Android 5.0 (API de níveis 21–22) 53 25 6.3
Android 6.0 (API de nível 23) 55.1 27.0.1 7.0

Os apps que se destinam ao Android 7.0 (API de nível 24) ou posterior podem aproveitar uma compatibilidade mais abrangente para Unicode e internacionalização que é exposta pelo framework do Android. A próxima seção deste documento apresenta detalhes sobre essa compatibilidade.

Compatibilidade com Unicode e internacionalização no Android 7.0 (API de nível 24) ou posterior

A partir do Android 7.0 (API de nível 24), a plataforma Android expõe um subconjunto das APIs ICU4J para desenvolvedores de apps usarem no pacote android.icu. O ICU4J é um conjunto de bibliotecas Java de código aberto amplamente utilizado que fornece compatibilidade com Unicode e internacionalização para aplicativos de software.

As APIs ICU4J usam dados de localização presentes no dispositivo. Como resultado, você pode reduzir o tamanho do seu APK porque não tem que compilar as bibliotecas ICU4J no APK. Em vez disso, basta chamá-las na estrutura. Nesse caso, convém fornecer várias versões do seu APK. Assim, os usuários que estiverem usando versões anteriores ao Android 7.0 (API de nível 24) podem fazer o download da versão do app que contém as bibliotecas ICU4J.

Este documento começa fornecendo algumas informações básicas sobre os níveis mínimos de API do Android necessários para oferecer compatibilidade com essas bibliotecas. Em seguida, o documento explica o que você precisa saber sobre a implementação específica no Android da ICU4J. Por fim, ele trata sobre como usar as APIs ICU4J no framework do Android.

ICU4J no Android

O Android expõe um subconjunto das APIs ICU4J por meio do pacote android.icu, em vez do com.ibm.icu. O framework do Android pode não expor as APIs ICU4J por vários motivos, por exemplo, por que as APIs estão obsoletas ou não foram declaradas estáveis. Como a equipe ICU suspenderá a utilização das APIs no futuro, o Android também as marcará como obsoletas, mas continuará a incluí-las.

Veja a seguir algumas observações importantes:

  • As APIs ICU4J do framework do Android não incluem todas as APIs ICU4J.
  • O NDK não é compatível com a ICU4C do Android.
  • As APIs no framework do Android não substituem o suporte do Android para localização com recursos.
  • Em alguns casos, o framework do Android suporta mais caracteres do que as bibliotecas de ICU. Isso ocorrerá, por exemplo, na compatibilidade da classe android.text com emojis.

Migração para o pacote android.icu do com.ibm.icu

Se você já estiver usando as APIs ICU4J no seu app, e as APIs android.icu atenderem suas necessidades, a migração para as APIs do framework exige que você altere suas importações em Java de com.ibm.icu para android.icu. Em seguida, remova sua própria cópia dos arquivos ICU4J do APK.

Observação: as APIs ICU4J do framework usam o namespace android.icu em vez de com.ibm.icu. Isso acontece para evitar conflitos de namespace em APKs que contenham as próprias bibliotecas com.ibm.icu.

Migração de APIs android.icu de outras APIs do SDK do Android

Algumas classes nos pacotes java e android têm equivalentes àquelas encontradas em ICU4J. No entanto, a ICU4J geralmente oferece compatibilidade mais ampla para padrões e idiomas.

A Tabela 2 mostra alguns exemplos dessas equivalências para que você possa dar os primeiros passos:

Tabela 2.Classes ICU4J do Android e do Java.

Classe Alternativas
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

Controle de versões

Versões sucessivas da plataforma Android correspondem às versões mais recentes da ICU e às versões CLDR e Unicode correspondentes. A Tabela 3 mostra essa correspondência a partir do Android 7.0 (API de nível 24).

Tabela 3. Versões ICU e CLDR usadas no Android 7.0 (API de nível 24) ou posterior.

Plataforma (nível de API) ICU CLDR Unicode
Android 7.0 - 7.1 (API de níveis 24 - 25) 56 28 8.0
Android 8.0 - 8.1 (API de níveis 26 - 27) 58.2 30.0.3 9.0
Android 9 (API de nível 28) 60.2 32.0.1 10.0
Android 10 (API de nível 29) 63.2 34 11.0

Configuração de formato de hora 24h/12h

No Android, a ICU não segue a configuração de formato de hora 24h/12h do usuário (que vem de DateFormat.is24HourFormat()). Para seguir a função, use os métodos de formatação DateFormat ou DateUtils ou use padrões de formatação de hora da ICU com símbolos de padrão de hora apropriados ('h' para 12h, 'H' para 24h) para diferentes valores de retorno de is24HourFormat(). Por exemplo, este código gera uma string com o horário atual que segue a configuração de 12h/24h do usuário:

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());
    

Estabilidade da transliteração

A partir do Android 10 (API de nível 29), o Transliterator é fornecido para transliterar textos de um formato para o outro. O conjunto de IDs de transliteração é instável em diferentes versões e dispositivos Android. Os fabricantes de dispositivos podem adicionar IDs de transliteração extras. Os desenvolvedores precisam verificar os IDs disponíveis (que vêm de Transliterator.getAvailableIDs()) antes de transliterar o texto.

Licença

A ICU4J é lançada na licença da ICU. Para ver detalhes, consulte o guia do usuário da ICU.