赞
踩
ProGuard 是一个优化和混淆 Java 和 Android 应用程序的工具。它通过缩小、优化和混淆代码,减少应用程序的大小并提高安全性。ProGuard 规则用于控制这些操作,确保某些类、方法和字段在混淆过程中被保留或处理特定方式。
以下是一些常用的 ProGuard 规则及其解释:
-keep class com.example.MyClass
保留 com.example.MyClass
类,不对其进行混淆。
-keep class com.example.MyClass {
*;
}
保留 com.example.MyClass
类及其所有字段和方法。
-keepclassmembers class com.example.MyClass {
public <fields>;
}
保留 com.example.MyClass
类中所有公共字段。
-keepclassmembers class com.example.MyClass {
public <methods>;
}
保留 com.example.MyClass
类中所有公共方法。
-keep class * extends com.example.BaseClass
保留所有继承自 com.example.BaseClass
的类。
-keep class * implements com.example.MyInterface
保留所有实现 com.example.MyInterface
的类。
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
保留所有枚举类的 values()
和 valueOf(String)
方法,这对于正常使用枚举至关重要。
-keep @interface com.example.MyAnnotation
-keepclassmembers class * {
@com.example.MyAnnotation *;
}
保留带有 @com.example.MyAnnotation
注释的所有类成员。
-keep class * extends android.app.Activity
保留所有继承自 android.app.Activity
的类。
-keep class * extends android.app.Service
保留所有继承自 android.app.Service
的类。
标记接口用于简化 ProGuard 规则的配置,通过实现特定的接口来标识需要保护的类。
public interface JNIProguardKeepTag {
}
public final class JNISdk implements JNIProguardKeepTag {
// 类内容
}
-keep class * implements com.example.jni.JNIProguardKeepTag {
*;
}
以下是一个示例 ProGuard 配置文件,它结合了多个常见规则:
# 保留所有活动类 -keep class * extends android.app.Activity # 保留所有服务类 -keep class * extends android.app.Service # 保留所有自定义视图类 -keep class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 保留所有枚举类的静态方法 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 保留所有实现 Serializable 接口的类 -keep 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(); } # 保留所有实现 JNIProguardKeepTag 接口的类及其所有成员 -keep class * implements com.example.jni.JNIProguardKeepTag { *; }
通过这些规则,您可以确保在混淆过程中保留必要的类和成员,以保证应用程序的正常运行和安全性。在实际使用中,可能需要根据具体项目的需求调整和添加规则。
联系我
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。