4

我試圖在構建時使用shrinkResources及其失敗。當我沒有shrinkResources時,我看不到任何問題。我有以下配置:Android:shrinkResources未能生成

minifyEnabled true 
shrinkResources true 

gradle這個版本

classpath 'com.android.tools.build:gradle:2.3.3' 
classpath 'net.sf.proguard:proguard-gradle:5.3.3' 

and 

distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip 

我也看到很多人在這裏面臨着同樣的問題,與像一些推薦的解決方案:爲了使用shrinkResources真實的,這我米已經在做了

  • 打開minifyEnabled如此。
  • 一些建議通過shrinkResources關閉縮小資源爲了構建應用程序,但我需要使用shrinkResources,因此它不適用於我。
  • 有一些建議/建議,gradle插件有/有bug,我應該使用插件版本< 2.2,我不能在這個時間點。

非常感謝社區的人幫助我。

下面是我在gradle這個控制檯中號看到日誌:

:app:transformClassesWithShrinkResForJenkinsRelease 
[Fatal Error] :1:1: Content is not allowed in prolog. 

Failed to shrink resources: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.; ignoring 
Failed to shrink resources: ignoring 
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) 
    at com.android.utils.XmlUtils.parseDocument(XmlUtils.java:493) 
    at com.android.utils.XmlUtils.parseDocument(XmlUtils.java:474) 
    at com.android.build.gradle.tasks.ResourceUsageAnalyzer.recordResources(ResourceUsageAnalyzer.java:1177) 
    at com.android.build.gradle.tasks.ResourceUsageAnalyzer.recordResources(ResourceUsageAnalyzer.java:1160) 
    at com.android.build.gradle.tasks.ResourceUsageAnalyzer.analyze(ResourceUsageAnalyzer.java:276) 
    at com.android.build.gradle.internal.transforms.ShrinkResourcesTransform.transform(ShrinkResourcesTransform.java:209) 
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:185) 
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:181) 
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) 
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:176) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163) 
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134) 
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.execute(ExecuteActionsTaskExecuter.java:115) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.execute(ExecuteActionsTaskExecuter.java:109) 
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169) 
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) 
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:109) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:90) 
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:68) 
    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:88) 
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46) 
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51) 
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228) 
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169) 
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106) 
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228) 
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215) 
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77) 
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58) 
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
:app:mergeJenkinsReleaseJniLibFolders 
:app:transformNativeLibsWithMergeJniLibsForJenkinsRelease 
:app:validateSigningJenkinsRelease 
:app:packageJenkinsRelease FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
A problem was found with the configuration of task ':app:packageJenkinsRelease'. 
> File '/Users/rbc/Documents/GitLab/MyAPPName/app/build/intermediates/res/resources-jenkins-release-stripped.ap_' specified for property 'resourceFile' does not exist. 



除此之外,如果有人認爲他們需要額外的信息來了解我的情況,請隨時讓我知道,我會在問題部分儘可能多地發佈信息。

回答

0

對我來說它工作正常。我使用

proguard-rules.pro我有

############### 
# I use proguard only to remove unused stuff and to keep the app small. 
# I donot want to obfuscate (rename packages, classes, methods, ...) since this is open source 
-dontobfuscate 
-dontoptimize 
-keepnames class ** { *; } 
-keepnames interface ** { *; } 
-keepnames enum ** { *; } 

我認爲我有問題之前,我加入-dontoptimize

+0

感謝@ K3B的響應,我gradle這個確實含有-dontoptimize,但不幸的是它失敗了。 –