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