A biblioteca de suporte de design do Android para API 28 (P) não funciona

106

Configurei o ambiente do Android-P SDK com sucesso. Quando tento usar a biblioteca de suporte ao design do Android, encontro erros de construção do projeto. As configurações do projeto são:

IDE: 3.2 Canary 17 Target API: 28 Compile API: 28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

E o erro de falha de compilação é:

Falha na fusão do manifesto: o atributo application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) de [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 também está presente em [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Sugestão: adicione 'tools: replace = "android: appComponentFactory"' ao elemento em AndroidManifest.xml: 6: 5-40: 19 para substituir.

Rahul Rastogi
fonte
Você verificou esta resposta: stackoverflow.com/a/54825603/1318946
Pratik Butani

Respostas:

89

Você pode usar a versão anterior dos pacotes de API dos artefatos ou o novo Androidx, nunca ambos.

Se você quiser usar a versão anterior, substitua suas dependências por

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

se você deseja usar o Androidx:

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

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}
Danfeng
fonte
2
Esta resposta deve ser aceita. Mais informações em medium.com/mindorks/…
Rawa
Por que é o comnão foi substituir no materialno implementation?
RoCk RoCk
58

Atualização Importante

O Android não atualizará as bibliotecas de suporte depois 28.0.0.

Este será o último lançamento de recurso no pacote android.support, e os desenvolvedores são incentivados a migrar para o AndroidX 1.0.0 .

Portanto, use a biblioteca AndroidX .

  • Não use o Support e o AndroidX no projeto.
  • Seu módulo de biblioteca ou dependências ainda podem ter bibliotecas de suporte. O Androidx Jetifier cuidará disso.
  • Use a versão estável androidxou qualquer biblioteca, porque alpha, beta, rc podem ter bugs que você não deseja enviar com seu aplicativo.

No seu caso

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}
Khemraj
fonte
é estranho, meu projeto estava em P há muito tempo, mas começou a dar erros de biblioteca de suporte hoje quando eu construo. Há algo que estou perdendo aqui?
Talha
É um erro comum que todos nós enfrentamos hoje em dia, eu o enfrento a cada poucos dias ao executar o projeto. Basta fazer Invalidate cache e reiniciar.
Khemraj
@Talha Tente primeiro no menu Build> Clear Project e depois Build> Make Project, às vezes isso é suficiente, senão então invalide o cache e reinicie, pois invalidar o cache e reiniciar leva muito tempo e limpa o cache de todos os projetos.
João,
43

Adicione isso:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

ao seu aplicativo de manifesto

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

espero que ajude

Carlos santiago
fonte
O que você tem dentro @string/action_settings?
Aliton Oliveira 07/06/19
Tive um problema: Mais de um arquivo foi encontrado com caminho independente do SO 'META-INF / androidx.core_core.version
Aliton Oliveira
Erro após adicionar 2 linhas: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363
2
Você adicionou o xmlns: tools = " schemas.android.com/tools " dentro do cabeçalho AndroidManifest.xml?
Carlos Santiago
2
O manifesto em android / src / debug / tem um cabeçalho semelhante:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363
16

Eu usei essa opção:

Com o Android Studio 3.2 e superior, você pode migrar rapidamente um projeto existente para usar o AndroidX selecionando Refactor> Migrate to AndroidX na barra de menus.

https://developer.android.com/jetpack/androidx/migrate

Douglas Mesquita
fonte
9

O Google introduziu novas dependências AndroidX . Você precisa migrar para o AndroidX, é simples.

Substituí todas as dependências por dependências do AndroidX

Dependência de design antigo

implementation 'com.android.support:design:28.0.0'

Nova dependência de design AndroidX

implementation 'com.google.android.material:material:1.0.0-rc01'

você pode encontrar dependências do AndroidX aqui https://developer.android.com/jetpack/androidx/migrate


Opção de migração automática para AndroidX (compatível com Android Studio 3.3+)

Migre um projeto existente para usar o AndroidX selecionando Refactor> Migrate to AndroidX na barra de menus.

Amir Dora
fonte
1
implementação 'com.google.android.material: material: 1.1.0-alpha05' esta é a nova versão
Hitesh Tarbundiya,
o que colocar em vez de 'import android.support.design.widget.TabLayout;' ?
temirbek
6

1.Adicionou esses códigos ao seu app / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2. Versão modificada do SDK e das ferramentas para 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. Em seu arquivo AndroidManifest.xml, você deve adicionar duas linhas:

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Obrigado pela resposta @Carlos Santiago: A biblioteca de suporte ao design do Android para API 28 (P) não está funcionando

Codios
fonte
Esta solução não é compatível com o futuro, já que você deve usar o AndroidX agora. Os aplicativos antigos publicados devem ser atualizados agora. Se houver muito retrabalho, essas alterações ainda devem ser feitas.
Abhinav Saxena
@Abhinav Saxena Você está certo, devemos atualizar nosso projeto para 28 melhor do que resolver este problema com a versão antiga do SDK. :)
Codios
esta é a resposta aceita, depois de muitas sugestões, nada me ajudou, mas isso me ajudou quanto configurations.all {}. Você salvou meu dia, obrigado.
Noor Hossain
5

Biblioteca de suporte de design para androidX é implementation 'com.google.android.material:material:1.0.0'

Samir Elekberov
fonte
4

abra o arquivo gradle.properties e adicione estas duas linhas a ele:

android.useAndroidX = true
android.enableJetifier = true

limpar e construir

Lena Bru
fonte
1
useAndroidX informa ao compilador para o usuário androidx. arquivos em vez do antigo pacote de suporte do Android
Lena Bru
Isso instrui o Studio 3.2 e superior a migrar para o AndroidX. Todas as bibliotecas que migraram para o AndroidX devem ser corrigidas nas dependências.
Abhinav Saxena
3

Observação: você não deve usar as dependências com.android.support e com.google.android.material em seu aplicativo ao mesmo tempo.

Adicione componentes de materiais para Android em seu arquivo build.gradle (app)

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

Se o seu aplicativo atualmente depende da Design Support Library original, você pode usar a opção Refactor to AndroidX… fornecida pelo Android Studio. Isso atualizará as dependências e o código do seu aplicativo para usar as bibliotecas androidx e com.google.android.material recém-empacotadas.

Se você ainda não deseja alternar para os novos pacotes androidx e com.google.android.material, pode usar os componentes de material por meio da dependência com.android.support:design:28.0.0-alpha3.

Ashutosh
fonte
3

Em primeiro lugar, você deve procurar gradle.properties e esses valores devem ser verdadeiros . Se você não pode vê-los, você deve escrever.

android.useAndroidX=true
android.enableJetifier=true

Depois disso, você pode usar as dependências do AndroidX em seu build.gradle (Módulo: app) . Além disso, você deve verificar compileSDKVersion e targetVersion . Eles devem ser no mínimo 28. Por exemplo, estou usando 29.

Portanto, um exemplo de dependência do androidx:

implementation 'androidx.cardview:cardview:1.0.0'

No entanto, tenha cuidado porque nem tudo começa com o androidx como a dependência do cardview . Por exemplo, a dependência de design antigo é:

implementation 'com.android.support:design:27.1.1'

Mas a nova dependência do design é:

implementation 'com.google.android.material:material:1.1.0'

Portanto, você deve pesquisar e ler com atenção. Código feliz.

@canerkaseler

canerkaseler
fonte
2

Eu cruzo essa situação substituindo todos androidx.*por appropiate package name.

mude sua linha

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

para

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

NOTADO

  • remover tools:replace="android:appComponentFactory"do AndroidManifest
Aung Myo Lwin
fonte
0

O código abaixo funcionou perfeitamente comigo:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

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

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}
Hasan A Yousef
fonte
0

Experimente isto:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
Senhor limão
fonte
0

A documentação do Android é clara sobre isso. Vá para a página abaixo. Abaixo, há duas colunas com os nomes "ARTIFATO DE CONSTRUÇÃO ANTIGO" e "Artefato de construção do AndroidX"

https://developer.android.com/jetpack/androidx/migrate

Agora você tem muitas dependências no gradle. Basta combinar aquelas com os artefatos de compilação do Androidx e substituí-las no gradle.

Isso não será suficiente.

Vá para a sua MainActivity (repita para todas as atividades) e remova a palavra AppCompact Activity na instrução "public class MainActivity extends AppCompatActivity" e escreva a mesma palavra novamente. Mas desta vez a biblioteca androidx é importada. Até agora, o arquivo de suporte do appcompact foi importado e usado (também, remova a instrução de importação appcompact).

Além disso, vá para o arquivo de layout. Suponha que você tenha um layout de restrição, então você pode notar que o layout de restrição da primeira linha no arquivo xml tem algo relacionado a appcompact. Portanto, basta excluí-lo e escrever o layout de restrição novamente. Mas agora o layout de restrição relacionado ao androidx foi adicionado.

repita isso para quantas atividades e tantos arquivos de layout xml.

Mas não se preocupe: o Android Studio exibe todos os erros possíveis durante a compilação.

bhargav ram
fonte
0

Teve um problema semelhante. Adicionado em build.gradle e funcionou para mim.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
Diversão de férias
fonte
0

se você quiser resolver este problema sem migrar para o AndroidX (eu não recomendo)

esse problema de fusão de manifesto está relacionado a uma de suas dependências usando o androidX.

você precisa diminuir a versão de lançamento desta dependência. para o meu caso:

Eu estava usando o google ou firebase

api 'com.google.android.gms:play-services-base:17.1.0'

Tenho que diminuir 15.0.1 para usar na biblioteca de suporte.

elid
fonte
0

Adicionando androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'obras para mim.

Sanket Parchande
fonte