背景:最近项目中需要将jar包提供给第三方去用,担心代码被反编译偷取源码,所以需要对现在代码进行混淆。
原理:使用Proguard对代码进行混淆。
其实Proguard混淆代码的原理很简单,java代码在编译后会生成许多.class文件,这些.class文件可以被反编译(常用gui反编译等),编译后原本的代码就能看到。Proguard就是在打包时,吧class文件中方法,字段,包,类等等这些java元素的名称变得无意义,比如一个类为 com.highgo.mysql.mysqltest.MysqlTestinfo001,它就会吧这个混淆为 com.highgo.a.d.c这样的形势。这样代码的结构其实没有变化,且可以运行,但是想弄懂就很难。
下面这些情况下不能改变元素名称的否则就会报错:
一, 我们用到反射的地方。
二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
三, 是我们的java 元素名称是在配置文件中配置好的。
所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。
使用:
ProGuard有包括一下四种功能:
l 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
l 优化(Optimize):对字节码进行优化,移除无用的指令。
l 混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
l 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。
ProGuar由shrink、optimize、obfuscate和preveirfy四个步骤组成,每个步骤都是可选的,我们可以通过配置脚本来决定执行其中的哪几个步骤。
我主要使用的是maven中使用插件,搭配proguard.conf文件来使用
Maven项目集成模式的使用方式,通过引入proguard.cfg配置文件到项目中,直接在pom文件中配置proguard插件,可以更加快速便捷的实现我们的需求。
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.guardsquare</groupId>
<artifactId>proguard-base</artifactId>
<version>7.4.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.guardsquare</groupId>
<artifactId>proguard-core</artifactId>
<version>9.1.1</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<proguardInclude>../proguard.conf</proguardInclude>
<addMavenDescriptor>false</addMavenDescriptor>
<injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
<outjar>${project.build.finalName}-jar-with-dependencies-test.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<libs>
<lib>C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar</lib>
</libs>
</configuration>
</plugin>
注意需要在引入的插件中,指定proguard.cfg配置文件所在位置
接下来就是配置proguard.cfg文件来实现混淆。
标签:混淆,插件,代码,jar,Proguard,proguard From: https://www.cnblogs.com/zhangyuwuhu/p/18128269