快速入门•功能•贡献•许可证
ProGuard 是一个免费的 Java 字节码收缩器、优化器、混淆器和预验证器:
它检测并删除未使用的类、字段、方法和属性。
它优化字节码并删除未使用的指令。
它使用简短的无意义名称重命名其余的类、字段和方法。
由此产生的应用程序和库更小、更快。
请使用问题跟踪器报告实际的错误、崩溃等。
首先,从 GitHub 版本下载最新版本。
要在 Linux/MacOS 上运行 ProGuard,只需键入:
bin/proguard.sh < options... >
或在 Windows 上:
binproguard.bat <options...>
通常,您会将大多数选项放在配置文件中(例如myconfig.pro
),然后调用
bin/proguard.sh @myconfig.pro
或在 Windows 上:
binproguard.bat @myconfig.pro
所有可用选项均在手册的配置部分中进行了描述。
ProGuard 可以作为 Gradle 中的任务运行。在使用 proguard 任务之前,您必须确保 Gradle 可以在构建时在其类路径中找到它。一种方法是将以下行添加到build.gradle
文件中,该文件将从 Maven Central 下载 ProGuard:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ' com.guardsquare:proguard-gradle:7.6.1 '
}
}
然后您可以使用配置定义任务:
tasks . register( ' proguard ' , ProGuardTask ) {
configuration file( ' proguard.pro ' )
injars(tasks . named( ' jar ' , Jar ) . flatMap { it . archiveFile })
// Automatically handle the Java version of this build.
if ( System . getProperty( ' java.version ' ) . startsWith( ' 1. ' )) {
// Before Java 9, the runtime classes were packaged in a single jar file.
libraryjars " ${ System.getProperty('java.home') } /lib/rt.jar "
} else {
// As of Java 9, the runtime classes are packaged in modular jmod files.
libraryjars " ${ System.getProperty('java.home') } /jmods/java.base.jmod " , jarfilter : ' !**.jar ' , filter : ' !module-info.class '
// libraryjars "${System.getProperty('java.home')}/jmods/....."
}
verbose
outjars(layout . buildDirectory . file( " libs/ ${ baseCoordinates } -minified.jar " ))
}
嵌入式配置非常类似于标准 ProGuard 配置。您可以在 Gradle 设置页面上找到更多详细信息。
ProGuard 的工作原理类似于高级优化编译器,删除未使用的类、字段、方法和属性、缩短标识符、合并类、内联方法、传播常量、删除未使用的参数等。
优化通常可以将应用程序的大小减少 20% 到 90%。减少量主要取决于 ProGuard 可以全部或部分删除的外部库的大小。
这些优化还可以将应用程序的性能提高高达 20%。对于服务器和桌面上的 Java 虚拟机,差异通常并不明显。
ProGuard 还可以从应用程序及其库中删除日志记录代码,而无需更改源代码 - 事实上,根本不需要源代码!
手册页(markdown、html)详细介绍了 ProGuard 的功能和用法。
构建 ProGuard 很简单 - 您只需要安装 Java 8 JDK。要从源代码构建,请克隆 ProGuard 存储库的副本并运行以下命令:
./gradlew assemble
工件将在lib
目录中生成。然后,您可以使用bin
中的脚本执行 ProGuard,例如:
bin/proguard.sh
您可以使用以下方法将工件发布到本地 Maven 存储库:
./gradlew publishToMavenLocal
这两个项目都欢迎贡献、问题和功能请求。如果您想贡献,请随时查看问题页面和贡献指南。
版权所有 (c) 2002-2023 Guardsquare NV。 ProGuard 是根据 GNU 通用公共许可证版本 2 发布的,但许多项目有例外。