java代码混淆2

来源:互联网 发布:廖雪峰java视频百度云 编辑:程序博客网 时间:2024/06/05 08:49

上一篇java代码混淆只是proguard的基本配置,如果应用到实际工程里面,就需要有所提升。
1 定义不需要混淆的注解
下面的注解,可以应用到类、方法及属性中

@Retention(RetentionPolicy.CLASS)@Target({ElementType.TYPE,ElementType.METHOD,ElementType.CONSTRUCTOR,ElementType.FIELD})public @interface NotProguard {}

2 @NotProguard实例

@NotProguard    public void export(String keystorePath, String cerPath, String password) {        String[] arstringCommand = new String[] {                "cmd ",                 "/k",                 "start", // cmd Shell命令                "keytool",                 "-export", // - export指定为导出操作                "-keystore", // -keystore指定keystore文件,这里是d:/demo.keystore                keystorePath,                 "-alias", // -alias指定别名,这里是ss                "ss",                 "-file",// -file指向导出路径                cerPath,                 "-storepass",// 指定密钥库的密码                password        };        execCommand(arstringCommand);    }
@NotProguard@NotProguardpublic class CheckedException {    /**     * 将CheckedException转换为UncheckedException.     */    public static RuntimeException unchecked(Exception e) {        if (e instanceof RuntimeException) {            return (RuntimeException) e;        } else {            return new RuntimeException(e);        }    }

3 proguard.conf详细配置

 #忽略警告信息 -ignorewarnings#不做 shrink -dontshrink#指定不去忽略包可见的库类的成员-dontskipnonpubliclibraryclassmembers#  通过指定数量的优化能执行-optimizationpasses 3#      指定不去忽略非公共的库类-dontskipnonpubliclibraryclasses#      输出生成信息-verbose#混淆时应用侵入式重载 -overloadaggressively#优化时允许访问并修改有修饰符的类和类的成员-allowaccessmodification#确定统一的混淆类的成员名称来增加混淆-useuniqueclassmembernames#这里添加你不需要混淆的类 # --------- 保护类中的所有方法名 ------------ -keeppackagenames-keep @com.dzmsoft.framework.base.command.NotProguard class * {*;}-keep class * {@com.dzmsoft.framework.base.command.NotProguard <fields>;}-keepclassmembers class * {public <methods>;} -keepclassmembers class * {@com.dzmsoft.framework.base.command.NotProguard <methods>;} # Signature:避免混淆泛型,这在JSON实体映射时非常重要,比如fastJson# SourceFile,LineNumberTable:抛出异常时保留代码行号,在异常分析中可以方便定位# Annotation:保护代码中的Annotation不被混淆,这在JSON实体映射时非常重要,比如fastJson-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod-keepclasseswithmembers public class * {    public static void main(java.lang.String[]);}-keep class **.$* {     *;    }  -keep enum  * {    *;}# 保留序列化对象-keepnames class * implements java.io.Serializable-keepclassmembers class * extends java.io.Serializable {    static final long serialVersionUID;    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();}
0 0
原创粉丝点击