2013-08-28 13 views
49

सक्रिय होता है मैं Gradle साथ मेरी Android एप्लिकेशन जारी करने के लिए कोशिश कर रहा हूँ का निर्माण करने में विफल रहा है।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 
       } 
      } 
} 

किसी को भी कि समस्या क्या है की एक विचार है करता है?

सादर

संपादित करें: पूरी तरह से काम करता है ./gradlew clean assembleDebug! और ./gradlew clean build assembleRelease काम करता है अगर रनप्रोगर्ड बंद हो जाता है। तो यह 100% प्रोगार्ड मुद्दा है।

+2

मैं वास्तव में ProGuard के साथ एक समस्या हो रही थी, और अपने कोड के लिए धन्यवाद यह नेतृत्व मुझे मेरे build.gradle करने के लिए अपने ProGuard-project.txt जोड़ सकते हैं और है कि मेरी समस्या हल करने के लिए झलकी। मैं चाहता हूं कि एंड्रॉइड ग्रेडल डॉक्स उदाहरण में हों। – withoutclass

+0

आपके निर्माण फ़ाइल में दो बार mavenCentral() क्यों है? –

+0

एक प्लग-इन के लिए है, एक निर्भरता के लिए। – pommedeterresautee

उत्तर

73

मैं पिछले कुछ घंटों के लिए इस मुद्दे से जूझ रहा है। मूल रूप से अगर कोई चेतावनी होती है तो प्रोजेक्ट कार्य निष्पादन रोक देगा। निर्माण के लिए -d जोड़कर आप प्रोगार्ड चेतावनियां और स्टैकट्रैक देख सकते हैं (जैसा कि: gradle clean assembleRelease -d)। ध्यान दें कि स्टैकट्रैक का उल्लेख है "कृपया उपरोक्त चेतावनियों को पहले सही करें।"

केवल उस बिंदु पर पहुंचने के लिए जहां निर्माण प्रोजेगार्ड के माध्यम से मिलेगा, मुझे -dontwarn पैकेजों के लिए प्रविष्टियां जोड़नी थीं, जो मेरी proguard-project.txt फ़ाइल के बारे में शिकायत कर रही थीं। की तर्ज पर कुछ:

-dontwarn org.apache.lang.** 

... आदि

तो सीधे शब्दों में ... के रूप में स्टैकट्रेस तुम क्या करने का निर्देश है। चेतावनियों को ठीक करें! :)

बीटीडब्ल्यू, मैं क्षमा चाहता हूं, क्योंकि अब मैं मानता हूं कि मूल पोस्ट में स्टैकट्रैक उतना ही नहीं है जितना मैंने सामना किया था। हालांकि, मुझे लगता है कि मेरा जवाब सहायक है, क्योंकि जाहिर है कि मैं यहां अपने मुद्दे के उत्तर खोजने की कोशिश कर रहा हूं।

+2

हां, मेरे लिए एक ही सटीक बात है ... यह समाधान होना चाहिए, उपर्युक्त नहीं। ये आपके proguard-project.txt फ़ाइल में जा सकते हैं और बस इसे अपने रिलीज सेक्शन में जोड़ सकते हैं। मेरा दिखता है: -dontwarn android.webkit। * -dontwarn org.apache। ** -dontwarn com.newrelic। ** – occasl

+2

अच्छा। :) बहुत बहुत धन्यवाद! मैंने "सैमसंग पास एसडीके" लागू किया था, इसलिए मुझे com.samsung को जोड़ना था। ** बस अगर कोई और वहां संघर्ष कर रहा है तो .. –

2

हममम, मैं क्यों समझ में नहीं करते हैं लेकिन ऐसा लगता है कि अगर मैं एक ही मानकों के साथ दो बार एक ही काम शुरू (ProGuard ...) दूसरा एक अच्छा एक है।

लेकिन अगर दूसरा एक पैरामीटर बदल, कार्य असफल।

उम्मीद है कि यह किसी की मदद करेगा।

सादर

-10

जांचें कि minifyEnabled बिल्ड ग्रेडल में "झूठी" पर सेट है। क्योंकि हस्ताक्षरित एपीके उत्पन्न करते समय यह "सत्य" डीबगर होगा जब एक त्रुटि होगी।

+1

हस्ताक्षर किए गए एपीके डिबगिंग के लिए कोई समस्या नहीं है। लेकिन अगर आप 'MinifyEnabled 'को छोटा नहीं करते हैं तो आपको तुरंत' multiDexEnabled' की आवश्यकता होती है - जो प्रोगुआर्ड के बाद भी एक बड़ा दर्द है। – Martin

+0

मल्टीडेक्स प्रोजेवार्ड की तुलना में कम प्रयास कर सकता है (केवल कुछ बदलावों की आवश्यकता होती है) जब कोई rxjava और retrolambda और kotlin और अन्य निर्भरताओं का उपयोग कर रहा है ... बस इसे बाहर निकालें। कहा जा रहा है, हम दोनों का उपयोग करें। यदि आप ऐप सुरक्षा के बारे में बिल्कुल परवाह करते हैं और प्रदर्शन कारणों से लॉग स्टेटमेंट को पट्टी करना चाहते हैं तो प्रमोर्ड रिलीज बिल्ड के लिए महत्वपूर्ण है। मैंने प्रोग्यूर्ड मुद्दों का पीछा करते हुए सप्ताहांत खर्च किए हैं, जबकि मल्टीडेक्स पर स्विच करना सचमुच 10 मिनट का प्रयास था। – ChrisPrime