La biblioteca de soporte de diseño de Android para API 28 (P) no funciona


106

He configurado correctamente el entorno del SDK de Android-P. Cuando intento usar la biblioteca de soporte de diseño de Android, me enfrento a errores de compilación del proyecto. Las configuraciones del proyecto son:

IDE: 3.2 Canary 17 API de destino: 28 API de compilación: 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'
}

Y el error de compilación fallido es:

Error de fusión de manifiesto: la aplicación de atributo @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) de [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 también está presente en [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 valor = (android.support.v4.app.CoreComponentFactory). Sugerencia: agregue 'tools: replace = "android: appComponentFactory"' al elemento en AndroidManifest.xml: 6: 5-40: 19 para anularlo.


¿Ha verificado esta respuesta: stackoverflow.com/a/54825603/1318946
Pratik Butani

Respuestas:


89

Puede utilizar la versión anterior de los paquetes de API de artefactos o el nuevo Androidx, nunca ambos.

Si desea utilizar la versión anterior, reemplace sus dependencias con

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'
}

si quieres usar 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'
}

2
Esta respuesta debería ser la aceptada. Más información en medium.com/mindorks/…
Rawa

¿Por qué comno se reemplazó materialen el implementation?
RoCk RoCk

58

Actualización importante

Android no actualizará las bibliotecas de soporte después 28.0.0.

Esta será la última versión de funciones en el paquete android.support, y se anima a los desarrolladores a migrar a AndroidX 1.0.0 .

Así que usa la biblioteca AndroidX .

  • No use tanto Support como AndroidX en el proyecto.
  • Su módulo de biblioteca o sus dependencias aún pueden tener bibliotecas de soporte. Androidx Jetifier se encargará de ello.
  • Utilice la versión estable de androidxo cualquier biblioteca, porque alpha, beta, rc pueden tener errores que no desea enviar con su aplicación.

En tu 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'
}

Es extraño, mi proyecto estuvo en P desde hace mucho tiempo, pero comenzó a dar errores de biblioteca de soporte hoy cuando construyo. ¿Hay algo que me falta aquí?
Talha

Es un error común que todos enfrentamos hoy en día, lo enfrento cada pocos días en el proyecto en ejecución. Simplemente haga Invalidar caché y reinicie.
Khemraj

@Talha Inténtelo desde el menú Construir> Borrar proyecto y luego Construir> Hacer proyecto primero, a veces esto es suficiente, si no, invalide el caché y reinicie, ya que invalidar el caché y reiniciar lleva mucho tiempo y borra el caché de todos los proyectos.
John

43

Agrega esto:

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

a tu aplicación de manifiesto

<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 eso ayude


¿Qué tienes dentro @string/action_settings?
Aliton Oliveira

Tuve un problema: se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / androidx.core_core.version
Aliton Oliveira

Error después de agregar 2 líneas: * 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
¿ Agregó el xmlns: tools = " schemas.android.com/tools " dentro del encabezado AndroidManifest.xml?
Carlos Santiago

2
El manifiesto en android / src / debug / tiene un encabezado similar:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google ha introducido nuevas dependencias de AndroidX . Necesita migrar a AndroidX, es simple.

Reemplacé todas las dependencias a las dependencias de AndroidX

Dependencia de diseño antiguo

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

Nueva dependencia de diseño de AndroidX

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

puede encontrar las dependencias de AndroidX aquí https://developer.android.com/jetpack/androidx/migrate


Opción de migración automática de AndroidX (compatible con Android Studio 3.3+)

Migre un proyecto existente para usar AndroidX seleccionando Refactor> Migrar a AndroidX en la barra de menú.


1
implementación 'com.google.android.material: material: 1.1.0-alpha05' esta es una nueva versión
Hitesh Tarbundiya

qué poner en lugar de 'import android.support.design.widget.TabLayout;' ?
temirbek

6

1. Agregó estos códigos a su aplicación / build.gradle:

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

2.Sdk modificado y versión de herramientas a 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.En su archivo AndroidManifest.xml, debe agregar dos líneas:

<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">

Gracias por la respuesta @Carlos Santiago: la biblioteca de soporte de diseño de Android para API 28 (P) no funciona


Esta solución no es compatible con el futuro, ya que debería usar AndroidX ahora. Las aplicaciones antiguas que se publican deben actualizarse ahora. Si hay muchas modificaciones, esos cambios aún deben realizarse.
Abhinav Saxena

@Abhinav Saxena Tiene razón, deberíamos actualizar nuestro proyecto a 28 mejor que resuelto este problema con la versión anterior del SDK. :)
Codios

esta es la respuesta aceptada, después de muchas sugerencias, nada me ayudó, pero esto me ayudó como configuraciones.todos {}. Me salvaste el día, gracias.
Noor Hossain

5

La biblioteca de soporte de diseño para androidX es implementation 'com.google.android.material:material:1.0.0'


4

abra el archivo gradle.properties y agregue estas dos líneas:

android.useAndroidX = true
android.enableJetifier = true

limpiar y construir


1
useAndroidX le dice al compilador al usuario androidx. archivos en lugar del antiguo paquete de soporte de Android
Lena Bru

Esto indica que Studio 3.2 y superior migren a AndroidX. Todas las bibliotecas que han migrado a AndroidX se corregirán en dependencias.
Abhinav Saxena

3

Nota: No debe utilizar las dependencias com.android.support y com.google.android.material en su aplicación al mismo tiempo.

Agregue Material Components para Android en su archivo build.gradle (aplicación)

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

Si su aplicación depende actualmente de la biblioteca de soporte de diseño original, puede hacer uso de la opción Refactor to AndroidX… proporcionada por Android Studio. Al hacerlo, se actualizarán las dependencias y el código de su aplicación para usar las bibliotecas androidx y com.google.android.material recién empaquetadas.

Si aún no desea cambiar a los nuevos paquetes androidx y com.google.android.material, puede usar Materiales Components a través de la dependencia com.android.support:design:28.0.0-alpha3.


3

En primer lugar, debe buscar gradle.properties y estos valores deben ser verdaderos . Si no puede verlos, tiene que escribir.

android.useAndroidX=true
android.enableJetifier=true

Después de eso, puede usar las dependencias de AndroidX en su build.gradle (Módulo: aplicación) . Además, debe verificar compileSDKVersion y targetVersion . Deben tener un mínimo de 28. Por ejemplo, estoy usando 29.

Entonces, un ejemplo de dependencia de androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Sin embargo, tenga cuidado porque no todo comienza con androidx, como la dependencia de cardview . Por ejemplo, la dependencia de diseño anterior es:

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

Pero la nueva dependencia del diseño es:

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

Por lo tanto, debe buscar y leer con atención. Código feliz.

@canerkaseler


2

Cruzo esa situación reemplazando todos androidx.*a appropiate package name.

cambia tu linea

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'

a

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'

CÉLEBRE

  • eliminar tools:replace="android:appComponentFactory"de AndroidManifest

0

El siguiente código funcionó perfectamente conmigo:

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'
}

0

Prueba esto:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

0

La documentación de Android es clara al respecto. Ve a la página siguiente. Debajo, hay dos columnas con los nombres "ARTEFACTO DE CONSTRUCCIÓN ANTIGUA" y "Artefacto de compilación de AndroidX"

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

Ahora tienes muchas dependencias en gradle, simplemente haz coincidir las que tienen los artefactos de compilación de Androidx y reemplázalas en gradle.

Eso no será suficiente.

Vaya a su MainActivity (repita esto para todas las actividades) y elimine la palabra AppCompact Activity en la declaración "public class MainActivity extiende AppCompatActivity" y escriba la misma palabra nuevamente. Pero esta vez la biblioteca androidx se importa. Hasta ahora, el archivo de soporte de appcompact se importó y usado (también, elimine esa declaración de importación de appcompact).

Además, vaya a su archivo de diseño. Suponga que tiene un diseño de restricción, luego puede notar que el diseño de restricción de la primera línea en el archivo xml tiene algo relacionado con appcompact. Así que simplemente elimínelo y escriba el diseño de restricción nuevamente. Pero ahora se agrega el diseño de restricción relacionado con androidx.

repita esto para tantas actividades y tantos archivos de diseño xml.

Pero no se preocupe: Android Studio muestra todos estos posibles errores durante la compilación.


0

Tuvo un problema similar. Agregado en build.gradle y funcionó para mí.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

si quieres solucionar este problema sin migrar a AndroidX (no lo recomiendo)

este problema de fusión de manifiesto está relacionado con una de sus dependencias con androidX.

debe disminuir la versión de lanzamiento de esta dependencia. para mi caso:

Estaba usando google o firebase

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

Tengo que disminuirlo 15.0.1 para usarlo en la biblioteca de soporte.


0

Añadiendo androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'obras 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.