分享

ProGuard的Maven插件配置

 阿青哥Joe 2018-06-15

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

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

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

  1. <plugin>  
  2.     <groupId>com.idfconnect.devtools</groupId>  
  3.     <artifactId>idfc-proguard-maven-plugin</artifactId>  
  4.     <version>1.0.1</version>  
  5.              <executions>  
  6.                  <execution>  
  7.                      <phase>package</phase>  
  8.                      <goals>  
  9.                          <goal>obfuscate</goal>  
  10.                      </goals>  
  11.                  </execution>  
  12.              </executions>  
  13.     <configuration>  
  14.         <inputFile>${project.build.outputDirectory}</inputFile>  
  15.            <libraryJarPaths>  
  16.                     <libraryJarPath>${java.home}/lib/jce.jar</libraryJarPath>  
  17.               </libraryJarPaths>  
  18.               <excludeManifests>false</excludeManifests>  
  19.               <excludeMavenDescriptor>false</excludeMavenDescriptor>  
  20.             <outputArtifacts>  
  21.              <outputArtifact>  
  22.                  <file>${project.build.finalName}.${project.packaging}</file>  
  23.              </outputArtifact>  
  24.             </outputArtifacts>  
  25.     </configuration>  
  26.              <dependencies>  
  27.                 <dependency>  
  28.                      <groupId>net.sf.proguard</groupId>  
  29.                      <artifactId>proguard-base</artifactId>  
  30.                      <version>4.11</version>  
  31.                  </dependency>  
  32.              </dependencies>  
  33. </plugin>           
...maven.pro的内容:

  1. -renamesourcefileattribute SourceFile  
  2.   
  3. -dontskipnonpubliclibraryclassmembers  
  4.   
  5. -keepattributes Exceptions,InnerClasses,Signature,Deprecated,  
  6.                 SourceFile,LineNumberTable,*Annotation*,EnclosingMethod  
  7.   
  8. -keep public class * {  
  9.     public protected *;  
  10.   
  11. -dontskipnonpubliclibraryclassmembers  
  12.   
  13. -keepattributes Exceptions,InnerClasses,Signature,Deprecated,  
  14.                 SourceFile,LineNumberTable,*Annotation*,EnclosingMethod  
  15.   
  16. -keep public class * {  
  17.     public protected *;  
  18. }  
  19.   
  20. -keepclassmembernames class * {  
  21.     java.lang.Class class$(java.lang.String);  
  22.     java.lang.Class class$(java.lang.String, boolean);  
  23. }  
  24.   
  25. -keepclasseswithmembernames class * {  
  26.     native <methods>;  
  27. }  
  28.   
  29. -keepclassmembers,allowoptimization enum * {  
  30.     public static **[] values();  
  31.     public static ** valueOf(java.lang.String);  
  32. }  
  33.   
  34. -keepclassmembers class * implements java.io.Serializable {  
  35.     static final long serialVersionUID;  
  36.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  37.     private void writeObject(java.io.ObjectOutputStream);  
  38.     private void readObject(java.io.ObjectInputStream);  
  39.     java.lang.Object writeReplace();  
  40.     java.lang.Object readResolve();  
  41. }  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多