马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
ProGuard是一个开源的Java class文件缩小器、优化器、肴杂器和预验证器。它通过删除未利用的类、字段、方法和属性,优化字节码指令,并重命名类、字段和方法,使反编译后的代码难以理解,从而提高应用的安全性。以下是对ProGuard配置文件的一些详细表明和常见配置项的阐明。
ProGuard配置文件结构
ProGuard的配置文件通常命名为proguard-rules.pro,并包含在Android项目的根目录或app模块目录中。配置文件由各种规则和选项组成,每个选项都定义了ProGuard在肴杂和优化代码时应该执行的操作。
常见配置项
1. -keep 指令
-keep指令用于保留类、方法、字段不被肴杂。可以指定详细的类、方法、字段或带有某些特征的类。
- # 保留所有继承自Activity的类
- -keep class * extends android.app.Activity
- # 保留所有带有特定注解的类
- -keep @interface com.example.MyAnnotation
- # 保留所有实现特定接口的类
- -keep class * implements java.io.Serializable
复制代码 2. -keepclassmembers 指令
-keepclassmembers指令用于保留类中的特定成员不被肴杂。
- # 保留所有实现Serializable接口的类中的所有字段和方法
- -keepclassmembers class * implements java.io.Serializable {
- static final long serialVersionUID;
- private static final java.io.ObjectStreamField[] serialPersistentFields;
- private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException;
- private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException;
- java.lang.Object writeReplace() throws java.io.ObjectStreamException;
- java.lang.Object readResolve() throws java.io.ObjectStreamException;
- }
复制代码 3. -dontwarn 指令
-dontwarn指令用于告诉ProGuard忽略特定类的告诫信息。
- # 忽略某些库的警告信息
- -dontwarn com.squareup.okhttp3.**
- -dontwarn com.google.gson.**
复制代码 4. -keepattributes 指令
-keepattributes指令用于保留类文件中的特定属性。
- # 保留注解属性
- -keepattributes *Annotation*
- # 保留签名属性
- -keepattributes Signature
复制代码 5. -dontobfuscate
指令
-dontobfuscate
指令用于告诉ProGuard不要肴杂代码,只举行代码优化和压缩。
6. -optimizations 指令
-optimizations指令用于指定哪些优化步调可以被应用。
- # 应用所有优化步骤
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
复制代码 7. -printmapping 指令
-printmapping指令用于生成一个映射文件,记录了肴杂前后的类、方法、字段的对应关系。
- # 生成混淆映射文件
- -printmapping mapping.txt
复制代码 示例ProGuard配置文件
以下是一个常见的ProGuard配置文件示例,涵盖了基本的保留规则和常见的库配置。
- # 保留所有注解属性-keepattributes *Annotation*# 保留四大组件的类-keep class * extends android.app.Activity-keep class * extends android.app.Service-keep class * extends android.content.BroadcastReceiver-keep class * extends android.content.ContentProvider# 保留应用程序类-keep public class * extends android.app.Application# 保留自定义视图类-keep class * extends android.view.View { *** get*(); void set*(***); void *(android.content.Context);}# 保留 Parcelable 接口的实现类-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}# 保留 Gson 注解-keep class com.google.gson.annotations.SerializedName { *; }# 保留 Retrofit 的类-keep class retrofit2.** { *; }-keep class okhttp3.** { *; }-keep class okio.** { *; }# 保留 ButterKnife 注解-keep class butterknife.** { *; }-keepclasseswithmembernames class * { @butterknife.* <fields>;}# 保留序列化类-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException; private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException; java.lang.Object writeReplace() throws java.io.ObjectStreamException; java.lang.Object readResolve() throws java.io.ObjectStreamException;}# 忽略一些库的告诫信息-dontwarn com.squareup.okhttp3.**-dontwarn com.google.gson.**# 生成混淆映射文件
- -printmapping mapping.txt
复制代码 注意事项
- 逐步调试:如果应用在肴杂后瓦解或行为非常,可以逐步添加保留规则,以找出哪些类或方法需要保留。
- 保留规则覆盖范围要适当:保留规则覆盖范围过大可能会导致肴杂效果减弱,覆盖范围过小可能会导致应用运行非常。
- 结合肴杂报告:利用ProGuard生成的肴杂报告(mapping文件)来调试和分析肴杂后的代码,以确保代码肴杂的正确性。
通过公道配置ProGuard,可以在保持应勤奋能完备的条件下,最大化肴杂和优化效果,提高应用的安全性和性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |