¿Puedo usar la biblioteca que usa soporte de Android con proyectos de Androidx?

96

Lo sé, androidx y la dependencia de soporte causan un error multidex No podemos usar el soporte de androidx y android al mismo tiempo. Así que migro totalmente a androidx. pero una de mis bibliotecas de dependencia usaba el soporte de Android "lottie".

¿Qué podemos hacer en la situación anterior? ¿Debo eliminar 'lottie' de mi proyecto?

debajo está mi gradle

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }
Hitesh Dhamshaniya
fuente

Respuestas:

133

Puede habilitar Jetifieren su proyecto, que básicamente intercambiará las Android Support Librarydependencias en las dependencias de su proyecto con AndroidX-ones. (por ejemplo, sus dependencias de Lottie se cambiarán de Support a AnroidX)

De la documentación de Android Studio ( https://developer.android.com/studio/preview/features/ ):

El complemento de Android Gradle proporciona las siguientes marcas globales que puede configurar en su archivo gradle.properties:

  • android.useAndroidX: cuando se establece en verdadero, esta marca indica que desea comenzar a usar AndroidX a partir de ahora. Si la bandera está ausente, Android Studio se comporta como si la bandera estuviera configurada como falsa.
  • android.enableJetifier: cuando se establece en verdadero, esta marca indica que desea tener soporte de herramientas (del complemento de Android Gradle) para convertir automáticamente bibliotecas de terceros existentes como si estuvieran escritas para AndroidX. Si la bandera está ausente, Android Studio se comporta como si la bandera estuviera configurada como falsa.

Requisito para Jetifier:

  • tienes que usar al menos Android Studio 3.2

Para habilitar jetifier, agregue esas dos líneas a su gradle.propertiesarchivo:

android.useAndroidX=true
android.enableJetifier=true

Finalmente, consulte las notas de la versión de AndroidX, porque jetifiertodavía tiene algunos problemas con algunas bibliotecas (por ejemplo, Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn

Christopher
fuente
Mi proyecto usa múltiples bibliotecas, algunas de ellas usan una biblioteca de soporte mientras que otras usan androidx. ¿Cómo utilizo ambas bibliotecas en mi proyecto?
Hiren Dabhi
1
@hiren dabhi ¿Puede crear una nueva pregunta para su configuración, si la propuesta de solución no le funciona? Es bastante difícil encontrar una respuesta sin conocer más detalles sobre su configuración.
Christopher
57

Añadiendo manualmente android.useAndroidX=truey android.enableJetifier=truehaciéndome pasar un mal rato. Porque es lanzar algun error o Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Para habilitar Jet-fire en el proyecto, hay una opción en Android Studio

Seleccione su proyecto ---> clic derecho

aplicación ----> Refactor ----> Migrar a AndroidX

Se muestra en la imagen de abajo: -

ingrese la descripción de la imagen aquí

Después, haga clic en Migrar a AndroidX .

Le pedirá confirmación y una copia de seguridad de su proyecto.

ingrese la descripción de la imagen aquí

Y último paso te pedirá que hagas una refactorización.

ingrese la descripción de la imagen aquí

Después de hacer Refactor, verifique que gradle.properties tenga android.useAndroidX=truey android.enableJetifier=true. Si no es así, agregue estas dos líneas a su archivo gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Nota: - Actualizando con Android Studio, esta opción funciona si tiene Android Studio 3.2 en adelante. Mira esto

sushildlh
fuente
1
buena sugerencia, pero solo una nota al margen para las personas que actualizan con Android Studio, esta opción funciona si tiene Android Studio 3.2 y posteriores. Consulte este developer.android.com/jetpack/androidx/migrate
AB
21

No necesitas preocuparte

Simplemente habilite Jetifier en su proyecto.

  • Actualice Android Studio a 3.2.0 o más reciente.
  • Abra gradle.propertiesy agregue debajo de dos líneas.

    android.enableJetifier=true
    android.useAndroidX=true
    

Convertirá todas las bibliotecas de soporte de su dependencia a AndroidX en tiempo de ejecución (es posible que tenga errores de tiempo de compilación, pero la aplicación se ejecutará).

Khemraj
fuente
3
gradle.properties no se encontró en mis archivos, creé yo mismo
FindOutIslamNow
de hecho, una dependencia transitiva + caché gradle podría no funcionar, incluso android.enableJetifier=true, si esto sucediera, creo que el uso manual jetifier-standalonedel aar de terceros podría funcionar.
mochadwi
Tengo Android Studio 4.1. Activé Jetifier. Mi aplicación no se está ejecutando.
meekash55 hace
@ meekash55 ¿cuál es el error?
Khemraj hace
@Khemraj incluso al agregar Jetifier a gradle.properties, comenzó a mostrar errores de tiempo de compilación en todas partes del proyecto, donde se usa la biblioteca de soporte V4. Entonces, la única opción que queda es corregir y migrar todo el código a AndroidX manualmente. Lo cual no era una opción para mí.
meekash55 hace
1

API 29. + uso de bibliotecas AndroidX. Si está utilizando API 29. +, no puede eliminarlos. Si desea eliminar AndroidX, debe eliminar la API 29. + completa de su SDK:

Configuración del SDK

Esto funcionará bien.

Shubham Tiwari
fuente
1

Agregué debajo de dos líneas en el archivo gradle.properties

android.useAndroidX=true
android.enableJetifier=true

entonces recibí el siguiente error

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

Eliminé las importaciones y agregué debajo de la línea

import static android.app.AlertDialog.*;

Y las clases que se extienden desde AppCompactActivity, agregaron la siguiente línea. (Para estos errores, solo necesita presionar alt + enter en Android Studio que importará la biblioteca correcta para usted. De esta manera, puede resolver todos los errores)

import androidx.appcompat.app.AppCompatActivity;

En su archivo xml si ha usado alguna

<android.support.v7.widget.Toolbar 

reemplazarlo con androidx.appcompat.widget.Toolbar

luego en tu código java

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
fuente
1
Pero luego tiene un gran proyecto, uno no puede cambiar todos los Fragmentos y actividades para solo un cambio de androidX.
meekash55 hace
0

Si su proyecto no es AndroidX (es decir, Appcompat) y obtuvo este error, intente degradar las versiones de las dependencias que desencadenan este error, en mi caso play-services-location ("deployment 'com.google.android.gms: play-services-location : 17.0.0 '"), resolví el problema degradando a com.google.android.gms: play-services-location: 16.0.0'

Ahmed KHABER
fuente
0

Tuve un problema como este antes, era que el archivo gradle.properties no existe, solo el gradle.properties.txt, así que fui a la carpeta de mi proyecto y copié y pegué el archivo gradle.properties.txt pero sin. txt, entonces finalmente funcionó.

Dom broks
fuente
-1

Comenta esta línea en gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
fuente
OP pregunta si es posible usar AndroidX con el soporte de Android. Sugieres deshabilitar AndroidX
Raildex
vaya a gradle.properties y comente
Vibhu Vikram Singh