Posso usar uma biblioteca que usa suporte para Android com projetos Androidx.

95

Eu sei, dependência de androidx e suporte causando erro multidex Não podemos usar o suporte para androidx e android ao mesmo tempo. Portanto, migrei totalmente para o androidx. mas uma das minhas dependências lib usava suporte para Android "lottie".

O que podemos fazer na situação acima? Devo remover 'lottie' do meu projeto.

abaixo está meu 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
fonte

Respostas:

130

Você pode ativar Jetifierem seu projeto, o que basicamente trocará as Android Support Librarydependências em suas dependências de projeto com AndroidX-ones. (por exemplo, suas dependências Lottie serão alteradas de Suporte para AnroidX)

Na documentação do Android Studio ( https://developer.android.com/studio/preview/features/ ):

O plug-in Gradle do Android fornece os seguintes sinalizadores globais que você pode definir no arquivo gradle.properties:

  • android.useAndroidX: quando definido como verdadeiro, este sinalizador indica que você deseja começar a usar o AndroidX a partir de agora. Se o sinalizador estiver ausente, o Android Studio se comportará como se o sinalizador estivesse definido como falso.
  • android.enableJetifier: quando definido como verdadeiro, esse sinalizador indica que você deseja ter suporte de ferramenta (do plug-in Android Gradle) para converter automaticamente bibliotecas de terceiros existentes como se fossem escritas para AndroidX. Se o sinalizador estiver ausente, o Android Studio se comportará como se o sinalizador estivesse definido como falso.

Pré-condição para o Jetifier:

  • você tem que usar pelo menos Android Studio 3.2

Para habilitar o jetifier, adicione essas duas linhas ao seu gradle.propertiesarquivo:

android.useAndroidX=true
android.enableJetifier=true

Por fim, verifique as notas de lançamento do AndroidX, porque jetifierainda tem alguns problemas com algumas bibliotecas (por exemplo, Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn

Christopher
fonte
Meu projeto usa várias bibliotecas, algumas delas usam a biblioteca de suporte enquanto outras usam o androidx. Como faço para usar as duas bibliotecas em meu projeto?
Hiren Dabhi
1
@hiren dabhi Você pode criar uma nova pergunta para sua configuração, se a proposta de solução não estiver funcionando para você? É bastante difícil encontrar uma resposta sem saber mais detalhes sobre sua configuração.
Christopher
54

Adicionando manualmente android.useAndroidX=truee android.enableJetifier=trueme dificultando. Porque é lançar algum erro ou Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Para ativar o Jet-fire no projeto, há uma opção no android Studio

Selecione seu projeto ---> Clique com o botão direito

app ----> Refatorar ----> Migrar para AndroidX

Mostrado na imagem abaixo: -

insira a descrição da imagem aqui

Depois de clicar em Migrate to AndroidX .

Ele pedirá confirmação e backup do seu projeto.

insira a descrição da imagem aqui

E a última etapa pedirá para você refatorar.

insira a descrição da imagem aqui

Depois de refatorar, verifique se o gradle.properties tem android.useAndroidX=truee android.enableJetifier=true. Se não estiverem, adicione estas duas linhas ao arquivo gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Nota: - Atualizando usando o Android Studio, esta opção funciona se você tiver o Android Studio 3.2 e posterior. Verifique isto

sushildlh
fonte
1
boa sugestão, mas apenas uma observação lateral para pessoas atualizando usando o Android Studio, esta opção funciona se você tiver o Android Studio 3.2 e posterior. Verifique este developer.android.com/jetpack/androidx/migrate
AB
21

Você não precisa se preocupar

Basta habilitar o Jetifier em seu projeto.

  • Atualize o Android Studio para 3.2.0 ou mais recente.
  • Abra gradle.propertiese adicione duas linhas abaixo.

    android.enableJetifier=true
    android.useAndroidX=true

Ele converterá todas as bibliotecas de suporte de sua dependência para AndroidX em tempo de execução (você pode ter erros de tempo de compilação, mas o aplicativo será executado).

Khemraj
fonte
3
gradle.properties não foi encontrado em meus arquivos, eu mesmo criei
FindOutIslamNow
na verdade, uma dependência transitiva + cache gradle pode não funcionar, mesmo que android.enableJetifier=true, se isso acontecesse, eu acho que usar manualmente jetifier-standalonepara o aar de terceiros pode funcionar.
mochadwi
1

API 29. + uso de bibliotecas AndroidX. Se você estiver usando a API 29. +, não poderá removê-los. Se você deseja remover o AndroidX, é necessário remover toda a 29. + API do seu SDK:

Configurações do SDK

Isso vai funcionar bem.

Shubham Tiwari
fonte
0

Se o seu projeto não for AndroidX (significa Appcompat) e tiver esse erro, tente fazer o downgrade das versões das dependências que acionam esse erro, no meu caso play-services-location ("implementação 'com.google.android.gms: play-services-location : 17.0.0 '"), resolvi o problema fazendo o downgrade para com.google.android.gms: play-services-location: 16.0.0'

Ahmed KHABER
fonte
0

Eu tive um problema como este antes, era o arquivo gradle.properties não existe, apenas o gradle.properties.txt, então fui para a pasta do meu projeto e copiei e colei o arquivo gradle.properties.txt, mas sem. extensão txt então finalmente funcionou.

Dom broks
fonte
0

Eu adicionei duas linhas abaixo no arquivo gradle.properties

android.useAndroidX=true
android.enableJetifier=true

então eu obtive o seguinte erro

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

Eu removi as importações e adicionei a linha abaixo

import static android.app.AlertDialog.*;

E as classes que são estendidas de AppCompactActivity, adicionadas a linha abaixo. (Para esses erros, você só precisa pressionar alt + enter no android studio que irá importar a biblioteca correta para você. Assim, você pode resolver todos os erros)

import androidx.appcompat.app.AppCompatActivity;

Em seu arquivo xml, se você tiver usado algum

<android.support.v7.widget.Toolbar 

substitua por androidx.appcompat.widget.Toolbar

então em seu código java

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
fonte
-1

Comente esta linha em gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
fonte
OP está perguntando se é possível usar o AndroidX com suporte para Android. Você sugere desativar o AndroidX
Raildex
vá para gradle.properties e comente
Vibhu Vikram Singh