最近一直想写点公共项目,但有的时候又不像别人拿到我们的源码,(拿到的jar包可以反编译),在此背景下产生了这个文章。
proguard的相关知识我就不多介绍了,下面来点我使用的一些记录
com.github.wvengen
proguard-maven-plugin
2.0.14
package
proguard
${proguard.version}
${project.build.finalName}.jar
${project.build.finalName}.jar
true
-target 1.8
-dontshrink
-dontoptimize
-adaptclassstrings
-ignorewarnings
-keep class org.apache.logging.log4j.util.* { *; }
-dontwarn org.apache.logging.log4j.util.**
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepnames interface **
-keepclassmembers enum * { *; }
-keepparameternames
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);}
-dontnote javax.annotation.**
-dontnote sun.applet.**
-dontnote sun.tools.jar.**
-dontnote org.apache.commons.logging.**
-dontnote javax.inject.**
-dontnote org.aopalliance.intercept.**
-dontnote org.aopalliance.aop.**
-dontnote org.apache.logging.log4j.**
-dontnote module-info
-keep class com.kafang.atgo.restful.WebApp
-keep class com.cnzh.sms.SmsAutoConfiguration
-keepclassmembers class com.kafang.atgo.restful.WebApp{ *;}
-keep interface * extends * { *; }
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
}
${java.home}/lib/rt.jar
${java.home}/lib/jce.jar
net.sf.proguard
proguard-base
${proguard.version}
其实上面的大部分配置都是网上找到的,只需要根据实际情况增加一点特殊情况就可以。
在我的场景中,我拿发短信这个小starter来做测试。
因为spring boot starter需要注入,如果把这个注入配置类混淆后,就没发使用了。(或者你把spring.factories这个文件里面的内容也按照混淆处理)
在这里就需要把注入的这个配置类放行,即
-keep class com.cnzh.sms.SmsAutoConfiguration
接口被放行了,配置类也放行了,然后使用这个jar包就是和普通的一样了,没有任何区别,只是别人就不好看你的源码了
image.png
嗯,很好,鬼知道上面abcd是啥意思,是不是与其看源码还不如再写一套?恩恩,要的就是这个效果!