Proguard用于混淆java代 码,使代码变为由难懂的,无规律的字符命名的各种方法和类,保护自己的劳动成果。个人认为proguard混淆纯java项目比较理想,比如j2me的 MIDLET,如果项目是web项 目,特别是使用Struts+Spring+Hibernate架构的,由于牵涉到很多需要反射的类,所有不适合把整个项目进行混淆。

可以从这里下载到最新的Proguard源代码和API文档。下载的lib文件夹内包含3个jar包,

proguard.jar是proguard的主程序,proguardgui.jar为图形界面,用这个可以很方便的生成proguard的配置文件,Retrace为反追踪。

Proguard的具体功能和效果就不多 说,网上有很多介绍,主要说下图形界面的各项操作,通过图形界面生成Proguard混淆前的配置文件。

java -jar proguardgui.jar [-nosplash][configuration_file]

-nosplash参数:运行ProGuard时不显示开头动画。

configuration_file: ProGuard运行时加载的配置文件(如果你已经有一个通用的Proguard的配置文件,在这里调用,再针对项目做些修改)。

Input/Output标签:

这里选择需要混淆的代码目录和输出混淆后代码的目录以及项目所有需要的lib包。需混淆的代码可以已jar、war、ear、zip等格式打包,或者直接指定代码目录(此时注意要指定到代码的最上成package所在目录)。

“Add Input”添加需要混淆的代码。

“Add Output”指定输出路径和格式

“Edit”编辑设定

“Filter”过滤不需要的文件和包

“Remove”删除不需要的文件和包

“Move Up”“Move Down”将设定移动显示位置

“Move to libraries”移动到项目所需要的lib中

“Move to program”移动到项目中

下部的“Add”为添加项目所需要的lib包,如果是web项目把j2ee包也添加到lib中。

Shrinking、Optimization标签:

Proguard可以压缩和优化代码,将一些无用 类、字段和方法删除和优化代码。这里就不多说,

主要解释下Obfuscation标签。

“obfuscate”选上混淆机制才可用。

“Print mapping”输出映射文件,混淆前后的类名、方法名,属性名的对照。

“Apply mapping”应用映射文件,可以指定混淆后的类名、方法名,属性名。

“Obfuscation dictionary”混淆字典,指定混淆使用的字符。

“Overlord aggressively”优先重载

“Use unique class member names”使用唯一的类成员名称

“Default package”默认包名

“Use mixed-case class names”使用混合的类名,这样不同的类混淆后将使用同一类名。

“Keep attributes”指定需要保留属性的资源文件

“Rename SourceFile attribute”重命名资源文件属性

“Keep names”保留的名称

“Native method names”本地方法名称

“.class method names”指定需要保存方法名称的类

“Keep additional class names and class member names”保留(不需要混淆)的类名和成员名

点击“Add”或“Edit”编辑需要保留的类

Comments文本域可以对当前条目加上可选的注释。这个注释将标识列表中的这个条目并作为注释出现在配置文件中

“Keep classes and class members”保留类名和成员名

“Keep class members only”只保留成员名

“Keep classes and class members, if members are present”

“Access”访问修饰符,指定需要保留类的修饰符

“Class”指定类名,可以用“*”通配符进行指定比如“*Number*”

“Extends/implements class”继承和实现的类,此处需要指定类的完整路径,包括包名。

“Class members”要保留的成员

“Add field”添加需要保留的属性,通过指定修饰符,类型和名称来配置。

“Add method”添 加需要保留的属方法,通过指定修饰符,返回类型和名称来配置

Information(参数信息)标签:

“Consistency and correctness”连贯性和正确性

“Print seeds”打印日志

“verbose”详细信息

“Warn about missing libraries”缺少类库时发出警告

“Ignore warnings about missing libraries”忽略缺少类库的警告,有时缺少某些类库也可以混淆,Proguard提倡先消除所有的警告,然后混淆。

“Skip non-public library classes”跳过所有非公有类,加快加载lib速度。

“Skip non-public library class members”跳过所有非共有方法,加快解析lib速度

“Why are u keeping”

Process标签:

“View configuration”查看配置

“Save configuration”保存配置

Retrace(反追踪)标签

简单说下keep参数,这个是设定要保留不参与混淆的类和成员。

keepclass_specification保留指定的类和成员名称和内容

keepclassmembersclass_specification只保留指定的类成员名称和内容

keepclasseswithmembersclass_specification

keepnamesclass_specification保留类和成员名称,混淆内容

keepclassmembernamesclass_specification只保留成员名称,混淆内容

keepclasseswithmembernames class_specification

在使用过程中,我比较 喜欢建立几个抽象类,Keep,KeepClassMembers

KeepClassesWithMembersKeepNamesKeepClassMemberNames

KeepClassesWithMemberNames,把需要混淆的核心代码单独打包,需要保留特定属性的类分别继承各个方法,这样设定混淆配置时就比较容易。

 
 
 

proguard使用的更多相关文章

  1. android studio/Intellij idea之proguard实践

    默认情况下,build->Gene Signed APK 反编译后发现,没有混淆... 多次爬stackoverflow才搞定这个问题: 首先 build variants这里由debug设置为 ...

  2. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  3. Android proguard 详解

    本文转载于:http://blog.csdn.net/banketree/article/details/41928175 简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往 ...

  4. ProGuard代码混淆技术详解

    前言     受<APP研发录>启发,里面讲到一名Android程序员,在工作一段时间后,会感觉到迷茫,想进阶的话接下去是看Android系统源码呢,还是每天继续做应用,毕竟每天都是画UI ...

  5. [Android]proguard重新编译和如何不混淆第三方jar包

    转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...

  6. android ProGuard 代码混淆实现

    1 修改project.properties,添加ProGuard配置项 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt: ...

  7. 使用Proguard做Java代码混淆

    下载Proguard, 我下的是最新的Proguad5.2 在windows下运行bin/proguardgui.bat, 可以看见图形界面, 载入配置, 然后process. 配置文件例子 -inj ...

  8. Android之Proguard语法

    -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_pat ...

  9. 使用proguard混淆java web项目代码

    1.首先下载proGuard.zip到本地: proguard4.5beta4.tar.zip解压开,2.新建文本文档,修改文件名为XXX.pro,然后复制下面内容到.pro -injars 'Y:\ ...

  10. How To Use Proguard in Android APP

    在Android开发完成即将发布给用户使用时,还有最后重要的一步:代码混淆,这时候,Proguard就派上用场了,大家谁也不想辛辛苦苦写的代码太容易被别人反编译过来,而Proguard就是帮我们实现这 ...

随机推荐

  1. 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build955 编译日期:2015-12-14 ====================================== 二. ...

  2. PAT (Advanced Level) Practise 1003 Emergency(SPFA+DFS)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  3. Java学习资源

    Java技术路线图 指路明灯 一位资深程序员大牛给予Java初学者的学习路线建议 Java源码阅读的真实体会 概要 JDK发展历程 Java项目经验 基于java平台的常用资源 官方文档 Java™ ...

  4. mongodb 手动分片的命令汇总

    手动分片的操作 自动分片会带来性能的下降. 所以要合理使用手动分片. 并且配合Tag一起使用. # 对于4个shard的程序, 预先处理的指令1. 加入分片服务器sh.addShard( " ...

  5. BNF 巴科斯范式

    BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...

  6. Note: RewriteCond规则

    如果文件存在,就直接访问文件,不进行下面的RewriteRule:RewriteCond %{REQUEST_FILENAME} !-f 如果目录存在,就直接访问目录,不进行下面的RewriteRul ...

  7. Yii源码阅读笔记(一)

    今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...

  8. bower 基本应用

    1.安装 npm install -g bower 2.指定下载目录: 在根目录建立文件  .bowerrc { "directory": "vendor/bower_d ...

  9. 运行EFDC出现这样的错误:forrt1:severe<157>:Program Exception-access violation

    经过检查是由于TQSER出现读写错误,原来我的数据输入文件的时间是427天,后来延长到639,但其中有一个点的时间仍然维持在427.故此出现这个错误.EFDC是用Fortran编译的,通过debug才 ...

  10. nginx配置相关

    一.autoindex on; 能解决无端端的403问题. 二.NGINX配置超时时间 1.啥时候用到 用来设置请求资源和服务器返回的时间,保证一个请求占用固定时间,超出后报504超时!这样可以保证一 ...