Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

build failing during merge resources with Android Gradle plugin 3.3.0

I have a lot of different flavors for my build that have specific resources and I don't want to clutter my src directory in my project with a bunch of flavor-specific directories, so I add the source sets from another folder in my project prior to the mergeResources task (mergeResources.doFirst). This has always worked for the past several versions of the Android Gradle plug-in (3.1.0-3.2.0 and some of the 3.3.0-alpha versions), but at a certain point, the 3.3.0-alpha AGP started causing build failures during this mergeResources task.

Now I keep getting:

BUILD FAILED in 35s 16 actionable tasks: 15 executed, 1 up-to-date Exception in thread "ForkJoinPool.commonPool-worker-6" java.lang.IllegalStateException: AAPT Process manager cannot be shut down while daemons are in use at com.android.builder.internal.aapt.v2.Aapt2DaemonManager.shutdown(Aapt2DaemonManager.kt:96) at com.android.build.gradle.internal.res.namespaced.RegisteredAaptService.shutdown(Aapt2DaemonManagerService.kt:61) at com.android.build.gradle.internal.workeractions.WorkerActionServiceRegistry$shutdownAllRegisteredServices$1$1.run(WorkerActionServiceRegistry.kt:96) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

My stacktrace is:

Execution failed for task ':app:mergeMainReleaseResources'. java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2InternalException: AAPT2 aapt2-3.3.0-alpha13-5013011-windows Daemon #0: Unexpected error during compile 'C:\Users\Alex\Documents\Work\Android\project\app\productio n_resources\categories\fitness\res\drawable-xxxhdpi\background_4.png', attempting to stop daemon. This should not happen under normal circumstances, please file an issue if it does.

Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeMainReleaseResources'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101) at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59) 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.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46) at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)

Caused by: org.gradle.internal.UncheckedException: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2InternalException: AAPT2 aapt2-3.3.0-alpha13-5013011-windows Daemon #0: Unexpected error during compile 'C:\Users\Alex \Documents\Work\Android\project\app\production_resources\categories\fitness\res\drawable-xxxhdpi\background_4.png', attempting to stop daemon. This should not happen under normal circumstances, please file an issue if it does. at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63) at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:76) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99) ... 31 more Caused by: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2InternalException: AAPT2 aapt2-3.3.0-alpha13-5013011-windows Daemon #0: Unexpected error during compile 'C:\Users\Alex\Documents\Work\Android\project\app\ production_resources\categories\fitness\res\drawable-xxxhdpi\background_4.png', attempting to stop daemon. This should not happen under normal circumstances, please file an issue if it does. at com.android.ide.common.workers.ExecutorServiceAdapter.close(ExecutorServiceAdapter.kt:56) at com.android.build.gradle.internal.aapt.WorkerExecutorResourceCompilationService.close(WorkerExecutorResourceCompilationService.kt:67) at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:268) at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) ... 42 more

Caused by: com.android.builder.internal.aapt.v2.Aapt2InternalException: AAPT2 aapt2-3.3.0-alpha13-5013011-windows Daemon #0: Unexpected error during compile 'C:\Users\Alex\Documents\Work\Android\project\app\production_resources\categories\fitness\res\drawable-xxxhdpi\background_4.png', attempting to stop daemon. This should not happen under normal circumstances, please file an issue if it does. at com.android.builder.internal.aapt.v2.Aapt2Daemon.handleError(Aapt2Daemon.kt:148) at com.android.builder.internal.aapt.v2.Aapt2Daemon.compile(Aapt2Daemon.kt:88) at com.android.builder.internal.aapt.v2.Aapt2DaemonManager$LeasedAaptDaemon.compile(Aapt2DaemonManager.kt:170) at com.android.build.gradle.internal.res.Aapt2CompileWithBlameRunnable$run$1.invoke(Aapt2CompileWithBlameRunnable.kt:37) at com.android.build.gradle.internal.res.Aapt2CompileWithBlameRunnable$run$1.invoke(Aapt2CompileWithBlameRunnable.kt:28) at com.android.build.gradle.internal.res.namespaced.Aapt2DaemonManagerService.useAaptDaemon(Aapt2DaemonManagerService.kt:71) at com.android.build.gradle.internal.res.namespaced.Aapt2DaemonManagerService.useAaptDaemon$default(Aapt2DaemonManagerService.kt:69) at com.android.build.gradle.internal.res.Aapt2CompileWithBlameRunnable.run(Aapt2CompileWithBlameRunnable.kt:34) at com.android.ide.common.workers.ExecutorServiceAdapter$submit$submission$1.run(ExecutorServiceAdapter.kt:39)

Caused by: java.io.IOException: AAPT2 process unexpectedly exit. Error output: at com.android.builder.internal.aapt.v2.Aapt2DaemonImpl$WaitForTaskCompletion.err(Aapt2DaemonImpl.kt:309) at com.android.builder.internal.aapt.v2.Aapt2DaemonImpl$processOutput$1.err(Aapt2DaemonImpl.kt:75) at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)

I thought maybe the PNG file was corrupted or incorrectly labeled, but I've run it through a whole bunch of conversions and I get the same error.

During testing, it works fine, but during the release builds is when I get this error. I've resorted to building using AS 3.2 and AGP 3.2.0 for my production builds, which works fine. Also, this is Windows only. It works fine on my Mac.

My build.gradle is:

apply plugin: 'com.android.application' apply plugin: 'io.fabric'  android {     compileSdkVersion rootProject.ext.compileSdkVersion     buildToolsVersion '28.0.3'     defaultConfig {         applicationId "com.project.test"         minSdkVersion rootProject.ext.minSdkVersion         targetSdkVersion rootProject.ext.targetSdkVersion         versionCode 37         versionName "1.0"         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"         multiDexEnabled true     }      dexOptions {         jumboMode true         javaMaxHeapSize "4g"         preDexLibraries = false     }      sourceSets {          debug.setRoot('build-types/debug')         release.setRoot('build-types/release')          androidTest.setRoot('tests')     }      signingConfigs {          key {             storeFile file(RELEASE_STORE_FILE)             storePassword RELEASE_STORE_PASSWORD             keyAlias RELEASE_KEY_ALIAS             keyPassword RELEASE_KEY_PASSWORD         }      }      buildTypes {          debug {             minifyEnabled false         }          release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'             signingConfig signingConfigs.key         }     }      flavorDimensions "default"      productFlavors {          main {             versionName "0"             buildConfigField "String", "CATEGORY", "\"fitness\""             buildConfigField "String", "BUILD_VERSION", "\"$config.buildVersion\""             dimension "default"         }          flavors.each { name, flavor ->             "$name" {                 applicationId = config.applicationId + "." + "$name"                 versionName = config.versionName                 versionCode = flavor.versionCode                 buildConfigField "String", "CATEGORY", "\"${flavor.category}\""                 buildConfigField "String", "BUILD_VERSION", "\"$config.buildVersion\""                 buildConfigField "String", "APP_ID", "\"$name\""                 resValue "string", "APP_NAME", flavor.appName                 dimension "default"             }         }      }      packagingOptions {         exclude 'META-INF/rxjava.properties'     }      configurations.all {         resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'     }      compileOptions {         sourceCompatibility JavaVersion.VERSION_1_8         targetCompatibility JavaVersion.VERSION_1_8     } }  dependencies {     implementation fileTree(include: ['*.jar'], dir: 'libs')     androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {         exclude group: 'com.android.support', module: 'support-annotations'     })     androidTestImplementation('com.android.support.test:runner:1.0.1', {         exclude group: 'com.android.support', module: 'support-annotations'     })     implementation 'com.google.code.findbugs:jsr305:3.0.2'     implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"     implementation "com.android.support:support-v4:$rootProject.supportLibraryVersion"     implementation "com.android.support:design:$rootProject.supportLibraryVersion"     implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"     implementation "com.android.support:customtabs:$rootProject.supportLibraryVersion"     implementation 'com.android.support:multidex:1.0.3'     implementation 'com.android.billingclient:billing:1.1'     implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"     implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"     implementation "com.squareup.retrofit2:adapter-rxjava2:$rootProject.retrofitVersion"     implementation 'com.squareup.okhttp3:okhttp:3.11.0'     implementation 'com.google.code.gson:gson:2.8.5'     implementation "com.facebook.fresco:fresco:$rootProject.frescoVersion"     implementation "com.facebook.fresco:animated-gif:$rootProject.frescoVersion"     implementation "com.google.android.gms:play-services-auth:$rootProject.playServicesVersion"     implementation "com.google.android.gms:play-services-gcm:$rootProject.playServicesVersion"     implementation "com.google.android.gms:play-services-base:$rootProject.playServicesVersion"     implementation "com.google.android.gms:play-services-ads:$rootProject.playServicesVersion"     implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {         transitive = true     }     implementation 'com.mixpanel.android:mixpanel-android:5.2.1'     implementation "com.google.dagger:dagger:$rootProject.daggerVersion"     implementation "com.google.dagger:dagger-android-support:$rootProject.daggerVersion"     annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.daggerVersion"     implementation "com.jakewharton:butterknife:$rootProject.butterknifeVersion"     annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion"     implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'     implementation 'io.reactivex.rxjava2:rxjava:2.2.0'     implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'     implementation "com.google.android.exoplayer:exoplayer-core:$rootProject.exoPlayerVersion"     implementation "com.google.android.exoplayer:exoplayer-hls:$rootProject.exoPlayerVersion"     implementation "com.google.android.exoplayer:exoplayer-ui:$rootProject.exoPlayerVersion"     testImplementation 'junit:junit:4.12' }  android.applicationVariants.all { variant ->     def category     variant.productFlavors.each { flavor ->         flavor.buildConfigFields.each { key, value ->             if (key == "CATEGORY") {                 category = value.value.substring(1, value.value.length() - 1)             }         }     }     variant.mergeResources.doFirst {         android.sourceSets."${variant.productFlavors.get(0).name}".res.srcDirs =                 ["production_resources/flavors/${variant.productFlavors.get(0).name}/res",                  "production_resources/categories/${category}/res"]     } }  afterEvaluate {     tasks.matching {         it.name.startsWith('dex')     }.each { dx ->         if (dx.additionalParameters == null) {             dx.additionalParameters = []         }         dx.additionalParameters += '--multi-dex'         dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString()     } }  apply plugin: 'com.google.gms.google-services' 
like image 649
akong9759 Avatar asked Oct 09 '18 01:10

akong9759


People also ask

What is gradle plugin?

The Android Gradle plugin (AGP) is the official build system for Android applications. It includes support for compiling many different types of sources and linking them together into an application that you can run on a physical Android device or an emulator.

What is gradle Android studio?

Android Studio uses Gradle, an advanced build toolkit, to automate and manage the build process, while allowing you to define flexible custom build configurations. Each build configuration can define its own set of code and resources, while reusing the parts common to all versions of your app.


2 Answers

Updated 19th April, 2019

This issue has been fixed in Android Gradle Plugin 3.4.0.

After upgrading to Android Studio 3.4.0, the temporary fix suggested in the original answer can be removed. Hurray!

Original

This is a bug in AAPT2 in Android Gradle Plugin 3.3.0, when building a project with larger png's (around 2-3 mb and up).

@akong9759 created an issue for this on Googles issue tracker and it has been fixed.

https://issuetracker.google.com/issues/117900475

The problem has been fixed in Android Gradle Plugin 3.5.0-alpha03 and the fix is scheduled to be released in version 3.4.0.

A temporary fix for Android Gradle Plugin 3.3.0 has been suggested on the issue. Add the following to the project build.gradle:

allprojects {     // Workaround for https://issuetracker.google.com/117900475     // Remove when upgrading to AGP 3.4 or higher.     configurations.matching { it.name == '_internal_aapt2_binary' }.all { config ->         config.resolutionStrategy.eachDependency { details ->             details.useVersion("3.5.0-alpha03-5252756")         }     } } 
like image 66
Michel Gammelgaard Avatar answered Sep 22 '22 04:09

Michel Gammelgaard


I had the same issue. The build would break and mention different png files, like your background_4.png, but only on a Windows PC. The build on a Mac had no problems.

In my case the image size was the problem. Only images bigger than 2MB seamed to break the build. After reducing every image to something lesser than 2MB the build started working again.

like image 32
Stefan Lösing Avatar answered Sep 24 '22 04:09

Stefan Lösing