为啥使用“minifyEnabled true”时 Proguard 不起作用?
Posted
技术标签:
【中文标题】为啥使用“minifyEnabled true”时 Proguard 不起作用?【英文标题】:Why won't Proguard work when using "minifyEnabled true"?为什么使用“minifyEnabled true”时 Proguard 不起作用? 【发布时间】:2015-10-14 15:41:10 【问题描述】:我正在尝试使用 gradle 运行 android 构建。只要我不缩小它就可以正常工作。当我启用 minify (minifyEnabled true) 时,构建总是失败,因为“无法为 proguard.gradle.ProGuardTask 生成代理类”。
WARNING [Project: :phone] Support for libraries with same package name is deprecated and will be removed in 1.0
running signingConfigs
running proguard
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':phone'.
> Could not generate a proxy class for class proguard.gradle.ProGuardTask.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
我使用 minify 的 gradle 文件部分:
buildTypes
release
println "running proguard"
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.release
debug
debuggable true
只是需要一些帮助知道去哪里找...谢谢。
完整的堆栈跟踪
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':phone'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:91)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:86)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:65)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:504)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:83)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:129)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
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:36)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
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:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
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: org.gradle.api.GradleException: Could not generate a proxy class for class proguard.gradle.ProGuardTask.
at org.gradle.api.internal.AbstractClassGenerator.generateUnderLock(AbstractClassGenerator.java:204)
at org.gradle.api.internal.AbstractClassGenerator.generate(AbstractClassGenerator.java:67)
at org.gradle.api.internal.project.taskfactory.TaskFactory.createTaskObject(TaskFactory.java:116)
at org.gradle.api.internal.project.taskfactory.TaskFactory.createTask(TaskFactory.java:81)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory.createTask(AnnotationProcessingTaskFactory.java:99)
at org.gradle.api.internal.project.taskfactory.DependencyAutoWireTaskFactory.createTask(DependencyAutoWireTaskFactory.java:39)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:52)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:83)
at com.android.build.gradle.BasePlugin.createProguardTasks(BasePlugin.groovy:2776)
at com.android.build.gradle.BasePlugin$createProguardTasks$31.callCurrent(Unknown Source)
at com.android.build.gradle.BasePlugin.createPostCompilationTasks(BasePlugin.groovy:2021)
at com.android.build.gradle.internal.variant.ApplicationVariantFactory.createTasks(ApplicationVariantFactory.java:189)
at com.android.build.gradle.internal.VariantManager.createTasksForVariantData(VariantManager.java:274)
at com.android.build.gradle.internal.VariantManager.createAndroidTasks(VariantManager.java:216)
at com.android.build.gradle.internal.VariantManager$createAndroidTasks.call(Unknown Source)
at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.groovy:463)
at com.android.build.gradle.BasePlugin$_createTasks_closure9.doCall(BasePlugin.groovy:408)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:83)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy13.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:79)
... 31 more
Caused by: java.lang.NoClassDefFoundError: proguard/ParseException
at org.gradle.api.internal.AbstractClassGenerator.inspectType(AbstractClassGenerator.java:265)
at org.gradle.api.internal.AbstractClassGenerator.inspectType(AbstractClassGenerator.java:220)
at org.gradle.api.internal.AbstractClassGenerator.generateUnderLock(AbstractClassGenerator.java:98)
... 54 more
Caused by: java.lang.ClassNotFoundException: proguard.ParseException
... 57 more
【问题讨论】:
除了擦除 Gradle 缓存之外,您可能还想验证您的 Android SDK 安装是否正确(例如 proguard.jar 有效且位置正确)。 【参考方案1】:如果您使用的是0.14.0 or higher of the gradle plugin
版本,则应在build.gradle
文件中将“runProguard”替换为“minifyEnabled”。
minifyEnabled false 表示构建类型名称不能是 main 或 androidTest(这是由插件强制执行的),并且它们必须彼此唯一。 参考Error:(26, 0) Gradle DSL method not found: 'runProguard()'
如何克服
只需删除您的 .gradle directory
并清理并重新启动您的 Studio,然后再次 Gradle。
【讨论】:
【参考方案2】:看起来像是损坏的 Gradle 安装。
你可以修复它,
1) 删除 .gradle 目录
2) 然后进行干净的构建
或者只是升级您的 Gradle 安装。
希望对你有帮助。
【讨论】:
以上是关于为啥使用“minifyEnabled true”时 Proguard 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
使用 minifyEnabled true 启动应用程序时 FirebaseInitProvider.onCreate 中的 java.lang.IncompatibleClassChangeErro
使用 minifyEnabled true 启动应用程序时 FirebaseInitProvider.onCreate 中的 java.lang.IncompatibleClassChangeErro
如何在使用 minifyenabled true 构建签名 apk 时限制应用程序崩溃,意味着应用程序?
Android - 当 minifyEnabled true 导致 java.lang.ExceptionInInitializerError 时,带有混淆 AAR 库的应用程序崩溃