Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle failed to build when proguard is activated

I am trying to release my Android application with Gradle.

Everything works, including the ./gradlew clean build assembleRelease command.

However, as soon as I try to use proguard, Gradle fail to build the release version.

Here is the error I get (stack trace activated):

... :OSkin:validateDebugSigning :OSkin:packageDebug :OSkin:assembleDebug :OSkin:prepareReleaseDependencies :OSkin:compileReleaseAidl :OSkin:generateReleaseBuildConfig :OSkin:mergeReleaseAssets :OSkin:compileReleaseRenderscript :OSkin:mergeReleaseResources :OSkin:processReleaseManifest :OSkin:processReleaseResources :OSkin:compileRelease UP-TO-DATE :OSkin:proguardRelease ProGuard, version 4.9 Reading input... Reading program directory [/home/geantvert/workspace/OSkinProject/OSkin/build/classes/release] :OSkin:proguardRelease FAILED  FAILURE: Build failed with an exception.  * What went wrong: Execution failed for task ':OSkin:proguardRelease'. > Can't read [/home/geantvert/workspace/OSkinProject/OSkin/build/classes/release] (No such file or directory)  * Try: Run with --info or --debug option to get more log output.  * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':OSkin:proguardRelease'.     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)     at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)     at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)     at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)     at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)     at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)     at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)     at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)     at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:286)     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:80)     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTaskWithCacheLock(AbstractTaskPlanExecutor.java:58)     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:47)     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)     at org.gradle.internal.Factories$1.create(Factories.java:22)     at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:214)     at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:276)     at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:142)     at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:78)     at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31)     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:89)     at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)     at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)     at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)     at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)     at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)     at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)     at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)     at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)     at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)     at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)     at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)     at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)     at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)     at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)     at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)     at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)     at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)     at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)     at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)     at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)     at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)     at org.gradle.launcher.Main.doAction(Main.java:48)     at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)     at org.gradle.launcher.Main.main(Main.java:39)     at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)     at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)     at org.gradle.launcher.GradleMain.main(GradleMain.java:26)     at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)     at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)     at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48) Caused by: java.io.IOException: Can't read [/home/geantvert/workspace/OSkinProject/OSkin/build/classes/release] (No such file or directory)     at proguard.InputReader.readInput(InputReader.java:230)     at proguard.InputReader.readInput(InputReader.java:200)     at proguard.InputReader.readInput(InputReader.java:178)     at proguard.InputReader.execute(InputReader.java:78)     at proguard.ProGuard.readInput(ProGuard.java:197)     at proguard.ProGuard.execute(ProGuard.java:79)     at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:958)     at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:248)     at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:136)     at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)     at proguard.gradle.ProGuardTask_Decorated.invokeMethod(Unknown Source)     at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:248)     at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:136)     at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)     at proguard.gradle.ProGuardTask_Decorated.invokeMethod(Unknown Source)     at org.gradle.util.ReflectionUtil.invoke(ReflectionUtil.groovy:23)     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:220)     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:213)     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:202)     at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:530)     at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:513)     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)     ... 53 more Caused by: java.io.IOException: No such file or directory     at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:50)     at proguard.InputReader.readInput(InputReader.java:226)     ... 75 more   BUILD FAILED  Total time: 42.363 secs 

Here is my gradle file:

buildscript {     repositories {         mavenCentral()      }     dependencies {         classpath 'com.android.tools.build:gradle:0.5.+'     } } apply plugin: 'android'  repositories {     mavenCentral()     maven {         url 'http://www.bugsense.com/gradle/'     } }  dependencies {     compile fileTree(dir: 'libs', include: '*.jar')      compile 'com.google.guava:guava:14.+'     compile 'com.google.code.gson:gson:2.+'     compile 'org.zeroturnaround:zt-zip:1.+'     compile 'com.github.japgolly.android:svg-android:2.+'     compile('de.keyboardsurfer.android.widget:crouton:1.8.1') {         exclude module: 'support-v4'         compile 'com.android.support:support-v4:18.+'     }     compile 'com.squareup:otto:1.3.4'     compile 'com.squareup.okhttp:okhttp:1.2.+'     compile 'com.squareup.picasso:picasso:1+'     compile 'com.bugsense.trace:bugsense:3.5'      //Google Drive SDK     compile 'com.google.android.gms:play-services:3.+'     compile 'com.google.apis:google-api-services-drive:v2+'      compile('com.google.api-client:google-api-client:1.+') {         exclude(group: 'xpp3', module: 'xpp3')         exclude(group: 'org.apache.httpcomponents', module: 'httpclient')         exclude(group: 'junit', module: 'junit')         exclude(group: 'com.google.android', module: 'android')     }     compile('com.google.api-client:google-api-client-android:1.+') {         exclude group: 'xpp3'         exclude group: 'com.google.android.google-play-services'     }     compile('com.google.http-client:google-http-client-jackson:1.+') {         exclude group: 'xpp3'     }     compile('com.google.http-client:google-http-client-gson:1.+') {         exclude group: 'xpp3'     }      compile 'com.google.apis:google-api-services-plus:v1+'      compile 'com.netflix.rxjava:rxjava-android:+'      compile('com.github.frankiesardo:icepick:2+') {         exclude module: 'support-v4'         compile 'com.android.support:support-v4:18.+'     }  //    compile (group: 'com.google.apis', name: 'google-api-services-youtube', version: 'v3-rev56-1.15.0-rc') }  android {     compileSdkVersion 18     buildToolsVersion "18.0.1"      defaultConfig {         minSdkVersion 14         targetSdkVersion 18     }     signingConfigs {         release {                     storeFile file('path_to_file')                     storePassword '***'                     keyAlias '***'                     keyPassword '***'                 }     }      buildTypes             {                 release {                     runProguard true                     proguardFile getDefaultProguardFile('proguard-android.txt')                     proguardFile 'proguard-project.txt'                     signingConfig signingConfigs.release                 }             } } 

Does anyone has an idea of what is the issue?

Regards

Edit: ./gradlew clean assembleDebug works perfectly! and ./gradlew clean build assembleRelease works if runProguard is set to off. So it's a 100% proGuard issue.

like image 416
pommedeterresautee Avatar asked Aug 28 '13 07:08

pommedeterresautee


2 Answers

I've been battling this issue for the past few hours. Basically the proguard task will halt execution if there are any warnings. You can see the Proguard warnings, and the stacktrace, by adding -d to the build (as in: gradle clean assembleRelease -d). Note that the stacktrace mentions to "Please correct the above warnings first."

In order to just get to a point where the build would get through proguard, I had to add -dontwarn entries for packages it was complaining about to my proguard-project.txt file. Something along the lines of:

-dontwarn org.apache.lang.** 

...etc

So put simply... do as the stacktrace instructs you to do. Fix the warnings! :)

BTW, I apologize, as I now recognize that the stacktrace in the original post is not quite the same as the one I encountered. However, I do feel my answer is helpful, as obviously I ended up here trying to search for answers to my issue.

like image 106
Eric Schlenz Avatar answered Sep 20 '22 08:09

Eric Schlenz


Hmmm, I don't understand why but it seems if I start two times the same task with the same parameters (proguard...) the second one is the good one.

But if the second one the parameters change, the task fail.

Hope it will help someone.

Regards

like image 44
pommedeterresautee Avatar answered Sep 19 '22 08:09

pommedeterresautee