Intenté actualizar mi proyecto de Android a Kotlin 1.4.0
, ya que ahora es oficialmente estable, y después de la actualización encontré un problema. No publicaré la pila completa aquí, ya que es muy larga, pero la parte superior se ve así:
... > Task :app:transformClassesWithFirebasePerformancePluginForDebug java.lang.ClassNotFoundException: javax.mail.internet.MimeBodyPart > Task :app:mergeDebugJavaResource > Task :app:dexBuilderDebug FAILED org.gradle.workers.WorkerExecutionException: There was a failure while executing work items ...
Buscando una causa, más abajo en la pila, encontré esto:
... Caused by: org.gradle.tooling.BuildException: Failed to process: /bitrise/src/app/build/intermediates/transforms/FirebasePerformancePlugin/debug/0, /bitrise/src/app/build/intermediates/transforms/FirebasePerformancePlugin/debug/1, /bitrise/src/app/build/intermediates/transforms/FirebasePerformancePlugin/debug/2 ...
Lo que me lleva a la conclusión de que la biblioteca Firebase Performance no se puede compilar correctamente. Estoy usando Firebase Performance versión 19.0.8
con el complemento gradle classpath versión 1.3.1
. No lo he cambiado por un tiempo y volver a versiones anteriores no resuelve el problema. El último error registrado en la pila es este:
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing. at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:151) at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:118) at com.android.build.gradle.internal.dexing.DexWorkActionKt.process(DexWorkAction.kt:194) ... 33 more Caused by: java.lang.IllegalStateException: Unexpected non-class file: META-INF/versions/9/kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader.class
He determinado que eliminar la biblioteca Firebase Performance y volver a Kotlin 1.3.71
resuelve el problema, pero me gustaría conservar ambos para el futuro del proyecto, así que estoy buscando otra solución.
Mi archivo build.gradle
:
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' apply plugin: 'androidx.navigation.safeargs.kotlin' apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.google.firebase.firebase-perf' apply from: "dependencies.gradle" apply from: "buildtypes.gradle" android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.example.app" minSdkVersion 23 targetSdkVersion 29 versionCode 100 versionName "1.0.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" archivesBaseName = "$applicationId-$versionName-$versionCode" } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } buildFeatures { dataBinding = true } }
Y una lista completa de dependencias:
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:$versions.coreDesugaring" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" implementation "androidx.core:core:$versions.core" implementation "androidx.core:core-ktx:$versions.core" implementation "androidx.appcompat:appcompat:$versions.appCompat" implementation "androidx.browser:browser:$versions.browser" implementation "androidx.constraintlayout:constraintlayout:$versions.constraintLayout" implementation "androidx.legacy:legacy-support-v4:$versions.legacy" // UI implementation "com.google.android.material:material:$versions.material" implementation "com.appyvet:materialrangebar:$versions.materialRangeBar" implementation "com.wdullaer:materialdatetimepicker:$versions.datetimepicker" // Lifecycle implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.lifecycle" // Navigation component implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" // Coroutines implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$versions.coroutines" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.coroutines" // Koin implementation "org.koin:koin-android:$versions.koin" implementation "org.koin:koin-androidx-ext:$versions.koin" implementation "org.koin:koin-androidx-scope:$versions.koin" implementation "org.koin:koin-androidx-viewmodel:$versions.koin" // Work Manager implementation "androidx.work:work-runtime:$versions.work" implementation "androidx.work:work-runtime-ktx:$versions.work" // Flipper debugImplementation "com.facebook.soloader:soloader:$versions.soloader" debugImplementation "com.facebook.flipper:flipper-network-plugin:$versions.flipper" debugImplementation "com.kgurgul.flipper:flipper-realm-android:$versions.flipperRealm" debugImplementation "com.facebook.flipper:flipper:$versions.flipper" releaseImplementation "com.facebook.flipper:flipper-noop:$versions.flipper" // Location & Maps implementation "com.google.android.gms:play-services-maps:$versions.playLocation" implementation "com.google.android.gms:play-services-location:$versions.playLocation" implementation "com.google.maps.android:android-maps-utils:$versions.mapUtils" // Logging implementation "com.jakewharton.timber:timber:$versions.timber" implementation "org.slf4j:slf4j-api:$versions.slf4j" implementation "com.github.tony19:logback-android:$versions.logback" // Databases implementation "com.github.sevar83:android-spatialite:$versions.spatialite" // Archives implementation "org.zeroturnaround:zt-zip:$versions.ztZip" // Dialogs implementation "com.afollestad.material-dialogs:core:$versions.materialDialogs" implementation "com.afollestad.material-dialogs:datetime:$versions.materialDialogs" implementation "com.afollestad.material-dialogs:lifecycle:$versions.materialDialogs" // Permissions implementation "com.karumi:dexter:$versions.dexter" implementation("dev.doubledot.doki:library:$versions.doki") { transitive = true } // JSON implementation "com.squareup.moshi:moshi:$versions.moshi" implementation "com.squareup.moshi:moshi-kotlin:$versions.moshi" // Firebase implementation "com.google.firebase:firebase-analytics:$firebase_versions.analytics" implementation "com.google.firebase:firebase-crashlytics:$firebase_versions.crashlytics" implementation "com.google.firebase:firebase-perf:$firebase_versions.performance" // Payments implementation "com.android.billingclient:billing:$versions.billing" implementation "com.android.billingclient:billing-ktx:$versions.billing" // Testing testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" testImplementation "junit:junit:$test_version.junit" testImplementation "androidx.test:core:$test_version.androidTest" testImplementation "androidx.test:runner:$test_version.androidTest"
¿Por qué está fallando esta compilación? ¿Es culpa de Kotlin 1.4.0
o hay algún problema con las dependencias? ¿Se puede resolver este problema sin volver a la versión anterior de Kotlin?
Parece ser un problema de AGP que se abordará en la versión 4.1.0. Más detalles están aquí - https://issuetracker.google.com/issues/165535092
Como solución, sugeriría aplicar la actualización 4.1.0-rc02
classpath 'com.android.tools.build:gradle:4.1.0-rc02'
No es la mejor solución, pero al menos para mí, funcionó: si está construyendo desde la línea de comandos usando el contenedor de Gradle:
./gradlew clean assembleDebug -Pdisable-performance-plugin
Si ejecuta su proyecto desde Android Studio:
Luego, puede ejecutar su proyecto con Kotlin 1.4 hasta que solucionen el problema.
Como efecto secundario, los tiempos de construcción parecen mejorar.