Guardsquare/proguard
GitHub: Guardsquare/proguard
ProGuard 是一款免费的 Java 字节码压缩器、优化器、混淆器和预校验器,帮助开发者减小应用体积并提升运行效率。
Stars: 3591 | Forks: 482
快速开始 •
功能 •
贡献 •
许可证
ProGuard 是一款用于 Java 字节码的免费压缩器、优化器、混淆器和预校验器:
* 它会检测并移除未使用的类、字段、方法和属性。
* 它会优化字节码并移除未使用的指令。
* 它会将剩余的类、字段和方法重命名为简短且无意义的名称。
由此生成的应用程序和库将变得更小、运行更快。
## ❓ 获取帮助
请使用
**问题追踪器** 来报告实际的 **bug 🐛、崩溃** 等问题。
## 🚀 快速开始
### 命令行
首先,从 [GitHub releases](https://github.com/Guardsquare/proguard/releases) 下载最新版本。
要在 Linux/MacOS 上运行 ProGuard,只需输入:
```
bin/proguard.sh
```
或者在 Windows 上:
```
bin\proguard.bat
```
通常,您会将大部分选项放在配置文件中(例如 `myconfig.pro`),然后只需调用:
```
bin/proguard.sh @myconfig.pro
```
或者在 Windows 上:
```
bin\proguard.bat @myconfig.pro
```
所有可用选项都在[手册的配置部分](https://www.guardsquare.com/manual/configuration/usage)中进行了说明。
### Gradle Task
ProGuard 可以作为 Gradle 中的 Task 运行。在使用 proguard task 之前,您必须确保 Gradle 在构建时能在其 class path 中找到它。一种方法是将以下行添加到您的 **`build.gradle`** 文件中,这将从 Maven Central 下载 ProGuard:
```
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.guardsquare:proguard-gradle:7.9.1'
}
}
```
然后,您可以定义一个包含配置的 Task:
```
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 设置页面](https://www.guardsquare.com/manual/setup/gradle) 上找到更多详细信息。
## ✨ 功能
ProGuard 的工作方式类似于高级优化编译器,它可以移除未使用的类、字段、方法和属性,缩短标识符,合并类,内联方法,传播常量,移除未使用的参数等。
* 优化通常能将应用程序的大小减少 20% 到 90%。减少的幅度主要取决于 ProGuard 可以全部或部分移除的外部库的大小。
* 优化还可能将应用程序的性能提高多达 20%。对于服务器和桌面上的 Java 虚拟机来说,这种差异通常不太明显。
* ProGuard 还可以移除应用程序及其库中的日志记录代码,而无需更改源代码 — 实际上,甚至完全不需要源代码!
手册页面([markdown](docs/md), [html](https://www.guardsquare.com/proguard/manual))详细介绍了 ProGuard 的功能和使用方法。
## 💻 构建 ProGuard
构建 ProGuard 很简单 - 您只需要安装 Java 8 JDK。
要从源码构建,请克隆一份 ProGuard 仓库并运行以下命令:
```
./gradlew assemble
```
构建产物将生成在 `lib` 目录中。然后,您可以使用 `bin` 中的脚本执行 ProGuard,例如:
```
bin/proguard.sh
```
您可以使用以下命令将构建产物发布到本地的 Maven 仓库:
```
./gradlew publishToMavenLocal
```
## 🤝 贡献
欢迎在这两个项目中提出贡献、问题和功能请求。
如果您想做出贡献,请随时查看 [issues](https://github.com/Guardsquare/proguard/issues) 页面和 [贡献指南](CONTRIBUTING.md)。
## 📝 许可证
Copyright (c) 2002-2025 [Guardsquare NV](https://www.guardsquare.com/).
ProGuard 基于 [GNU General Public License, version 2](LICENSE) 发布,并[授予了多个项目例外情况](docs/md/manual/license/gplexception.md)。标签:JS文件枚举, SOC Prime, 代码压缩, 代码混淆, 后台面板检测, 域名枚举, 字节码优化, 开发工具