Revisiones recientes de la biblioteca de compatibilidad

En esta página, se proporcionan detalles sobre las versiones más recientes de los paquetes de la biblioteca de compatibilidad. Si quieres ver versiones anteriores, consulta el Archivo de revisiones de la biblioteca de compatibilidad.

Revisión 28.0.0: Producción

(21 de septiembre de 2018)

Esta es la versión estable de la biblioteca de compatibilidad 28.0.0 y es adecuada para uso en producción. Esta será la última versión de la función dentro del paquete android.support, y se recomienda a los desarrolladores que migren a AndroidX.

Funciones nuevas

  • AnimatedStateListDrawableCompat proporciona transiciones animadas entre estados de elementos de diseño.
  • VectorDrawableCompat permite obtener compatibilidad con gradiente y rellenos y trazos de ColorStateList.

Revisión 28.0.0: RC 2

(27 de agosto de 2018)

Esta versión potencial de la biblioteca de compatibilidad se considera completa en cuanto a funciones y la superficie de su API pública es estable. Se presentará como versión estable final, a excepción de los problemas críticos que puedan surgir. Esta versión debería ser segura para uso en producción. Notifica cualquier problema que encuentres en la Herramienta de seguimiento de errores pública.

Errores corregidos

  • ProGuard quita el constructor de la aplicación de ViewModel (problema público 112230489).
  • Se corrigió el estado de la constante "AnimatedStateListDrawableCompat".
  • Se quitó la dependencia de media2 de mediarouter 1.0.0.
  • `Fragment.getViewLifecycleOwner()` no se detiene cuando se presiona el botón de inicio (problema público 113070421) ([problema público 113070421](https://issuetracker.google.com/issues/113070421)).

Revisión 28.0.0: RC 1

(6 de agosto de 2018)

Esta versión potencial de la biblioteca de compatibilidad se considera completa en cuanto a funciones y la superficie de su API pública es estable. Se presentará como versión estable final, a excepción de los problemas críticos que puedan surgir. Esta versión debería ser segura para uso en producción. Notifica cualquier problema que encuentres en la Herramienta de seguimiento de errores pública.

Nota: Algunas bibliotecas, como media2, permanecen en etapa alfa, ya que sus superficies de API aún no están finalizadas. No recomendamos usar las bibliotecas alfa en etapas de producción. Las bibliotecas deben evitar por completo depender de bibliotecas alfa durante la producción, ya que las superficies de sus APIs pueden cambiar en cuanto a incompatibilidad de origen y de objeto binario.

Errores corregidos

  • El menú BottomNavigationView no se inicializa correctamente en la biblioteca de compatibilidad de diseño.
  • PositionalDataSource no maneja correctamente las inserciones de elementos prependientes en la base de datos.
  • Los controles deslizantes son inestables y no responden.
  • "SlicesProviderCompat.getPinnedSpecs()" no agrega ID de usuario a URI.
  • RoutePlayer2: La reproducción remota no vuelve a cambiar a la reproducción local.
  • El análisis de secciones en caché falla durante las acciones.
  • Falla de la app de la Búsqueda de Google al procesar la plantilla Slice estática
  • ConcurrentModificationException en la biblioteca de selección RecyclerView cuando el conjunto de datos cambiaba al eliminar la selección
  • Se actualizó PreferenceThemeOverlay al tema de material más reciente Si no se proporciona un tema personalizado, se usa PreferenceThemeOverlay como tema predeterminado
  • Dejaron de estar disponibles los temas PreferenceThemeOverlay.v14 y PreferenceThemeOverlay.v14.Material, y los reemplazó PreferenceThemeOverlay.
  • La visibilidad de PreferenceGroup ahora está vinculada a sus elementos secundarios; ocultar un grupo superior también evitará que se muestren sus elementos secundarios en la jerarquía Usa Preference.isShown() para saber si realmente se muestra una preferencia al usuario en la jerarquía.
  • Preference.onSetInitialValue(boolean, Object) dejó de estar disponible y se reemplazó por onSetInitialValue(Object). PreferenceDataStore ahora también restablece correctamente los valores predeterminados

Revisión 28.0.0: Beta 1

(Julio de 2018)

Esta versión beta de la biblioteca de compatibilidad se considera completa y su superficie de API pública es estable, a excepción de los problemas críticos que puedan surgir. Si bien esta versión es segura para uso en producción, todavía puede contener errores. Notifica cualquier problema que encuentres en la Herramienta de seguimiento de errores pública.

Errores corregidos

  • GestureSelectionHelper consume eventos en elementos no seleccionables
  • Cuando se actualiza el valor del control deslizante, los segmentos de este pueden tener un ícono de pulgar duplicado
  • IconCompat rompía los íconos de TYPE_URI
  • Falla relacionada con Preferences al usar Seekbar
  • Falla en Slice.toString()
  • OffsettingListUpdateCallback.onMoved() llama a mCallback.onRemoved() en lugar de mCallback.onMoved() (problema 110711937).

Revisión 27.1.1

(Abril de 2018)

Errores corregidos

  • AsyncListDiffer no llama a getChangePayload (problema de AOSP 73961809)
  • No se llamaba a onCleared de Fragment ViewModel (problema de AOSP 74139250)
  • RecyclerView.setRecycledViewPool() aumenta attachCount incluso cuando el adaptador es nulo
  • RecyclerView NPE si SmoothScroller.onStop llama a stop() o startSmoothScroller()
  • La transacción de reemplazo de fragmento hace que el fragmento anterior parpadee después de que se muestre un nuevo fragmento (problema de AOSP 74051124)
  • Cambio rotundo de la devolución de llamada del cargador en 27.1.0 (problema de AOSP 74135998)
  • El diseño de RTL no funciona cuando la vista de cuadrícula vertical configura la columna > 1
  • Se llamaba a onLoadFinished varias veces en ViewPager con FragmentPagerAdapter
  • AsyncListDiffer debe enviar actualizaciones después de configurar la lista actual (problema de AOSP 74003309)
  • ShareActionProvider lanza ClassCastException en 27.1.0
  • Cambio en el ciclo de vida del fragmento con ViewPager (problema de AOSP 73976255)

Revisión 28.0.0: Alfa 1

(Marzo de 2018)

Nota: 28.0.0-alpha1 es una versión previa al lanzamiento que es compatible con la vista previa para desarrolladores de Android P. Su superficie de API está sujeta a cambios y no necesariamente incluye funciones o correcciones de errores de las últimas versiones estables de la biblioteca de compatibilidad.

Cambios importantes

  • Tal como se indicó anteriormente en el anuncio de Android KTX, seguimos adoptando el prefijo del paquete androidx en todas nuestras bibliotecas. Una selección de bibliotecas nuevas, incluidas heifwriter y recyclerview-selection, está comenzando en este nuevo paquete. Esperamos que la división entre android.* y androidx.* haga más evidente qué APIs están agrupadas con la plataforma y cuáles son bibliotecas estáticas para desarrolladores de apps que trabajan en diferentes versiones de Android.
  • Dividimos partes de support-core-ui, support-core-utils y support-compat en bibliotecas más pequeñas. Este cambio nos ayudará a desenredar las dependencias de la biblioteca de compatibilidad en el futuro. Ahora tenemos las siguientes bibliotecas nuevas:
    • asynclayoutinflater (de support-core-ui)
    • colecciones (de support-compat)
    • coordinatorlayout (de design)
    • cursoradapter (de support-core-ui)
    • vista personalizada (de support-core-ui)
    • documentfile (de support-core-utils)
    • drawerlayout (de support-core-ui)
    • interpolator (de support-core-ui)
    • loader (de support-fragments y core-utils)
    • localbroadcastmanager (de support-core-utils)
    • print (de support-core-utils)
    • slippanelayout (de support-core-ui)
    • swiperefreshlayout (de support-core-ui)
    • viewpager (de support-core-ui)

API nuevas

  • recyclerview-selection proporciona compatibilidad con la selección de elementos para RecyclerView. El paquete proporciona lo siguiente:
    • Compatibilidad para crear, modificar, inspeccionar y supervisar cambios en un conjunto de elementos seleccionados en una lista de RecyclerView
    • Compatibilidad con acciones intuitivas de selección múltiple:
      • La selección táctil permite a los usuarios seleccionar rangos de elementos con un gesto intuitivo de mantener presionado y arrastrar.
      • La selección de banda controlada por mouse permite a los usuarios seleccionar un bloque de elementos en una lista de RecyclerView con las acciones tradicionales de banda/lazo del puntero del mouse.
    • Compatibilidad con dispositivos centrados en pantallas táctiles, incluidos factores de forma de teléfono y laptop con capacidad táctil, así como dispositivos centrados en punteros
  • HEIF Writer proporciona compatibilidad con escritura de imágenes fijas en formato HEIF.
  • Biblioteca de diseño
    • Presentamos un nuevo tema de aplicación, Theme.MaterialComponents, con nuevos atributos y estilos actualizados para componentes.
    • Agregamos los siguientes componentes:
      • BottomAppBar
      • Chip
      • ChipGroup
      • MaterialButton
      • MaterialCardView
  • Slices proporciona un framework para que las apps incorporen contenido con plantillas de otras apps.
    • slices-builders contiene métodos para compilar contenido en un formato de plantilla.
    • slices-view contiene métodos para presentar ese contenido.
  • Las acciones del navegador proporcionan un protocolo para que los desarrolladores de apps inicien un menú contextual coherente (pero personalizable) para las URLs. Esta función depende de la presencia de una app de navegador (como Chrome, donde esta función aún está en desarrollo) que implemente compatibilidad para acciones del navegador.
  • ContextCompat.getSystemService() y getSystemServiceName() permiten búsquedas de servicios del sistema por tipo en todos los niveles de API.

Correcciones de errores

  • No se llamaba a onCleared de Fragment ViewModel (problema de AOSP 74139250)
  • Se llamaba varias veces a onLoadFinished() en ViewPager con FragmentPagerAdapter (problema de AOSP 74182171)
  • SmoothScrollToPosition() de LinearLayoutManager de RecyclerView muestra movimientos erráticos (hacia adelante y hacia atrás) en ciertas circunstancias (problema de AOSP 71567765)

Revisión 27.1.0: lanzamiento

(Febrero de 2018)

Cambios importantes

  • Se reescribió la implementación subyacente de los elementos Loader para usar Lifecycle. Si bien la API no se modifica, existen los siguientes cambios de comportamiento:
    • Ahora solo se puede llamar a initLoader(), restartLoader() y destroyLoader() en el subproceso principal.
    • Ahora se llama a onStartLoading() y onStopLoading() de un Loader cuando se inicia y se detiene, respectivamente, el objeto FragmentActivity/Fragment.
    • onLoadFinished() solo se llamará entre onStart() y onStop. Como resultado, las transacciones de Fragment ahora se pueden realizar de forma segura en onLoadFinished().
    • Los métodos de FragmentController relacionados con los cargadores dejaron de estar disponibles.
  • getDialog() de DialogFragment ahora no será nulo hasta onDestroyView(), en lugar de ser nulo en dismiss(). Ahora, puedes determinar si el diálogo se descartó de forma manual en onStop() comprobando si getDialog().isShowing() muestra falso.

API nuevas

  • ListAdapter para RecyclerView (junto con AsyncListDiffer) facilitan el cálculo de las diferencias de lista en un subproceso en segundo plano. Pueden ayudar a que tu contenido animado de RecyclerView cambie automáticamente, con un trabajo mínimo en el subproceso de IU. Usan DiffUtil en niveles profundos.
  • SortedList.ReplaceAll permite actualizar todos los datos de una SortedList, que ejecuta todas las animaciones apropiadas para inserciones, eliminaciones, cambios y movimientos (los movimientos se consideran inserciones y eliminaciones).
  • FragmentActivity y Fragment ahora implementan ViewModelStoreOwner y se pueden usar con los constructores ViewModelProvider como alternativa al uso de ViewModelProviders.of().
  • Los fragmentos ahora tienen métodos requireContext(), requireActivity(), requireHost() y requireFragmentManager(), que muestran un objeto NonNull de los métodos get equivalentes o arrojan un IllegalStateException.
  • Se agregó requireViewById(), una versión de compatibilidad de @NonNull de findViewById(), a WindowCompat, ActivityCompat y ViewCompat, que arrojan una IllegalArgumentException cuando no se puede encontrar el destino.
  • Los métodos LoaderCallbacks ahora tienen las anotaciones @Nullable y @NonNull adecuadas.
  • FileProvider ahora admite getExternalMediaDirs() en dispositivos con API 21 y versiones posteriores mediante el nuevo elemento <external-media-path>.

Correcciones de errores

  • El fragmento que inicializa Loader en onCreate rompió el ciclo de vida dentro de ViewPager
  • LoaderManager lanza una excepción IllegalStateException en onLoadFinished
  • LoaderViewModel no borra sus elementos Loader en OnCleared
  • No se encontró el archivo de clase para android.arch.lifecycleViewModelStoreOwner
  • DialogFragment onDismiss no se llamaba inmediatamente después de dismiss()
  • Los emojis de la bandera del país no funcionan en los dispositivos clave de lanzamiento cuando se usan fuentes descargables
  • La biblioteca de preferencias usa atributos que no funcionarán en versiones anteriores de Android
  • Los tipos de artefactos testlib de MediaCompat están incorrectamente documentados (problema de AOSP 71559905)
  • Google Sans falla en TypefaceCompatUtil
  • Exposición del constructor ArraySet que aparece en Collection
  • updateApi quita archivos .ignore que deberían conservarse
  • MainFragments redundantes creados en BrowseFragment
  • Se quitó el uso del reflejo de CarRecyclerView
  • java.lang.IllegalStateException en FragmentManagerImpl.checkStateLoss
  • Se obtenía (sin documentar) java.lang.SecurityException cuando se usaba android.support.v4.content.PermissionChecker.checkSelfPermission
  • RecyclerView IndexOutOfBoundsException porque State.mPreviousLayoutItemCount no se borraba en setAdapter (problema de AOSP 37657125)
  • El fragmento que inicializa Loader en onCreate tiene un ciclo de vida dañado dentro de ViewPager (problema de AOSP 34831613)
  • Fallas de FragmentManagerImpl.execSingleAction

Revisión 27.0.2: lanzamiento

(Noviembre de 2017)

Correcciones de errores

  • EmojiEditTextHelper arroja NullPointerException.
  • IllegalStateException: El fragmento aún no se adjuntó.
  • No se puede descartar el ícono emergente de "Cast" tocando en cualquier lugar de la pantalla.
  • MediaMetadataCompat arroja BadParcelableException.

Revisión 27.0.1: lanzamiento

(Noviembre de 2017)

Correcciones de errores

  • LifecycleRegistry está en el estado incorrecto después de que se llama a startActivityForResult() (problema 65665621).
  • El color de los botones inhabilitados es demasiado claro en los niveles de API anteriores.
  • Después de que un usuario se desplaza, no puede hacer clic en un elemento de un RecyclerView. (problema 66996774 de AOSP).
  • En Talkback, hacer clic en más opciones no hace que el sistema anuncie la nueva ventana emergente o agregue foco a las nuevas opciones.

Revisión 27.0.0: lanzamiento

(Octubre de 2017)

Diferencias de API

Cambios en la API

  • Las anotaciones de nulabilidad se agregaron a una variedad de APIs, incluidas las siguientes: Esto puede causar errores de compilación de Kotlin cuando los tipos de datos anulables que se muestran no se manejan correctamente.
  • Fragment puede usar versiones de biblioteca de compatibilidad de Transition para las transiciones de fragmentos, incluidas las transiciones de elementos compartidos.
  • La biblioteca de paginación de contenido (android.support.content.ContentPager) proporciona compatibilidad para paginar contenido expuesto mediante un ContentProvider. El uso de esta biblioteca permite que un cliente evite interprocesos costosos de "intercambios de ventana de cursor" en el subproceso de IU, lo que proporciona una biblioteca de compatibilidad para la función Android 8.0.
  • ViewCompat ahora agrega wrappers para los métodos de autocompletado, incluidos getImportantForAutofill(), isImportantForAutofill(), setAutofillHints() y setImportantForAutofill().
  • Leanback obtiene nuevas funciones y mejoras, y pierde algunas clases obsoletas, como las siguientes:
    • Picker ahora puede usar separadores diferentes entre cada columna con el método setSeparators().
    • Se agregó DiffCallback para permitir que ArrayObjectAdapter aproveche el resultado que proporciona DiffUtil.
    • Se agregó la infraestructura para admitir reproductores multimedia con controles variables, y se agregaron controles opcionales para avance rápido, repetición, reproducción aleatoria, siguiente, anterior y retroceso.
    • Se quitaron MediaControllerGlue, PlaybackControlGlue, PlaybackControlSupportGlue y PlaybackOverlayFragment.
  • Para las pruebas, la utilidad PollingCheck se transfiere desde el CTS del AOSP. Sondea para que una condición ocurra dentro de un tiempo de espera.
  • Se agregó la infraestructura para admitir permisos de tiempo de ejecución en apps instantáneas para Android 5.0 mediante PermissionCompatDelegate.
  • Ahora se admiten las pestañas personalizadas de confianza, junto con la capacidad de definir una relación entre una aplicación y un URI de origen.
  • La compatibilidad con el modo ambiente de Android Wear se simplifica con el uso del fragmento sin interfaz gráfica AmbientMode, que también permite que la compatibilidad con el modo ambiente sea compatible con el uso de componentes de arquitectura.
  • El equipo de Wear quiere recibir comentarios de los desarrolladores sobre este cambio significativo. Para obtener más información, consulta las Notas de la versión de Android Wear.
  • Algunas clases obsoletas se quitan a medida que nos alejamos de las antiguas API anteriores a V14, como android.support.v7.NotificationCompat (en su lugar, usa NotificationCompat v4), KeyEventCompat, ParallelExecutorCompat y SearchViewCompat.
  • Las constantes de metadatos del manifiesto de Wear migradas ahora están disponibles mediante android.support.wear.utils.MetadataConstants.
  • La compatibilidad con el modo ambiente ahora está disponible para todas las actividades, no solo para WearableActivity. Para obtener más información, consulta la referencia de AmbientMode.
  • RoundedDrawable ahora admite inflación XML.

Correcciones de errores

  • Se producen fallas de aplicaciones con la biblioteca de compatibilidad 27 y fuente descargable.
  • Las fuentes descargables no funcionan para los proyectos nuevos creados después de actualizar el SDK.
  • La API SpeechRecognizer falla en la última actualización.
  • Hay una falla relacionada con fragmentos durante el sorteo después de quitar el elemento View animado.
  • La reproducción de medios de soporte-leanback-demos falla.
  • La biblioteca de compatibilidad de Android agrega <meta-data> al manifiesto.
  • FontResourcesParserCompat debería entender android: attrs.
  • Leanback Glue no admite la tecla de entrada Pausa.
  • Símbolo sin resolver en IDE cuando varios paquetes comparten el mismo ID de artefacto.
  • Hay una excepción de puntero nulo en CarExtender.
  • El modo aleatorio o de repetición incorrecto establece PlaybackState después de crear MediaController.
  • Los pósteres predeterminados del clúster de la biblioteca se ejecutan en el siguiente clúster durante la navegación.
  • Los metadatos de la tarjeta de recomendación están cortados.
  • IllegalArgumentException en RecyclerView.attachViewToParent().
  • Se producía una excepción ClassNotFoundException cuando se desalineaba SavedState (problema de AOSP 37133281).
  • El foco se atasca en RecyclerView.
  • Se corrigió el ANR en Leanback LayoutManager.

Revisión 26.1.0: Lanzamiento

(Septiembre de 2017)

Esta es una versión especial para integrar la biblioteca de compatibilidad con Lifecycles de componentes de arquitectura. Si no usas la biblioteca Lifecycles, no necesitas actualizar desde la 26.0.2. Para obtener más información, consulta las notas de la versión de los componentes de la arquitectura.

Cambios importantes

Revisión 26.0.2: Lanzamiento

(Agosto de 2017)

Correcciones de errores

  • Los iconos de menú se aplanan en la biblioteca de compatibilidad 26.0.0.
  • GuidedAction.multilineDescription no funciona correctamente con Leanback.

Revisión 26.0.1: Lanzamiento

(Agosto de 2017)

Correcciones de errores

  • FontCompat 26.0.0 falla en dispositivos O-MR1.
  • La biblioteca de compatibilidad de diseño 26.0.0 no debe incluir compatibilidad con multidex (problema 63999442).
  • AppBarLayout ahora tiene 300 píxeles de relleno izquierdo a partir de la versión 26.0.0.
  • La navegación de PlaybackTransportControl falla.
  • Fragment.onCreateView se llama después de que finaliza onCreate.
  • android.os.BadParcelableException: ClassNotFoundException cuando se desalinea: android.support.v4.media.MediaMetadataCompat.

Revisión 26.0.0: Lanzamiento

(Julio de 2017)

Importante: Las bibliotecas de compatibilidad ahora están disponibles a través del repositorio Maven de Google. No es necesario que descargues el repositorio de compatibilidad desde SDK Manager. Para obtener más información, consulta Configuración de la biblioteca de compatibilidad.

Cambios importantes

  • La versión mínima del SDK aumentó a 14. Como resultado, muchas APIs que solo existían por compatibilidad con niveles de API anteriores a 14 quedaron obsoletas. Los clientes de estas APIs deben migrar a sus equivalentes del framework, como se indica en la página de referencia de cada API obsoleta.
  • La biblioteca de IU de Wear contiene clases que te ayudan a implementar patrones y diseños que funcionan en dispositivos Wear. Para obtener más información, consulta Cómo usar la biblioteca de IU de Wear.
  • El módulo de compatibilidad porcentual ya no está disponible. Los clientes de este módulo deben migrar al nuevo widget ConstraintLayout, que se proporciona como un artefacto separado en SDK Manager.
  • android.support.v7.app.NotificationCompat y las clases que lo contienen dejaron de estar disponibles y se quitarán en una versión futura:

API nuevas

  • Nueva marca booleana fastScrollEnabled para RecyclerView. Si se habilita, se deben configurar fastScrollHorizontalThumbDrawable, fastScrollHorizontalTrackDrawable, fastScrollVerticalThumbDrawable y fastScrollVerticalTrackDrawable.

Diferencias de API

Correcciones de errores

  • Bucle infinito en RecyclerView.toString()
  • ResourceNotFoundException ejecuta proyecto Kotlin en API nivel 16 de AVD después de actualizar a Canary 6.
  • java.lang.AssertionError en la vista de diseño con la biblioteca de compatibilidad 26.0.0-beta2
  • La vista previa del diseño de Android Studio no está disponible para los widgets de la biblioteca de compatibilidad
  • Preference.setSingleLineTitle() se ignora si la preferencia no se creó con atributos
  • Las anotaciones de DAC "desde" son incorrectas para las revisiones 25.3.0 / 25.4.0 de la biblioteca de compatibilidad
  • ResourcesCompat.getFont() lanza una excepción
  • El título de la barra de herramientas no está en negrita
  • El dimensionamiento automático con maxLines produce resultados inesperados
  • NullPointerException en TextView.checkForRelayout()
  • AppCompatTextViewAutoSizeHelper.setRawTextSize() llama a requestLayout() durante el diseño
  • Se producen fallas de EmojiAppCompatTextView.
  • El tamaño de TextView no se ajusta automáticamente cuando se cambia el texto
  • Error de pantalla en Instacart
  • UnsupportedOperationException en MenuItemCompat
  • NotificationCompat no extrae completamente las acciones en la API nivel 24 o en versiones posteriores
  • Se producen problemas de anclaje de CoordinatorLayout en actualizaciones de diseño