在 Gradle 内使用 ProGuard 收缩纯 Java 库

Shrink plain Java library with ProGuard within Gradle

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

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

如何压缩库 jar before Gradle 接受它并进一步传递,作为依赖项或 Bintray?

假设有一个 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()
}

就是这样!