2013-08-28 5 views
49

Я пытаюсь выпустить приложение для Android с помощью Gradle.Gradle не удалось создать при активации proguard

Все работает, включая команду ./gradlew clean build assembleRelease.

Однако, как только я пытаюсь использовать proguard, Gradle не может создать версию выпуска.

Здесь ошибка я получаю (трассировка стека активирован):

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

Вот мой 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 
       } 
      } 
} 

ли кто-нибудь имеет представление о том, что проблема?

С уважением

Edit: ./gradlew clean assembleDebug работает отлично! и ./gradlew clean build assembleRelease работает, если runProguard выключен. Так что это 100% проблема proGuard.

+2

У меня была проблема с proguard, и благодаря вашему фрагменту кода это привело к тому, что я добавил свой proguard-project.txt в мой build.gradle, и это решило мою проблему. Я желаю, чтобы в графе droid у него было это в примере. – withoutclass

+0

Почему у вас есть mavenCentral() дважды в файле сборки? –

+0

Один для плагина, один для зависимостей. – pommedeterresautee

ответ

73

Я боролся этот вопрос в течение последних нескольких часов. В принципе, задача proguard останавливает выполнение, если есть какие-либо предупреждения. Вы можете увидеть предупреждения Proguard и stacktrace, добавив -d в сборку (как в: gradle clean assembleRelease -d). Обратите внимание, что stacktrace ссылается на «сначала исправьте указанные выше предупреждения».

Для того, чтобы просто добраться до точки, где сборка прошла через proguard, мне пришлось добавить -dontwarn записей для пакетов, которые он жаловался моему файлу proguard-project.txt. Что-то вдоль линий:

-dontwarn org.apache.lang.** 

... и т.д.

Так просто положить ... сделать как StackTrace порекомендует вам сделать. Исправьте предупреждения! :)

Кстати, я извиняюсь, так как теперь я признаю, что stacktrace в исходном сообщении не совсем то же самое, что и тот, с которым я столкнулся. Тем не менее, я чувствую, что мой ответ полезен, поскольку, очевидно, я оказался здесь, пытаясь найти ответы на мои вопросы.

+2

Да, для меня это точно то же самое ... это должно быть решением, а не тем, что было выше. Они могут зайти в ваш файл proguard-project.txt и просто добавить это в свой раздел. Шахта выглядит так: -dontwarn android.webkit. * -dontwarn org.apache. ** -dontwarn com.newrelic. ** – occasl

+2

Nice. :) большое спасибо! Я реализовал «Samsung Pass SDK», поэтому мне пришлось добавить -dontwarn com.samsung. ** На всякий случай кто-то там борется. –

2

Хммм, я не понимаю, почему, но кажется, что если я начинаю в два раза одну и ту же задачу с теми же параметрами (proguard ...), второй является хорошим.

Но если второй параметр изменяется, задача не работает.

Надеюсь, что это поможет кому-то.

С уважением

-10

Убедитесь, что ваш minifyEnabled в сборки Gradle установлен в "ложной". Потому что, когда он будет «истинным» отладчиком при генерации подписанного apk, выдается сообщение об ошибке.

+1

Подписанные APK не представляют проблемы для отладки. Но если вы не «minifyEnabled», вам быстро нужно «multiDexEnabled» - это еще больший боль, чем Proguard. – Martin

+0

Multidex WAYY меньше усилий, чем proguard может быть (требуется только пара изменений), когда вы используете rxjava и retrolambda, а также kotlin и другие зависимости ... просто положите его туда. При этом мы используем и то, и другое. Proguard имеет важное значение для сборки релизов, если вы вообще не заботитесь о безопасности приложений и хотели бы стричь записи журнала по соображениям производительности. Я провел WEEKS, преследуя проблемы Proguard, в то время как переход на multidex был буквально 10-минутным усилием. – ChrisPrime

Смежные вопросы