Android Proguard混淆相关总结

Proguard是什么?

  • 关于如何进行反编译
  • 混淆
    Java代码是非常容易反编译的,为了很好的保护Java源代码,我们往往需要对编译好的class文件进行混淆处理
  • Proguard
    Proguard工具是用于压缩、优化、混淆我们的代码,打包时可以移除代码中无用类、方法、属性同时进行混淆

Proguard开启

  • 开启混淆(build.gradle/app)
    minifyEnabled true
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

Proguard过滤

  • 混淆为什么要保留一些类名或方法名
    • 让C/C++程序可以通过jni使用Java方法
    • 四大组件由于在Manifest文件中注册了,所以需要保留
    • R文件混淆会导致引用错误
  • 常用的一些过滤命令
#保留native的方法名,和包含native方法的类名不变
-keepclasseswithmembernames class *{
    native <methods>;
}

# 四大组件
-keep public class * extends android.app.Activity
-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

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

# Parcelable相关
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

# R文件中的静态变量
-keepclassmembers class **.R$* {
    public static <fields>;
}

# 过滤某一个类中的全部内容
-keep class com.app.util.share.ShareUtil{*;}

# 过滤某个目录下的全部内容
-keep class com.app.bean.** {*;}

Proguard原理

  • EntryPoint
    对不需要混淆的对象方法属性标记为EntryPoint,丢弃没有用到的类,最后重命名没有被EntryPoint标记的对象方法和属性

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值