tutorial studio minifyenabled features defaultconfig configurar android gradle proguard

android - studio - proguard features



Gradle no pudo compilar cuando Proguard está activado (3)

Compruebe que su minifyEnabled in build gradle está configurado en " falso ". Porque cuando se trata de depurador "verdadero" mientras se genera la apk firmada dará un error.

Estoy tratando de lanzar mi aplicación de Android con Gradle.

Todo funciona, incluido el ./gradlew clean build assembleRelease .

Sin embargo, tan pronto como trato de usar proguard, Gradle no puede construir la versión de lanzamiento.

Aquí está el error que obtengo (rastreo de pila activado):

... :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

Aquí está mi archivo gradle:

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 } } }

¿Alguien tiene una idea de cuál es el problema?

Saludos

Edit: ./gradlew clean assembleDebug funciona a la perfección! y ./gradlew clean build assembleRelease funciona si runProguard está desactivado. Entonces, es un problema 100% proguardista.


He estado batallando con este tema durante las últimas horas. Básicamente, la tarea de protección detendrá la ejecución si hay advertencias. Puede ver las advertencias de Proguard y stacktrace, agregando -d a la compilación (como en: gradle clean assembleRelease -d ). Tenga en cuenta que stacktrace menciona "Corrija primero las advertencias anteriores".

Para llegar a un punto donde la compilación pasaría a través de proguard, tuve que agregar -dontwarn entradas para paquetes de los que se quejaba a mi archivo proguard-project.txt . Algo como:

-dontwarn org.apache.lang.**

... etc

Así que simplemente ... haz lo que el stacktrace te indica que hagas. ¡Arregla las advertencias! :)

Por cierto, me disculpo, ya que ahora reconozco que el stacktrace en la publicación original no es exactamente el mismo que encontré. Sin embargo, creo que mi respuesta es útil, ya que obviamente terminé aquí tratando de buscar respuestas a mi problema.


Hmmm, no entiendo por qué pero parece que si empiezo dos veces la misma tarea con los mismos parámetros (proguard ...) la segunda es la buena.

Pero si el segundo cambia los parámetros, la tarea falla.

Espero que ayude a alguien.

Saludos