Início rápido • Recursos • Contribuição • Licença
ProGuard é um redutor, otimizador, ofuscador e pré-verificador gratuito para bytecode Java:
Ele detecta e remove classes, campos, métodos e atributos não utilizados.
Otimiza bytecode e remove instruções não utilizadas.
Ele renomeia as classes, campos e métodos restantes usando nomes curtos e sem sentido.
Os aplicativos e bibliotecas resultantes são menores e mais rápidos.
Use o rastreador de problemas para relatar bugs reais, falhas , etc.
Primeiro, baixe a versão mais recente das versões do GitHub.
Para executar o ProGuard, no Linux/MacOS, basta digitar:
bin/proguard.sh < options... >
ou no Windows:
binproguard.bat <options...>
Normalmente, você colocará a maioria das opções em um arquivo de configuração (digamos, myconfig.pro
) e apenas chamará
bin/proguard.sh @myconfig.pro
ou no Windows:
binproguard.bat @myconfig.pro
Todas as opções disponíveis estão descritas na seção de configuração do manual.
O ProGuard pode ser executado como uma tarefa no Gradle. Antes de poder usar a tarefa proguard, você precisa ter certeza de que Gradle pode encontrá-la em seu caminho de classe no momento da construção. Uma maneira é adicionar a seguinte linha ao seu arquivo build.gradle
que fará o download do ProGuard do Maven Central:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ' com.guardsquare:proguard-gradle:7.6.1 '
}
}
Você pode então definir uma tarefa com configuração:
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 " ))
}
A configuração incorporada é muito parecida com uma configuração padrão do ProGuard. Você pode encontrar mais detalhes na página de configuração do Gradle.
O ProGuard funciona como um compilador de otimização avançado, removendo classes, campos, métodos e atributos não utilizados, encurtando identificadores, mesclando classes, inlining métodos, propagando constantes, removendo parâmetros não utilizados, etc.
As otimizações normalmente reduzem o tamanho de um aplicativo entre 20% e 90%. A redução depende principalmente do tamanho das bibliotecas externas que o ProGuard pode remover total ou parcialmente.
As otimizações também podem melhorar o desempenho do aplicativo, em até 20%. Para máquinas virtuais Java em servidores e desktops, a diferença geralmente não é perceptível.
O ProGuard também pode remover código de registro de aplicativos e suas bibliotecas, sem a necessidade de alterar o código-fonte – na verdade, sem precisar do código-fonte!
As páginas de manual (markdown, html) cobrem detalhadamente os recursos e o uso do ProGuard.
Construir o ProGuard é fácil – você só precisa de um Java 8 JDK instalado. Para compilar a partir do código-fonte, clone uma cópia do repositório ProGuard e execute o seguinte comando:
./gradlew assemble
Os artefatos serão gerados no diretório lib
. Você pode então executar o ProGuard usando os scripts em bin
, por exemplo:
bin/proguard.sh
Você pode publicar os artefatos em seu repositório Maven local usando:
./gradlew publishToMavenLocal
Contribuições, problemas e solicitações de recursos são bem-vindos em ambos os projetos. Sinta-se à vontade para verificar a página de problemas e o guia de contribuição se desejar contribuir.
Direitos autorais (c) 2002-2023 Guardsquare NV. O ProGuard é lançado sob a Licença Pública Geral GNU, versão 2, com exceções concedidas a vários projetos.