android build.gradle

Tipo de programa ya presente: android.support.v4.app.BackStackRecord



build.gradle (10)

He actualizado mi Android Studio y encontré muchos problemas en la última versión.

¡Aunque existen muchas preguntas similares, verifiqué las respuestas a todas y ninguna funcionó para mí!

Aquí está el error que enfrento al compilar el código:

Tipo de programa ya presente: android.support.v4.app.BackStackRecord $ Op Message {kind = ERROR, text = Tipo de programa ya presente: android.support.v4.app.BackStackRecord $ Op, sources = [Archivo fuente desconocido], herramienta nombre = Opcional. de (D8)}

Aquí está mi archivo gradle:

proyecto :

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath ''com.android.tools.build:gradle:3.1.0'' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } } } task clean(type: Delete) { delete rootProject.buildDir }

aplicación :

apply plugin: ''com.android.application'' android { compileSdkVersion 27 defaultConfig { applicationId "com.alcantara.bugismart" minSdkVersion 15 targetSdkVersion 27 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(dir: ''libs'', include: [''*.jar'']) implementation ''com.android.support:appcompat-v7:27.1.1'' implementation ''com.android.support.constraint:constraint-layout:1.0.2'' testImplementation ''junit:junit:4.12'' androidTestImplementation ''com.android.support.test:runner:1.0.1'' androidTestImplementation ''com.android.support.test.espresso:espresso- core:3.0.1'' implementation ''com.github.ViksaaSkool:AwesomeSplash:v1.0.0'' }

Puede decirme si hay algo más que agregar para comprender lo que estoy haciendo o dónde me equivoco.


Reemplace sus dependencias con él.

implementation fileTree(dir: ''libs'', include: [''*.jar'']) implementation ''com.android.support:appcompat-v7:28.0.0-alpha1'' 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''


Tipo de programa ya presente: android.support.v4.app.BackStackRecord $ Op Message {kind = ERROR, text = Tipo de programa ya presente: android.support.v4.app.BackStackRecord $ Op, sources = [Archivo fuente desconocido], herramienta nombre = Opcional. de (D8)}

El problema se produce debido a la biblioteca de soporte duplicada. Esta dependencia

implementation ''com.github.ViksaaSkool:AwesomeSplash:v1.0.0''

está utilizando la versión anterior de la biblioteca de soporte. Intente excluir la biblioteca de soporte si ya la tiene con:

// support libraries we want to use implementation ''com.android.support:appcompat-v7:27.1.1'' implementation ''com.android.support:support-v4:27.1.1'' // we already have the specific support libraries. So, exclude it implementation (''com.github.ViksaaSkool:AwesomeSplash:v1.0.0'') { exclude group: ''com.android.support'' exclude module: ''appcompat-v7'' exclude module: ''support-v4'' }

Debe verificar sus dependencias con el siguiente comando:

./gradlew app:dependencies

O , como alternativa , siempre puede anular la versión de las bibliotecas de soporte agregando las bibliotecas en conflicto con la versión exacta que desee.

ACTUALIZAR

Hay un paso completo para corregir los errores de resolución de dependencias en la documentación Agregar dependencias de compilación . Aquí los extractos:

Corregir errores de resolución de dependencias

Cuando agrega varias dependencias a su proyecto de aplicación, esas dependencias directas y transitivas pueden entrar en conflicto entre sí. Android Gradle Plugin intenta resolver estos conflictos con gracia, pero algunos conflictos pueden generar errores de tiempo de ejecución o tiempo de compilación.

Para ayudarlo a investigar qué dependencias contribuyen a los errores, inspeccione el árbol de dependencias de su aplicación y busque las dependencias que aparecen más de una vez o con versiones en conflicto.

Si no puede identificar fácilmente la dependencia duplicada, intente usar la interfaz de usuario de Android Studio para buscar dependencias que incluyan la clase duplicada de la siguiente manera:

  1. Seleccione Navegar > Clase en la barra de menú.
  2. En el cuadro de diálogo de búsqueda emergente, asegúrese de que la casilla junto a Incluir elementos no relacionados con el proyecto esté marcada.
  3. Escriba el nombre de la clase que aparece en el error de compilación.
  4. Inspeccione los resultados para las dependencias que incluyen la clase.

Las siguientes secciones describen los diferentes tipos de errores de resolución de dependencia que puede encontrar y cómo solucionarlos.

Repara errores de clase duplicados

Si una clase aparece más de una vez en el classpath en tiempo de ejecución, obtendrá un error similar al siguiente:

Program type already present com.example.MyClass

Este error generalmente ocurre debido a una de las siguientes circunstancias:

  • Una dependencia binaria incluye una biblioteca que su aplicación también incluye como dependencia directa. Por ejemplo, su aplicación declara una dependencia directa de la Biblioteca A y la Biblioteca B, pero la Biblioteca A ya incluye la Biblioteca B en su binario.

    • Para resolver este problema , elimine la Biblioteca B como dependencia directa.
  • Su aplicación tiene una dependencia binaria local y una dependencia binaria remota en la misma biblioteca.

    • Para resolver este problema , elimine una de las dependencias binarias.

Solucionar conflictos entre classpaths

Cuando Gradle resuelve el classpath de compilación, primero resuelve el classpath de tiempo de ejecución y utiliza el resultado para determinar qué versiones de dependencias se deben agregar al classpath de compilación. En otras palabras, el classpath en tiempo de ejecución determina los números de versión requeridos para dependencias idénticas en classpaths en sentido descendente.

El classpath en tiempo de ejecución de su aplicación también determina los números de versión que Gradle requiere para las dependencias coincidentes en el classpath en tiempo de ejecución para el APK de prueba de la aplicación. La jerarquía de classpaths se describe en la figura a continuación:

Un conflicto en el que pueden aparecer diferentes versiones de la misma dependencia en múltiples rutas de clase cuando, por ejemplo, su aplicación incluye una versión de una dependencia que usa la configuración de dependencia de implementation y un módulo de biblioteca incluye una versión diferente de la dependencia que usa la configuración runtimeOnly .

Al resolver dependencias en su tiempo de ejecución y compilar rutas de clase de tiempo, el complemento Android Gradle 3.3.0 y versiones posteriores intentan solucionar automáticamente ciertos conflictos de versiones posteriores. Por ejemplo, si el classpath en tiempo de ejecución incluye Library A versión 2.0 y el classpath de compilación incluye Library A versión 1.0, el complemento actualiza automáticamente la dependencia del classpath de compilación a Library A versión 2.0 para evitar errores.

Sin embargo, si el classpath de tiempo de ejecución incluye la Biblioteca A versión 1.0 y el classpath de compilación incluye la Biblioteca A versión 2.0, el complemento no degrada la dependencia del classpath de compilación a la Biblioteca A versión 1.0, y aún obtiene un error similar al siguiente:

Conflict with dependency ''com.example.library:some-lib:2.0'' in project ''my-library''. Resolved versions for runtime classpath (1.0) and compile classpath (2.0) differ.

Para resolver este problema, realice una de las siguientes acciones:

  • Incluya la versión deseada de la dependencia como una dependencia de api para su módulo de biblioteca. Es decir, solo su módulo de biblioteca declara la dependencia, pero el módulo de la aplicación también tendrá acceso a su API de forma transitiva.
  • Alternativamente, puede declarar la dependencia en ambos módulos, pero debe asegurarse de que cada módulo use la misma versión de la dependencia. Considere configurar las propiedades de todo el proyecto para garantizar que las versiones de cada dependencia permanezcan consistentes en todo su proyecto.

Probé esos:

  • limpiar / reconstruir
  • Invalidar efectivo y reiniciar
  • Excluir dependencias de mi biblioteca en mi app.gradle (ver más abajo)

implementación (proyecto ('': libxmiimp'')) {excluir grupo: ''com.android.support'', módulo: ''support-v4''}

  • Jugar con la configuración de gradle (cosas como multiDex habilitan true y otras)

Pero mi problema fue que Android-support-v4.jar de alguna manera entró en la carpeta lib de mi biblioteca local de Android ... Eliminarlo solucionó mi problema


Agregue esta línea de Código en la sección de dependencias de su archivo gradle

implementation ''com.android.support:support-v4:28.0.0''


Agregue este código a gradle de acuerdo con su "SdkVersion" :

implementation ''com.android.support:support-v4:28.0.0''

por ejemplo, mi SDKVersion es 28 y luego uso este código:

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


Agregue esto en su módulo de aplicación build.gradle :

implementation ''com.android.support:support-v4:27.1.1''


En mi caso, convertí un proyecto Eclipse muy antiguo en Android Studio. Entonces, la migración automática utilizada:

dependencies { compile files(''libs/android-support-v13.jar'') }

Simplemente elimine o comente en la línea con esta biblioteca.

Cuando comenté, Gradle hizo un script ejecutado correctamente.


También revise su carpeta libs porque:

implementation fileTree(dir: ''libs'', include: [''*.jar''])

recogerá todos los frascos de allí también. Es posible que tenga frascos que se duplican entre sí o con sus implementaciones inferiores.

Tenía duplicados en mis bibliotecas y obtuve este problema.


Una alternativa a la respuesta aceptada es decirle a Gradle que fuerce la versión más nueva:

final SUPPORT_LIB_VER = ''27.1.1'' configurations.all { resolutionStrategy { force "com.android.support:appcompat-v7:${SUPPORT_LIB_VER}" force "com.android.support:support-v4:${SUPPORT_LIB_VER}" } }

Esto puede ser más conveniente cuando tienes muchas dependencias.

ver también: Respuesta a "¿Cómo puedo obligar a Gradle a configurar la misma versión para dos dependencias?"


multiDexEnabled true agrega la línea anterior en el bloque de Android en gradle-app, funciona para mí ...