¿Qué es Jetifier?


97

¿Qué es Jetifier? Por ejemplo, para crear un nuevo proyecto usando las dependencias empaquetadas con androidx, este nuevo proyecto necesita agregar la siguiente línea al archivo gradle.properties :

android.enableJetifier=true

Entonces, ¿qué significa "habilitar jetifier"?


29
IIRC, Jetifier es una parte no documentada de la tecnología Googly que se supone que convierte automáticamente las dependencias transitivas para usar bibliotecas de AndroidX. Por ejemplo, suponga que tiene implementation "com.commonsware.cwac:document:0.3.0"en su dependencies. Esa versión de biblioteca tiene una dependencia transitiva de com.android.support:support-annotations:27.0.2. Sin embargo, desea utilizarlo androidx.annotation:annotationcomo parte del uso de otras dependencias de AndroidX. Jetifier de alguna manera se actualizaría com.commonsware.cwac:documentpara usar androidx.annotation:annotation.
CommonsWare

Respuestas:


68

Google I / O de este año (18), Google ha anunciado Jetpack, que es un conjunto / colección de bibliotecas para facilitar la vida del desarrollador.

Jetpack incluye componentes de arquitectura de Android introducidos anteriormente (ViewModel, Room, Paging, LiveData, etc.), así como componentes de arquitectura recientemente introducidos como WorkManager, Navigation. Aparte de este Jetpack también tiene otro conjunto de bibliotecas como AndroidX, AndroidKTX, etc.

AndroidX es una nueva estructura de paquete para bibliotecas de soporte de Android como soporte, enlace de datos, diseño, etc.

por ejemplo, ahora en los wards, los desarrolladores utilizarán androidx.databinding. en lugar de android.databinding. al importar bibliotecas en nuestros proyectos

Esto le permite a Google agregar SemVer o Semantic Versioning en sus paquetes de biblioteca. Para los desarrolladores, esto significa que no tenemos que usar la misma versión de biblioteca de soporte para todas las bibliotecas de soporte. Cada soporte o mejor dicho, la biblioteca de AndroidX mantendrá su propio control de versiones.

Otra ventaja para los desarrolladores es que no tenemos que preocuparnos por mantener la misma versión para todas las bibliotecas de soporte en nuestro proyecto.

Acerca de Jetifier, convierte todo el paquete de soporte de dependencia en el momento de la compilación. Según documentación oficial de Jetifier

La herramienta Jetifier migra bibliotecas dependientes de la biblioteca de soporte para confiar en los paquetes AndroidX equivalentes. La herramienta le permite migrar una biblioteca individual directamente, en lugar de usar el complemento gradle de Android incluido con Android Studio.

Para usar AndroidX en un proyecto, debemos establecer targetSdkVersion para nuestro proyecto en 28 y agregar las siguientes 2 líneas en el archivo gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Espero que esto responda a tu consulta.

EDITAR

Este enlace tiene un mapeo de todos los componentes de la biblioteca de soporte con su contraparte de AndroidX.

También consulte este blog para obtener una explicación detallada sobre AndroidX


34
Realmente no estás respondiendo a la pregunta "¿Qué es Jetifier?", Solo estás hablando de AndroidX y Jetpack.
David Miguel

2
@DavidMiguel He proporcionado la respuesta a la pregunta principal que es ¿qué significa - "habilitar jetifier" ?. Aunque si cree que mi respuesta es parcial, actualizaré mi respuesta en consecuencia.
silwar

72

Suponiendo que esté familiarizado con AndroidX. Si no es así, consulte @ esta publicación .

Jetifierconvertirá support librariestodas sus dependencias en AndroidXautomáticamente, si no lo configura, truesu proyecto tendrá tanto el soporte (que quedó obsoleto después de la versión 28.0.0 ) como el paquete AndroidX , que es redundante.

Por ejemplo

Si tiene PhotoView.javaen su dependencia. Que usa la biblioteca de soporte AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Esta clase se mueve ahora al androidxpaquete, entonces, ¿cómo se PhotoViewobtendrá androidx AppCompatImageView? Y la aplicación aún se ejecuta en el dispositivo.

¿Quién hizo esto?

Jetifier , que convierte todo el paquete de soporte de dependencia en el momento de la compilación.

Jetifier se convertirá android.support.v7.widget.AppCompatImageViewa androidx.appcompat.widget.AppCompatImageViewmientras se construye el proyecto.

Conclusión

Habilitar Jetifier es importante cuando se migra de las bibliotecas de soporte a AndroidX .

Consulte esta publicación para comprender más sobre AndroidX.

Información

Su código puede mostrar errores de tiempo de compilación después de habilitar Jetifier mientras usa clases de dependencia. que se puede eliminar mediante la supresión .idea, .gradley el proyecto de re-sincronización.

imagen2

imagen1


10
Puede deshacerse de los errores en tiempo de compilación eliminando .idea / libraries y volviendo a sincronizar Gradle.
Clo Knibbe

1
Creo que Jetifier funciona en el momento de la compilación y no en el tiempo de ejecución como se menciona aquí. Puede usar android.enableJetifier = true en gradle o usar la herramienta jetifier independiente developer.android.com/studio/command-line/jetifier para migrar a androidx. Ambas opciones reemplazan los nombres de los paquetes en el momento de la compilación, por lo que las antiguas bibliotecas de soporte ni siquiera forman parte del paquete.
Nishanth

6

Jetifier ayuda a migrar un proyecto de Android a AndroidX .

Jetifier ayuda a hacer que la biblioteca de terceros sea compatible con su proyecto AndroidX.

Si no está utilizando ninguna biblioteca de terceros en su proyecto de Android, entonces no necesita usar Jetifier porque Jetifier solo ayuda a "hacer que la biblioteca de terceros" sea compatible con su proyecto en caso de que esté migrando a AndroidX. Entonces, para que su proyecto use Jetifier, escriba el código a continuación en gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Si no está migrando a AndroidX y está utilizando la forma anterior de usar las bibliotecas de Android (por ejemplo: com.android.support ), entonces estas bibliotecas de terceros no necesitan ser compatibles ya que estas bibliotecas de terceros ya son compatibles con la forma anterior de usando bibliotecas de Android. En ese caso, no necesita usar Jetifier, por lo que ahora, no necesita escribir las líneas dadas arriba o simplemente puede escribir lo siguiente para cambiar los valores en el futuro para pasar a androidx: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

El jetifier es una práctica herramienta que migra automáticamente dependenciesa AndroidXen tiempo de compilación. Sin él, necesitaría que todas las dependencias que use para tener una versión de AndroidX antes de poder migrar, y eso probablemente no sucederá por algún tiempo.

Hay una limitación importante a tener en cuenta: el jetifier solo funciona en artefactos empaquetados. No funciona en su código fuente, que se espera que actualice usted mismo

para habilitar AndroidX, debe agregar 2 banderas a su gradle.propertiesarchivo. El primer indicador le dice al complemento de Android que use AndroidXpaquetes en lugar de AppCompat, y el segundo indicador habilitará Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Vea esto , esta publicación para comprender más sobre AndroidX


3

Del documento oficial

Cuando esta marca se establece en verdadero, el complemento de Android migra automáticamente las bibliotecas de terceros existentes para usar las dependencias de AndroidX reescribiendo sus binarios. La bandera es falsa por defecto si no se especifica.

Es útil por compatibilidad. Cuando un consumidor usa androidXy un productor usa support. Por ejemplo, cuando su proyecto AndroidXquiere usar una dependencia que usa en support librarylugar de AndroidX[Ejemplo]


0

Agregue estas dos líneas android.useAndroidX = true

android.enableJetifier = true

en buid.gradle funcionó para mí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.