Android 代码混淆记录

本文详细介绍了如何在Android应用中设置代码混淆,包括在app.gradle中配置混淆选项,以及在混淆规则文件中保护特定类和方法的具体策略。通过示例展示了如何避免混淆JNI方法、View子类的getset方法等,确保应用在混淆后的稳定性和安全性。

代码混淆记录:

首先在app.gradle中设置混淆:

buildTypes {
        release {
            debuggable true
            //设置混淆
            minifyEnabled true
            //混淆文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
        }
    }

混淆规则文件:
在这里插入图片描述
在混淆规则文件中加入以下代码:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*  #指定要启用和禁用的优化
-optimizationpasses 5  #压缩比率  0---7
-allowaccessmodification  #指定在预先处理中 类和类成员的访问性可能会扩大
-dontpreverify #指定不预先验证处理类文件
#-dontoptimize
-dontusemixedcaseclassnames  #指定不产生混合的情况下的类名称而混淆
-dontskipnonpubliclibraryclasses
#-dontskipnonpubliclibraryclassmembers    #指定不去忽略包可见的库类的成员。
-verbose
-keepattributes SourceFile,LineNumberTable#保留行号

-keepattributes *Annotation*  #保持注解
-keepattributes Signature
-keepattributes EnclosingMethod
-keep class * extends java.lang.annotation.Annotation { *; }

-keepclasseswithmembernames class * {#指定不混淆所有的jni方法
    native <methods>;
}

-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆
   void set*(***);
   *** get*();
}

-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法
   public void *(android.view.View);
}

-keepclassmembers enum * { #不混淆枚举类型中的指定方法
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量
  public static final android.os.Parcelable$Creator *;
}

-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();
}

-keepclassmembers class **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段
    public static <fields>;
}

-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.FragmentActivity

-dontwarn android.support.** #不提示兼容库的错误警告

# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-ignorewarnings

最后一句一定要加上 忽略警告 要不然打包过程会报错。

测试下反编译的效果:
在这里插入图片描述
已经看不出代码的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值