快速入門•功能•貢獻•許可證
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 發布的,但許多專案有例外。