【我的Android進階之旅】Proguard混淆配置錯誤導致混淆的時候出現錯誤:Caused by: proguard.ParseException: Unexpected keyword
阿新 • • 發佈:2019-01-25
一、錯誤描述
剛剛完成一個新功能,然後加上了混淆配置,接著Jenkins自動化編譯的時候出錯了,錯誤描述如下所示:
Warning: Exception while processing task java.io.IOException: proguard.ParseException: Unexpected keyword 'com.xtc.watch.view.account.login.utils.stroke.bean.**' in line 142 of file '/data/jenkins/workspace/AP_GlobalLoginBindModule/watch/proguard-module.pro' :watch:transformClassesAndResourcesWithProguardForRelease FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':watch:transformClassesAndResourcesWithProguardForRelease'. > Job failed, see logs for details * Try: Run with --info or --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':watch:transformClassesAndResourcesWithProguardForRelease'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 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:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 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.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) Caused by: java.lang.RuntimeException: Job failed, see logs for details at com.android.build.gradle.internal.transforms.ProGuardTransform.transform(ProGuardTransform.java:196) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:222) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:218) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173) 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:121) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 27 more Caused by: java.io.IOException: proguard.ParseException: Unexpected keyword 'com.xtc.watch.view.account.login.utils.stroke.bean.**' in line 142 of file '/data/jenkins/workspace/AP_GlobalLoginBindModule/watch/proguard-module.pro' at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:259) at com.android.build.gradle.internal.transforms.ProGuardTransform.access$000(ProGuardTransform.java:63) at com.android.build.gradle.internal.transforms.ProGuardTransform$1.run(ProGuardTransform.java:173) at com.android.builder.tasks.Job.runTask(Job.java:47) at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41) at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:259) Caused by: proguard.ParseException: Unexpected keyword 'com.xtc.watch.view.account.login.utils.stroke.bean.**' in line 142 of file '/data/jenkins/workspace/AP_GlobalLoginBindModule/watch/proguard-module.pro' at proguard.ConfigurationParser.unknownAccessFlag(ConfigurationParser.java:1123) at proguard.ConfigurationParser.parseClassSpecificationArguments(ConfigurationParser.java:606) at proguard.ConfigurationParser.parseKeepClassSpecificationArguments(ConfigurationParser.java:535) at proguard.ConfigurationParser.parse(ConfigurationParser.java:164) at com.android.build.gradle.internal.transforms.BaseProguardAction.applyConfigurationFile(BaseProguardAction.java:146) at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:244) ... 5 more
二、解決錯誤
Caused by: proguard.ParseException: Unexpected keyword 'com.xtc.watch.view.account.login.utils.stroke.bean.**' in line 142 of file '/data/jenkins/workspace/AP_GlobalLoginBindModule/watch/proguard-module.pro' at proguard.ConfigurationParser.unknownAccessFlag(ConfigurationParser.java:1123) at proguard.ConfigurationParser.parseClassSpecificationArguments(ConfigurationParser.java:606) at proguard.ConfigurationParser.parseKeepClassSpecificationArguments(ConfigurationParser.java:535) at proguard.ConfigurationParser.parse(ConfigurationParser.java:164) at com.android.build.gradle.internal.transforms.BaseProguardAction.applyConfigurationFile(BaseProguardAction.java:146) at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:244) ... 5 more
看上面的錯誤提示是Proguard在讀取配置檔案 /data/jenkins/workspace/AP_GlobalLoginBindModule/watch/proguard-module.pro 的時候,讀取到142行的時候出現了錯誤,我們來看一看這一行到底有什麼錯誤
# 漢字筆劃排序
-keep com.xtc.watch.view.account.login.utils.stroke.bean.** {*;}
哎,寫的太快了,少寫了一個關鍵字 class,暈死。
立馬修復,將錯誤的keep改為 keep class
# 漢字筆劃排序 -keep class com.xtc.watch.view.account.login.utils.stroke.bean.** {*;}
修改完畢之後,提交程式碼,重新使用Jenkins編譯即可成功!