首页 > 解决方案 > 在 Gradle 中使用 ProGuard 收缩普通 Java 库

问题描述

我使用 Gradle,我想用 ProGuard 缩小一个库。这看起来很简单:只需将 ProGuard 添加到 buildscript 的类路径并创建 ProGuard 任务(示例)。

然后我会得到一个新的 jar,但是如果我compile project(':library')在另一个模块中编写或执行:library:bintrayUpload任务,旧的 jar 仍然会被使用。

如何在Gradle 将其作为依赖项或传递给 Bintray之前缩小库 jar?

标签: javagradleproguard

解决方案


假设有proguard任务。

def libraryJar = rootProject.file(
        "${project.name}/build/libs/${project.name}-${project.version}.jar")
def shrinkedJar = rootProject.file(
        "${project.name}/build/libs/${project.name}-${project.version}-shrinked.jar")

jar.finalizedBy proguard
proguard.doLast {
    if (!libraryJar.delete()) throw new IllegalStateException()
    if (!shrinkedJar.renameTo(libraryJar)) throw new IllegalStateException()
}

而已!


推荐阅读