ProGuard的Maven插件配置

Java代码混淆工具ProGuard是比较流行的,集成到Maven中需要使用相关插件。

通过比较,笔者认为IDFC Maven ProGuard Plug-in是较好些(也是ProGuard官方推荐)。

下面是pom的一个配置示例,这个示例是对项目中一个公共lib(有其特殊性)进行混淆,除了plugin之外的配置,还有一个.pro的配置文件(存放在${basedir}/src/main/config/${project.artifactId}-maven.pro)。

			<plugin>
				<groupId>com.idfconnect.devtools</groupId>
				<artifactId>idfc-proguard-maven-plugin</artifactId>
				<version>1.0.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>obfuscate</goal>
                        </goals>
                    </execution>
                </executions>
				<configuration>
					<inputFile>${project.build.outputDirectory}</inputFile>
		            <libraryJarPaths>
	                    	<libraryJarPath>${java.home}/lib/jce.jar</libraryJarPath>
	                </libraryJarPaths>
	                <excludeManifests>false</excludeManifests>
	                <excludeMavenDescriptor>false</excludeMavenDescriptor>
		             <outputArtifacts>
			             <outputArtifact>
				             <file>${project.build.finalName}.${project.packaging}</file>
			             </outputArtifact>
		             </outputArtifacts>
				</configuration>
                <dependencies>
                	<dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>4.11</version>
                    </dependency>
                </dependencies>
			</plugin>			
...maven.pro的内容:

-renamesourcefileattribute SourceFile

-dontskipnonpubliclibraryclassmembers

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep public class * {
    public protected *;

-dontskipnonpubliclibraryclassmembers

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep public class * {
    public protected *;
}

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclassmembers,allowoptimization enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}



Maven 项目也可以使用 ProGuard 进行代码混淆。下面是具体的操作步骤: 1. 在 pom.xml 文件添加 ProGuard 插件依赖: ```xml <build> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.14</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <obfuscate>true</obfuscate> <injar>${project.build.finalName}.jar</injar> <outjar>${project.build.finalName}-obfuscated.jar</outjar> <obfuscationDictionary>dictionary.txt</obfuscationDictionary> <proguardInclude>proguard-rules.pro</proguardInclude> </configuration> </plugin> </plugins> </build> ``` 其,groupId、artifactId、version 分别表示插件的坐标;phase 表示插件Maven 生命周期的哪个阶段执行;goals 表示插件要执行的目标;obfuscate 表示是否开启混淆;injar 表示输入的 jar 包;outjar 表示输出的混淆后的 jar 包;obfuscationDictionary 表示混淆规则字典;proguardInclude 表示 ProGuard 配置文件。 2. 在 src/main/resources 目录下添加 proguard-rules.pro 文件,配置混淆规则。 3. 在 pom.xml 文件所在的目录下执行以下命令进行混淆: ``` mvn clean package ``` 执行完毕后,会在 target 目录下生成一个混淆后的 jar 包。 需要注意的是,代码混淆虽然可以提高代码的安全性,但同时也可能会影响代码的性能和运行结果,因此需要进行充分的测试和验证。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值