当前位置: 首页>>软件下载 >编程开发 >JAVA相关 > proguard

proguard

360浏览器无法下载资源的解决办法?

点此纠错

情介绍

proguard是一个java代码混淆工具,并提供了图形化用户界面,它也可以结合Ant或J2ME Wireless Toolkit使用。通过ProGuard得到的更精简的jar文件意味着只需要更小的存储空间混淆环节会用无意义的短变量去重命名类、变量、方法。这些步骤让代码更精简,更高效,也更难被逆向破解。

proguard功能介绍

  压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。

  优化(Optimize):对字节码进行优化,移除无用的指令。

  混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。

  预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

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步的图,把缺少的支持包加进来就可以了。

proguard注意事项

  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先生成,然后再根据需求手动修改。

proguard常见问题

  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 %&times;替换为:

  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")

需要授予该应用的权限

	  

获取任务信息

允许程序获取当前或最近运行的应用

修改声音设置 修改声音设置信息

连续广播

允许一个程序收到广播后快速收到下一个广播

连续广播

允许一个程序收到广播后快速收到下一个广播

读写系统设置

允许读写系统设置项

唤醒锁定

允许程序在手机屏幕关闭后后台进程仍然运行

访问网络

访问网络连接,可能产生GPRS流量

读取电话状态

访问电话状态

获取WiFi状态

获取当前WiFi接入的状态以及WLAN热点的信息

获取网络状态

获取网络信息状态,如当前的网络连接是否有效

访问外部存储

访问外部存储的权限

写入外部存储

允许程序写入外部存储,如SD卡上写文件

挂载文件系统 挂载、反挂载外部文件系统

录音 录制声音通过手机或耳机的麦克

使用振动 允许振动

改变WiFi状态 改变WiFi状态

改变WiFi多播状态 改变WiFi多播状态

结束系统任务 结束任务通过restartPackage(String)方法,该方式将在外来放弃

显示系统窗口 显示系统窗口

禁用键盘锁 允许程序禁用键盘锁

获取精确位置 通过GPS芯片接收卫星的定位信息,定位精度达10米以内

获取粗略位置 通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米

访问定位额外命令 允许程序访问额外的定位提供者指令

使用蓝牙 允许程序连接配对过的蓝牙设备

蓝牙管理 允许程序进行发现和配对新的蓝牙设备

状态栏控制 允许程序扩展或收缩状态栏

读取系统日志 读取系统底层日志

改变网络状态 改变网络状态如是否能联网

排序系统任务 重新排序系统Z轴运行中的任务

拍照权限 允许访问摄像头进行拍照

读取日程提醒 允许程序读取用户的日程信息

写入日程提醒 写入日程,但不可读取

使用闪光灯 允许访问闪光灯

允许NFC通讯 允许程序执行NFC近距离通讯操作,用于移动支持