ProGuard是一款免费的Java类文件的压缩、优化、混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。eclipse已经把Proguard集成在一起了。
使用方法:
1.下载proguard
2.准备好你的jar包,我在这里举例叫做test.jar。
3.解压proguard,执行 bin目录下的proguardgui.bat。
4.运行如图,点击左边“input/output” 菜单
5.点击右边的“add input” 加入我们要混的jar包,test.jar
点击右边的“add output” 填入我们要输出的jar包(命名随便),这里我写 test_out.jar。
注意输出的jar包,要自己手工填写。
6.添加支持库,下边的 “Library jars,wars,ears .....” 那个框框。点击右边的“add”。
说明一下,这里最好把你的myeclipse里java project里的libraries所有Library的jar包,copy到一个目录,然后在这里加入这些jar包,myeclipse的环境支持jar包一般
7.做完以上步骤后,应该如下图4,这样就差不多了
8.点击“shrinking” ,设置成如图5。(可根据需要设置,这里只是我的配置)
9.点击“obfuscation” ,设置如图6。(可根据需要设置,这里只是我的配置)
10.点击“optimization” 设置如图7。(可根据需要设置,这里只是我的配置)
11.点击“process”,再点击“save configuration”,在弹出的对话框中,输入要保存的配置文件名称(这里我的是test.pro),最后点击“保存”。如图8
至些图形化的设置部分已经完成。
12.最后,添加要保留的类与方法。
用编辑器编辑刚才保存下来的“test.pro”,用记事本什么都可以,打开后大致应该是以下的样子
-injars test.jar
-outjars test_out.jar
-libraryjars 'C:\Program Files (x86)\Java\jdk1.6.0_10\jre\lib\rt.jar'
-libraryjars lib\ant.jar
-libraryjars lib\aopalliance-1.0.jar
-libraryjars lib\commons-dbcp-1.4.jar
-libraryjars lib\commons-fileupload-1.2.1.jar
-libraryjars lib\commons-io-1.4.jar
.....设置的支持库包,略
-dontskipnonpubliclibraryclassmembers
-dontshrink
-useuniqueclassmembernames
-keeppackagenames
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
-keepparameternames
-ignorewarnings
....我们在这里加入要保持的类和方法,写法如下,红色部分是我们加的
-keep class org.bl.soa.components.constant.* {
public <fields>;
public <methods>;
*** set*(***);
*** get*();
}
-keep class org.bl.hibernate.* {
public <fields>;
public <methods>;
*** set*(***);
*** get*();
}
.....继续加其他的要保留的类和方法,有多少写多少。我是把test.jar里的所有类都加进来。
....后面还一些自动生成的配置,不用管它们。
....略
13.写完后,保存。
重新打开progrard,执行 bin目录下的proguardgui.bat。
点击第一个选项“Proguard”,再点击“Load configuration”,选择我们刚才保存的“test.pro”进行加载。
14.开始混代码,点击右边“process”,再点击“process!”,如下图
15,在等待处理完成后,输出的“test_out.jar”,就是混过的jar包,你可以用xjad反编看下效果。
16,如果在处理过程中有问题,一般会有提示,大部分一般都是缺少关联类,如果少了相关类,在第7步的图,把缺少的支持包加进来就可以了。
使用注意:
1、注意版本,如果不是项目需要,最好使用最新稳定版本,这样出错的机会小一些,学习曲线会明显缩短。
2、最好以源码的同编译版本的jvm来启动proguardgui.jar,不要直接用默认的jvm打开。
3、注意proguaardgui启动后默认加载的libraryjar中包含的rt.jar,它的版本和你使用到的jvm版本一致。
4、使用1.4的jvm打开proguard时,注意在optimization选项卡中,不要勾中keep enumerations选项,因为勾中这个选项会导致configration文件中出现java.lang.Enum,这个类
只有在1.5的环境下才有。报错信息如下:
[proguard] Note: the configuration refers to the unknown class 'java.lang.Enum'
[proguard] Note: there were 1 references to unknown classes.
[proguard] You should check your configuration for typos.
5、嵌入ant脚本时,通常会有这么一段
<target name="proguard" depends="init">
<taskdef resource="proguard/ant/task.properties" classpath="${lib.dir}/proguard/proguard.jar" />
<proguard configuration="${src.dir}/config.pro" />
</target>
task.properties在proguard.jar中,保留,config.pro是proguard的配置文件,最好使用proguardgui.jar先生成,然后再根据需求手动修改。
常见问题:
1、conversion to dalvik format failed with error 1
网上主要有这几种解决方案:
1、编辑eclipse项目下的.classpath文件,改为
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>即可
2、下载最新版本的proguard,替换android sdk下的tools\proguard(我用的就是这个方法解决的,我的android sdk是r20,其中带的proguard是4.7的,我把它更新到4.8后就好了)
3、将tools\proguard\bin\proguard.bat文件中的call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %×替换为:
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9(我也试了这种方式,不过当时导致了另外一个错误"Expecting class path separator ';' before ... in argument number 7")






















大小: 8KB
大小: 89.5M
终端仿真器 SecureCRTv7.1.1.264 最新版
串口调试小助手1.3 免费版
WinHex 十六进制编辑器v20.2 SR-5 绿色中文注册版
小旋风ASP服务器安装版
16进制转换工具V1.0 中文绿色版
Adobe AIRV33.1.1.932 官方最新版
github离线安装包64位版V2.9.11官方最新版(github desktop)
MSDN Library Visual Studio 6.0(VC、VB、VF、VJ)中文版win32开发人员必备
版本控制软件(SourceTree)v3.4.6 官方最新版
Memory Analyzer (MAT)V1.01 免费绿色版
Delphi Distillerv1.85绿色版
IBM内存检测工具(IBM Thread and Monitor Dump Analyzer for Java)V4.3.3 绿色版
.NETv3.0 可再发行组件包
一键安装JSP环境安装版
slave4j(基于eclipse插件的java代码生成器)V1.0.0 正式版
Auto DebugProfessional 5.6.5.18 中文绿色版
Understand For C++V1.4.319英文安装版