proguard使用指南
ProGuard使用文档

ProGuard使⽤⽂档介绍是⼀个对于Java字节码的免费的压缩器,优化器,混淆器和审核器;l 它检测并删除未使⽤的类,字段,⽅法和属性。
l 它优化字节码并删除未使⽤的指令。
l 它重命名其余类、字段和⽅法使⽤短毫⽆意义的名字。
官⽅⽂档使⽤⽂档常见问题⽂档:了解通配符:指定类时,可以使⽤如下通配符class 关键字表⽰任意的类或接⼝interface 关键字只表⽰接⼝enum 关键字表⽰枚举类interface 和 enum 关键字可以加上!表⽰除...之外?匹配任意字符,不包括包分隔符匹配任意多个字符,不包括包分隔符** 匹配任意多个字符,包括包分隔符为了向后兼容,* 也可以表⽰任意的类,包括包分隔符extends 和 implements 关键字是等效的,表⽰继承或实现 A 的类,但不包括 A 本⾝@ 关键字⽤于表⽰使⽤指定注解修饰的类和类成员指定类的成员时,可以指定如下通配符<init> 匹配任意的构造器<fileds> 匹配任意的成员变量<methods> 匹配任意的⽅法匹配任意的成员变量或⽅法上述通配符不含返回类型,只有<init>有参数列表除了使⽤上述全能通配符以外,同样可以使⽤常⽤表达式,此时可以使⽤?和 * 通配符指定修饰符的类型时,可以使⽤如下通配符% 匹配基本类型?匹配任⼀字符匹配任意多个字符,不含包分隔符** 匹配任意多个字符,包含包分隔符*** 匹配任意类型(基本或⾮基本,数组或⾮数组)... 匹配任意数量、任意类型的参数? * 和 ** 不会匹配基本类型可以使⽤权限控制符帮助匹配(例如 public static)参考来源:使⽤ ProGuard GUI输⼊输出部分需要确保⽬录结构为jar⽬录结构:错误的⽬录结构:如果⽬录结构是下⾯这种类web⽬录结构,混淆器⽆法正确混淆,process会提⽰⼤量警告 … unexpectedly contains class …或者根据官⽅⽂档上的解决⽅法,将打包的jar包放⼊lib⽬录,执⾏混淆(这个没有试验)为了得到这种⽬录结构,可将项⽬由eclipse打开,仅对src/main/java项⽬下的源代码⽂件导出为jar⽂件将该jar包作为输⼊,add Input依赖库需要添加jre⽬录下的所有jar和项⽬所有的依赖项 lib⽬录下的jar包输出名字⾃定义依赖库除了jre下的jar包,其他依赖根据项⽬使⽤情况加⼊,圈起来的两个是关键jar包点击Next----------------------------------------------------------------------------------------------------------------压缩部分不勾选,表⽰不压缩Keep 输⼊框保留某些类,成员不被混淆,(不明⽩它这个为什么放在压缩部分)在配置⽂件中的形式:-keep public class cn.xxx.xxx.controller.* {<fields>;<methods>;}#我的model⽬录结构为 model/po , model/vo ,所以为 model.*.*-keep public class cn.xxx.xxx.model.*.* {<fields>;<methods>;}主启动类:-keep class cn.xxx.xxx.XXXApplication {*** main(...);}该部分功能:删除没有使⽤的的类或成员注意:保留启动类点击next------------------------------------------------------------------------------------------------------------------混淆部分该部分功能:对代码进⾏模糊处理,混淆类名、⽅法名和变量名(使⽤单字母a,b,c,d,e,f,g…)介绍⼀下勾选所代表的意思:Obfuscate :启⽤混淆功能Use unique class member name: 使⽤统⼀的类名称Keep package names:保留包名Keep attarbute:保留的属性、异常、注解等Keep paremeter name:保留⽅法参数名Keep native: 保留本地⽅法-----------------------------------------------------------------------------------------------------------------------------优化部分不勾选,表⽰不优化Allow access modification: 允许修改该部分功能:它内联并合并类和类成员,并在字节码级别优化所有⽅法。
androidproguard-rules使用规则

androidproguard-rules使用规则Android ProGuard是一种代码混淆和优化工具,用于保护Android 应用程序的代码免受反编译和代码泄漏的风险,同时还可以减小应用程序的体积,提高应用程序在运行时的性能。
ProGuard支持使用配置文件来指定混淆规则,其中最常用的是proguard-rules.pro文件。
在这个文件中,可以定义一系列的规则来告诉ProGuard如何处理代码。
下面是一些常见的ProGuard规则使用规则:`````````public *;```3. 移除无用的类和类成员:可以使用`-dontwarn`和`-dontnote`关键字来禁止打印无用类和类成员的警告和提示信息。
例如,为了移除所有无用的类和类成员,可以添加如下规则:````````````5. 是否启用优化选项:可以使用`-optimizations`关键字来启用或禁用优化选项。
例如,为了禁用优化选项,可以添加如下规则:```-optimizations !optimization1,!optimization2,...```这些只是ProGuard规则的一小部分示例,根据具体的应用程序需求,可能会有其他规则需要使用。
在编写ProGuard规则时,需要注意以下几点:-尽量保留引用库的规则:如果应用程序使用了第三方库,需要保留相关库的类和类成员,以防止由于混淆导致库无法正常工作。
- 调试期间禁用ProGuard:在开发和调试期间,应禁用ProGuard,以便能够更方便地进行调试和排除代码问题。
-测试混淆后的代码:在将应用程序发布之前,应对混淆后的代码进行全面的测试,以确保混淆不会对应用程序的功能和性能产生不良影响。
- 更新ProGuard版本:随着时间的推移,可能会发布新的ProGuard版本,其中可能包含更好的混淆和优化算法。
因此,建议及时更新ProGuard版本,以获取更好的保护和优化效果。
关于ProGuard混淆工具的使用

关于ProGuard混淆工具的使用目标:jar包B包含提供给开发者的接口,jar包C包含内部实现,B调用C中的方法。
要求B中接口类被保留,B中其他方法以及C中全部内容被混淆。
需保证混淆后的jar包可以被Android 工程正确导入并且功能实现正确。
现阶段尚不考虑使用proguard的压缩和优化功能。
因为工程结构复杂,上述两个功能有可能导致混淆后的jar包不可用。
实验步骤准备:创建一个工程ProjectC。
其中的一个类ClassC包含一个方法返回一个由构造函数获取的字符串,将ProjectC打包。
创建一个工程ProjectB,并且引入ProjectC.jar作为库。
ProjectB中的类ClassB包含一个方法,该方法通过实例化ClassC并调用该实例的方法返回一个字符串。
最后建立一个Android工程,将打包后的ProjectB作为库导入。
在该工程的MainActivity中调用ProjectB中的方法获得字符串,并将字符串显示在屏幕上。
步骤1:将Android工程所生成apk混淆(IntelliJ下):1.将ProjectB.jar 和ProjectC.jar放置在libs文件夹下并且正确引用。
2.注释掉project.properties文件中的“proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”一行。
3.生成带签名的apk并且勾选:Run ProGuard一项。
结果:发现将apk反编译后,工程中所有的类和方法已被混淆。
安装apk后功能显示正常。
步骤2:使用proguard默认配置将ProjectB混淆,并使用-libraryjars将ProjectC配置成为混淆后ProjectB_after.jar的库。
结果:发现Android工程只能使用ProjectB中被混淆后的类名及方法。
proguard 简书 idea (2)

proguard 简书 idea引言概述:Proguard是一个用于代码混淆和优化的工具,它可以帮助开发者保护代码的安全性,并减小应用的体积。
在Idea集成开发环境中,Proguard可以通过简书插件来使用,使得代码混淆和优化变得更加简单高效。
正文内容:1. Proguard的作用1.1 代码混淆1.1.1 去除无用代码1.1.2 重命名类、方法和变量1.1.3 删除调试信息1.2 代码优化1.2.1 删除未使用的类、方法和变量1.2.2 优化字节码1.2.3 合并重复的代码2. Proguard在Idea中的使用2.1 安装Proguard插件2.1.1 打开Idea的插件市场2.1.2 搜索并安装Proguard插件2.2 配置Proguard2.2.1 打开项目的Proguard配置文件2.2.2 配置需要混淆的代码和优化选项2.3 运行Proguard2.3.1 在Idea中选择运行Proguard2.3.2 等待混淆和优化完成3. Proguard的注意事项3.1 配置文件的编写3.1.1 配置要保留的类和方法3.1.2 配置要保留的资源文件3.2 混淆后的代码调试3.2.1 配置混淆映射文件3.2.2 使用映射文件还原混淆后的代码3.3 混淆带来的问题3.3.1 反射调用的问题3.3.2 第三方库的兼容性问题总结:在开发过程中,使用Proguard对代码进行混淆和优化是一个非常重要的步骤。
通过对代码进行混淆,可以有效保护代码的安全性,防止被反编译和逆向工程。
同时,代码优化可以减小应用的体积,提升应用的性能。
在Idea中使用Proguard插件,可以简化混淆和优化的过程,提高开发效率。
但是在使用Proguard时,需要注意配置文件的编写,以及混淆后可能出现的问题,如反射调用和第三方库的兼容性。
通过合理的使用Proguard,开发者可以更好地保护代码的安全性和提升应用的性能。
proguard -keep 用法 示例

proguard -keep 用法示例ProGuard是一个用于Java程序的Java字节码优化器、混淆器和预编译器。
它可以帮助开发人员将Java代码进行优化、减小代码体积和提高程序的运行效率。
在实际使用中,通过ProGuard的keep指令可以精确地控制哪些类、方法和字段需要被保留,而不被优化、混淆或移除。
这篇文章将详细介绍ProGuard keep指令的用法,并给出一些示例说明。
一、ProGuard keep指令简介ProGuard的keep指令是一种配置选项,用于告诉ProGuard保留哪些类、方法和字段。
通过keep指令,开发人员可以在代码优化过程中指示ProGuard不要对特定的代码进行优化、混淆或移除。
keep指令的语法格式如下:keep [ modifiers ] [ wildcard_specs ]其中,modifiers是可选的修饰符,可以用于限制keep指令的作用范围,如public、private、abstract等。
wildcard_specs是通配符表达式,用于指定需要保留的类、方法或字段。
二、使用通配符通配符是ProGuard keep指令中非常重要的部分,它可以指定需要保留的类、方法和字段的模式。
在通配符中,可以使用*表示任意数量的任意字符,使用表示任意数量的任意字符和分隔符。
下面是一些常用的通配符示例:1. 保留指定类:keep com.example.MyClass2. 保留指定包下的所有类:keep com.example.3. 保留指定类及其内部类:keep com.example.MyClass*4. 保留指定类及其子类:keep com.example.MyClass extends com.example.MyBaseClass5. 保留指定类的指定方法:keep class com.example.MyClass {void myMethod();}6. 保留指定类的指定返回类型和参数类型的方法:keep class com.example.MyClass {int myMethod(ng.String);}7. 保留指定类的指定字段:keep class com.example.MyClass {int myField;}8. 保留指定注解类型:keepattributes *Annotation*****************.MyAnnotationinterface*三、保留类和类成员除了使用通配符,ProGuard还提供了更精确的方式来保留指定的类和类成员。
proguard用法

proguard用法ProGuard是一个用于Java字节码的代码优化器和混淆器,可以帮助开发者在保持应用程序功能完整的同时,减少应用程序的大小,并提高应用程序的运行效率和安全性。
在本文中,我们将探讨ProGuard的用法,并提供一些相关参考内容,帮助开发者更好地使用ProGuard来优化和保护他们的Java应用程序。
ProGuard的基本用法非常简单,只需执行以下步骤即可:1. 下载并安装ProGuard:可以从ProGuard的官方网站上下载最新的ProGuard版本,并将其解压到一个本地目录中。
2. 创建一个ProGuard配置文件:可以通过手动创建一个文本文件,并命名为`proguard.cfg`,也可以使用ProGuard自带的GUI进行配置文件的生成。
配置文件是用于定义ProGuard的处理规则的,它会告诉ProGuard哪些类、方法和字段需要被保留,哪些可以被优化和混淆。
以下是一个示例配置文件的内容:```-injars input.jar-outjars output.jar-libraryjars /path/to/android.jar-dontwarn-keep public class com.example.MyClass {public static void main(ng.String[]);}-optimizationpasses 5```3. 运行ProGuard:可以使用命令行界面或脚本来运行ProGuard。
在命令行界面中,使用以下命令运行ProGuard:```java-jar/path/to/*************************```其中`/path/to/proguard.jar`是ProGuard的路径,`proguard.cfg`是上一步所创建的配置文件的路径。
在运行ProGuard之后,它会根据配置文件中的规则对应用程序进行优化和混淆,并生成一个新的Jar文件。
proguard使用指南
proguard混淆器使用指南撰写人: 陈柏屹项目ID : 001撰写日期: 2009-06-30内容内容21.下载/安装 (3)1.1.下载地址 (3)1.2.启动proguard (3)1.3.混淆器原理功能 (5)1.下载/安装1.1.下载地址/1.2.启动proguard1.解压下载的proguard4.4beta3,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图:2.把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。
3.写一个配置文件,名称自己定,举个简单配置文件例子,内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar包,后面的不在一一说明,可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件。
-injars TheFirstDesktopApplication1.jar-outjars TheFirstDesktopApplication1_out.jar-libraryjars <java.home>/lib/rt.jar-libraryjars appframework-1.0.3.jar-libraryjars swing-worker-1.1.jar-printmapping proguard.map-overloadaggressively-defaultpackage ''-allowaccessmodification-dontoptimize-keep public class *{public protected *;}-keep public class org.**-keep public class it.**4. 把配置文件保存到你建的文件夹下,如下图。
proguard 语法
proguard 語法【原创实用版】目录1.ProGuard 简介2.ProGuard 的基本语法3.ProGuard 的配置选项4.ProGuard 的应用示例正文【ProGuard 简介】ProGuard 是一个用于 Android 应用程序的代码混淆和压缩工具,可以帮助开发者保护应用程序的知识产权,防止黑客破解和逆向工程。
通过使用 ProGuard,开发者可以混淆代码和资源文件,使得应用程序在保持功能的同时变得难以理解和修改。
【ProGuard 的基本语法】ProGuard 的基本语法包括以下几个关键元素:1.配置文件:ProGuard 的配置文件采用.pro 格式,通常位于项目的res/raw 目录下。
2.规则:ProGuard 的规则用于指定混淆和压缩的范围和方式。
规则通常以"#"开头,后跟规则描述和操作。
3.指令:ProGuard 的指令用于实现具体的混淆和压缩功能。
常见的指令包括:- keep:保留指定的类或方法,使其不被混淆。
- keepclass:保留指定的类,使其不被混淆。
- keeppackage:保留指定的包,使其不被混淆。
- donotkeep:防止指定的类或方法被混淆。
- donotkeepclass:防止指定的类被混淆。
- donotkeeppackage:防止指定的包被混淆。
- obfuscate:对指定的类或方法进行混淆。
- rename:对指定的类或方法进行重命名。
- shrink:对指定的类或方法进行压缩。
【ProGuard 的配置选项】ProGuard 提供了丰富的配置选项,可以满足不同场景的需求。
以下是一些常用的配置选项:1.输出文件:指定混淆后的输出文件路径。
2.输入文件:指定混淆前的输入文件路径。
3.混淆程度:指定混淆的强度,包括轻度混淆、中度混淆和重度混淆。
4.压缩程度:指定代码压缩的强度,包括轻度压缩、中度压缩和重度压缩。
5.保留策略:指定保留指定类、方法或包的策略。
使用ProGuard对Android应用进行代码混淆
使用ProGuard对Android应用进行代码混淆代码混淆是一种常用的安全措施,可以对Android应用程序的代码进行加密和优化,以提高应用的安全性和性能。
ProGuard是一款广泛使用的代码混淆工具,它可以对Java代码进行压缩、优化和混淆,从而减小应用的包大小,提高应用的运行效率,并增加反编译的难度。
本文将介绍如何使用ProGuard对Android应用进行代码混淆的步骤和注意事项。
一、什么是代码混淆代码混淆是指通过对代码进行重命名、去除无用代码、优化代码结构等方式,使得源代码在保持功能不变的前提下,增加阅读和理解的难度,从而达到保护应用程序代码的目的。
代码混淆可以减少应用程序的被逆向工程的风险,提高应用的安全性。
二、ProGuard的安装和配置1. 下载ProGuard首先,需要从官方网站下载ProGuard的压缩包,解压后可以得到proguard.jar文件。
2. 配置ProGuard在Android Studio项目的app目录下创建一个proguard-rules.pro文件(如果已存在,则进行修改),用于配置ProGuard的规则。
在proguard-rules.pro文件中,可以通过添加一些规则来指定哪些类、方法、字段需要被保留,哪些可以被混淆、优化或删除。
例如:```-keep public class com.example.MyClass{public *;}```上述规则指定了保持com.example.MyClass类及其所有公共成员不被混淆。
三、配置Android Gradle插件为了在构建过程中自动使用ProGuard工具进行代码混淆,需要在项目的build.gradle文件中进行配置。
在android块下添加以下代码:```buildTypes{release{minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}```上述代码表示在release构建类型中开启代码混淆,并指定了默认的ProGuard文件和自定义的proguard-rules.pro文件。
proguard使用说明手册
1.准备:为了便于混淆代码,我们把所要混淆的jar包、混淆工具proguard.jar和配置文件放
在同一文件加下(当然所需库jar也可以放在同一文件加下,也可以不放,这里我们写绝对路径):示例图如下
我们把库jar包放在了如下图所示的目录下
部分jar包示例
2.进入相应的目录下
3.键入以下命令,并按enter键
4.如下图所示,提示成功
并根据配置,生成了日志文件
配置文件部分截图如下:
以上为基本操作步骤,当然你也可以用proguard的ui界面进行相应配置后,生成混淆jar 包
不做详细解释.
异常情况:
1.库jar包引用不完全--例如,我们项目用到了spring的注解,我们不引入
包,异常信息如下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
proguard混淆器使用指南
撰写人: 陈柏屹
项目ID : 001
撰写日期: 2009-06-30
内容
内容2
1.下载/安装 (3)
1.1.下载地址 (3)
1.2.启动proguard (3)
1.3.混淆器原理功能 (5)
1.下载/安装
1.1.下载地址
/
1.2.启动proguard
1.解压下载的proguard4.4beta3,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图:
2.把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。
3.写一个配置文件,名称自己定,举个简单配置文件例子,内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar
包,后面的不在一一说明,可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件。
-injars TheFirstDesktopApplication1.jar
-outjars TheFirstDesktopApplication1_out.jar
-libraryjars <java.home>/lib/rt.jar
-libraryjars appfram ework-1.0.3.jar
-libraryjars swing-worker-1.1.jar
-printmapping proguard.map
-overloadaggressively
-defaultpackage ''
-allowaccessmodification
-dontoptimize
-keep public class *
{
public protected *;
}
-keep public class org.**
-keep public class it.**
4. 把配置文件保存到你建的文件夹下,如下图。
5.点击开始,运行,输入cmd,进入你建的文件夹下,如下图。
6. 然后输入命令语句:java -jar proguard.Jar @a 然后回车,如下图。
7. 混淆成功,在产生TheFirstDesktopApplication1_out.jar如下图。
8.混淆器后,利用反编译器对没TheFirstDesktopApplication1_out.jar反编译,多了好多
a,b,c之类的类文件,对反编译的java文件是很难编译的,即说明混淆成功。
1.3.混淆器原理功能
通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。
这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。
例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。
除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。