问题
After updating my Firebase and Play Services dependencies as well as the Play Services Plugin my project fails to build. I've tried multiple Clean-Rebuilds and my app has MultiDex enabled. Reverting to my original dependency versions is also not an option as I added a dependency for cloud functions for which the latest version is incompatible with my other firebase dependencies. I can see the following under Android Issues
Program type already present: android.arch.core.util.Function
Message{kind=ERROR, text=Program type already present: android.arch.core.util.Function, sources=[Unknown source file], tool name=Optional.of(D8)}
I also see an error message under Run Tasks
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
My gradle dependencies
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
implementation 'com.android.support:multidex:1.0.3'
//Android Support
implementation 'com.android.support:support-v13:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation "com.android.support:cardview-v7:27.1.1"
implementation "com.android.support:customtabs:27.1.1"
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation "com.android.support:support-v4:27.1.1"
//Firebase
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-analytics:16.0.0'
implementation 'com.google.firebase:firebase-appindexing:15.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation 'com.google.firebase:firebase-firestore:17.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation 'com.google.firebase:firebase-functions:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0'
//implementation 'com.google.firebase:firebase-storage:16.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
transitive = true
}
//implementation 'com.google.firebase:firebase-invites:16.0.0'
implementation 'com.google.firebase:firebase-config:16.0.0'
//Google Play
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.android.gms:play-services-places:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
//Stream Support
implementation 'net.sourceforge.streamsupport:android-retrostreams:1.6.1'
implementation 'net.sourceforge.streamsupport:android-retroflow:1.6.1'
implementation 'net.sourceforge.streamsupport:android-retrofuture:1.6.1'
//Location
implementation 'io.nlopez.smartlocation:library:3.3.3'
//Firebase UI
implementation 'com.firebaseui:firebase-ui-firestore:4.0.0'
//Facebook
implementation 'com.facebook.android:facebook-login:4.31.0'
//Search
implementation 'com.algolia:algoliasearch-android:3.14.1'
//Butterknife
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//UI Elements for layout staggering
implementation 'com.google.android:flexbox:0.3.2'
//Image Handling Library
implementation 'com.facebook.fresco:fresco:1.8.0'
// UI Element for Country-code
implementation 'com.hbb20:ccp:2.1.2'
// UI Element for OTP
implementation 'com.github.GoodieBag:Pinview:v1.3'
//Loading indicator using shimmer
implementation 'io.supercharge:shimmerlayout:2.0.0'
//UI Element for Tooltip
implementation 'it.sephiroth.android.library.targettooltip:target-tooltip-library:1.3.15'
//Date/Time Pickers for Hangout Creation
implementation 'com.wdullaer:materialdatetimepicker:3.5.1'
//UI Element from Drop-down boxes
implementation('com.weiwangcn.betterspinner:library-material:1.1.0') {
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'appcompat-v4'
}
//JSON Handling
implementation 'com.google.code.gson:gson:2.8.2'
//Permissions using RxPermissions
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
//RxBindings for Platform
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.1.1'
//Logging
implementation 'com.jakewharton.timber:timber:4.6.0'
//Testing
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'
}
回答1:
I found the solution which some great guy posted on GitHub. Instead of downgrading your firebaseUI database, you can add arch common and runtime dependencies which are these:
//Arch
implementation "android.arch.core:runtime:1.1.1"
implementation "android.arch.core:common:1.1.1"
Just add these in your app: module dependencies section and you know build it.
回答2:
My project works with the latest version of firebase core, database, messaging and auth
dependencies and latest classpath 'com.google.gms:google-services:4.0.1'
App/build.gradle
dependencies {
// Tab Layout and ViewPager
implementation 'com.android.support:design:27.1.1'
// firebase dependencies
// implementation 'com.firebaseui:firebase-ui-database:4.0.0' Source of error
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.1'
}
build.gradle
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.0.1'
}
}
The problem evolves when adding implementation 'com.firebaseui:firebase-ui-database:4.0.0'
It shows this error:
Program type already present: android.arch.core.util.Function
Message{kind=ERROR, text=Program type already present: android.arch.core.util.Function, sources=[Unknown source file], tool name=Optional.of(D8)}
The solution was to downgrade implementation 'com.firebaseui:firebase-ui-database:4.0.0'
to implementation 'com.firebaseui:firebase-ui-database:3.3.1'
as follows:
App/build.gradle
dependencies {
// Tab Layout and ViewPager
implementation 'com.android.support:design:27.1.1'
// firebase dependencies
implementation 'com.firebaseui:firebase-ui-database:3.1.1' // No trouble in compiling
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.1'
}
I hope Google will solve this issue in future updates.
Hope that helped!
回答3:
The solution is to add the below implemention on your build.gradle in android studio. Hope it helps.
implementation "android.arch.core:runtime:$version"
implementation "android.arch.core:common:$version"
回答4:
Try replacing gradle files with:
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
jcenter()
google()
}
}
And Module:app grandle with:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
}
buildTypes {
debug{
debuggable true
minifyEnabled false
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
dexOptions {
javaMaxHeapSize "4g"
}
repositories {
jcenter()
google()
maven { url 'https://maven.google.com' }
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
implementation 'com.android.support:multidex:1.0.3'
//Android Support
implementation 'com.android.support:support-v13:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation "com.android.support:cardview-v7:27.1.1"
implementation "com.android.support:customtabs:27.1.1"
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation "com.android.support:support-v4:27.1.1"
//Firebase
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-analytics:16.0.0'
implementation 'com.google.firebase:firebase-appindexing:15.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation 'com.google.firebase:firebase-firestore:17.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation 'com.google.firebase:firebase-functions:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0'
//implementation 'com.google.firebase:firebase-storage:16.0.1' //Maintain compatibility with com.firebaseui:firebase-ui-firestore
implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
transitive = true
}
//implementation 'com.google.firebase:firebase-invites:16.0.0'
implementation 'com.google.firebase:firebase-config:16.0.0'
//Google Play
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.android.gms:play-services-places:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
//Stream Support
implementation 'net.sourceforge.streamsupport:streamsupport:1.6.0'
implementation 'net.sourceforge.streamsupport:streamsupport-cfuture:1.6.0'
implementation 'net.sourceforge.streamsupport:streamsupport-atomic:1.6.0'
implementation 'net.sourceforge.streamsupport:streamsupport-flow:1.6.0'
implementation 'net.sourceforge.streamsupport:streamsupport-literal:1.6.0'
//Location
implementation 'io.nlopez.smartlocation:library:3.3.3'
//Firebase UI
implementation 'com.firebaseui:firebase-ui-firestore:4.0.0'
//Facebook
implementation 'com.facebook.android:facebook-login:4.32.0'
//Search
implementation 'com.algolia:algoliasearch-android:3.14.1'
//Butterknife
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//UI Elements for layout staggering
implementation 'com.google.android:flexbox:0.3.2'
//Image Handling Library
implementation 'com.facebook.fresco:fresco:1.8.0'
// UI Element for Country-code
implementation 'com.hbb20:ccp:2.1.2'
// UI Element for OTP
implementation 'com.github.GoodieBag:Pinview:v1.3'
//Loading indicator using shimmer
implementation 'io.supercharge:shimmerlayout:2.0.0'
//UI Element for Tooltip
implementation 'it.sephiroth.android.library.targettooltip:target-tooltip-library:1.3.15'
//Date/Time Pickers for Hangout Creation
implementation 'com.wdullaer:materialdatetimepicker:3.5.1'
//UI Element from Drop-down boxes
implementation('com.weiwangcn.betterspinner:library-material:1.1.0') {
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'appcompat-v4'
}
//JSON Handling
implementation 'com.google.code.gson:gson:2.8.2'
//Permissions using RxPermissions
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
//RxBindings for Platform
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.1.1'
//Logging
implementation 'com.jakewharton.timber:timber:4.6.0'
//Testing
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'
}
apply plugin: 'com.google.gms.google-services'
回答5:
Program type already present: android.arch.core.util.Function Message{kind=ERROR, text=Program type already present: android.arch.core.util.Function, sources=[Unknown source file], tool name=Optional.of(D8)}
I had the same problem above, and it was because i didn't include the core.
implementation 'com.google.firebase:firebase-core:16.0.1'
Noted some of your dependency is 16.0.1, would suggest you upgrade the core to 16.0.1 instead of 16.0.0.
Have enclosed my dependency below for reference, hope you find it useful.
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.firebaseui:firebase-ui-database:4.1.0'
来源:https://stackoverflow.com/questions/50524672/build-fails-with-program-type-already-present-android-arch-core-util-function