如何使用 Gradle 配置 Proguard?
Posted
技术标签:
【中文标题】如何使用 Gradle 配置 Proguard?【英文标题】:How to configure Proguard using Gradle? 【发布时间】:2014-03-07 12:01:34 【问题描述】:我最近切换到 android Studio / Gradle,我想知道如何在 build.gradle 脚本中配置 ProGuard。我是 Gradle 的新手,但我认为配置 Proguard 任务是个好主意(如 Proguard 项目文档中所述。
我想配置 Proguard 以使用 'printmapping' 设置将映射保存在不同的文件中以用于不同的产品风格
task myProguardTask(type: proguard.gradle.ProGuardTask)
printmapping file("test.txt")
但它在任务执行时崩溃
Gradle: Execution failed for task ':module:proguardFlavorVariant'.
> proguard.ConfigurationParser.<init>(Ljava/io/File;Ljava/util/Properties;)V
在较新版本的 Gradle 'android'-plugin 中,似乎包含了 Proguard,我认为这可能是为什么按照 Proguard 文档中所述配置 Proguard 任务不起作用的原因。但我没有找到关于如何使用较新的 android-gradle-plugin 执行此操作的任何文档。
感谢您的帮助!
【问题讨论】:
确保您的 proguard 配置文件正确写入,因为它显示解析错误,通常在您的 proguard 文件出现问题时出现。 感谢您的建议,但我的 proguard 文件应该没问题,因为如果我在 gradle 脚本中没有 proguard 自定义的情况下执行 gradle 构建(包括 proguard 任务),它就可以工作。 为什么不使用runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt')
在不同风味的风味配置中。
这是我现在正在使用的 ;-) 但我只是想知道是否有可能在 gradle 中配置它而不必创建 x 多个文件来维护。
好的,您能否将整个 build.gradle 文件包含在内,因为我认为您必须使用一些存储库或依赖类路径才能包含 proguard 任务,不确定。
【参考方案1】:
Proguard 内置于 Android-Gradle 插件中,您无需将其配置为单独的任务。文档位于:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard
您的口味是否如此不同以至于您真的想要为它们提供不同的 ProGuard 配置?我认为在大多数情况下,您可以拥有一个可以涵盖所有这些的配置。
编辑:
如果您确实想针对不同的风格更改 ProGuard 规则,Android Gradle DSL 允许您这样做。文档中的示例显示了如何执行此操作:
android
buildTypes
release
// in later versions of the Gradle plugin runProguard -> minifyEnabled
minifyEnabled true
proguardFile getDefaultProguardFile('proguard-android.txt')
productFlavors
flavor1
flavor2
proguardFile 'some-other-rules.txt'
这应该可以处理您的用例,除非您正在寻找一种方法让它根据风味名称自动确定 proguardFile 值,而无需手动设置它;你可以通过一些自定义的 Groovy 脚本来做到这一点。
【讨论】:
是的,我不需要在单独的任务中配置它 - 但我可以这样做吗? ;-)。我想使用不同的 proguard 配置来根据其风味名称命名 mapping.txt,这样我就不会错过哪个映射属于特定构建。我承认,这没什么大不了的,也没什么大不了的,但我只是想知道这是否可能。 您不需要单独的 ProGuard 任务来拥有每个风格的映射文件;我更新了我的答案。 我现在最终实施的。配置 proguard(尽管只是链接到配置 proguard 的外部文件)现在似乎是不可能的,至少文档没有说明它。 runProguard 更改为 minifyEnabled,see here。 除了“proguard-android.txt”之外,Android SDK 还为您提供了一个文件“proguard-android-optimize.txt”,它已经设置了一些规则来优化您的代码字节水平,并可能有助于缩小您的应用程序大小。见:developer.android.com/tools/help/proguard.html#enabling-gradle以上是关于如何使用 Gradle 配置 Proguard?的主要内容,如果未能解决你的问题,请参考以下文章
将系统属性与 proguard 配置文件一起传递给 gradle proguardFile 属性
如何使用 spring-boot gradle 插件进行 proguard
AndroidStudio 2.2 构建 gradle 错误(自定义 proguard 文件的路径)