ProGuard配置详解

打印 上一主题 下一主题

主题 1065|帖子 1065|积分 3195

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
ProGuard是一个开源的Java class文件缩小器、优化器、肴杂器和预验证器。它通过删除未利用的类、字段、方法和属性,优化字节码指令,并重命名类、字段和方法,使反编译后的代码难以理解,从而提高应用的安全性。以下是对ProGuard配置文件的一些详细表明和常见配置项的阐明。
ProGuard配置文件结构

ProGuard的配置文件通常命名为proguard-rules.pro,并包含在Android项目的根目录或app模块目录中。配置文件由各种规则和选项组成,每个选项都定义了ProGuard在肴杂和优化代码时应该执行的操作。
常见配置项

1. -keep 指令

-keep指令用于保留类、方法、字段不被肴杂。可以指定详细的类、方法、字段或带有某些特征的类。
  1. # 保留所有继承自Activity的类
  2. -keep class * extends android.app.Activity
  3. # 保留所有带有特定注解的类
  4. -keep @interface com.example.MyAnnotation
  5. # 保留所有实现特定接口的类
  6. -keep class * implements java.io.Serializable
复制代码
2. -keepclassmembers 指令

-keepclassmembers指令用于保留类中的特定成员不被肴杂。
  1. # 保留所有实现Serializable接口的类中的所有字段和方法
  2. -keepclassmembers class * implements java.io.Serializable {
  3.     static final long serialVersionUID;
  4.     private static final java.io.ObjectStreamField[] serialPersistentFields;
  5.     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException;
  6.     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException;
  7.     java.lang.Object writeReplace() throws java.io.ObjectStreamException;
  8.     java.lang.Object readResolve() throws java.io.ObjectStreamException;
  9. }
复制代码
3. -dontwarn 指令

-dontwarn指令用于告诉ProGuard忽略特定类的告诫信息。
  1. # 忽略某些库的警告信息
  2. -dontwarn com.squareup.okhttp3.**
  3. -dontwarn com.google.gson.**
复制代码
4. -keepattributes 指令

-keepattributes指令用于保留类文件中的特定属性。
  1. # 保留注解属性
  2. -keepattributes *Annotation*
  3. # 保留签名属性
  4. -keepattributes Signature
复制代码
5. -dontobfuscate
指令


-dontobfuscate
指令用于告诉ProGuard不要肴杂代码,只举行代码优化和压缩。
  1. -dontobfuscate
复制代码
6. -optimizations 指令

-optimizations指令用于指定哪些优化步调可以被应用。
  1. # 应用所有优化步骤
  2. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
复制代码
7. -printmapping 指令

-printmapping指令用于生成一个映射文件,记录了肴杂前后的类、方法、字段的对应关系。
  1. # 生成混淆映射文件
  2. -printmapping mapping.txt
复制代码
示例ProGuard配置文件

以下是一个常见的ProGuard配置文件示例,涵盖了基本的保留规则和常见的库配置。
  1. # 保留所有注解属性-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.**# 生成混淆映射文件
  2. -printmapping mapping.txt
复制代码
注意事项


  • 逐步调试:如果应用在肴杂后瓦解或行为非常,可以逐步添加保留规则,以找出哪些类或方法需要保留。
  • 保留规则覆盖范围要适当:保留规则覆盖范围过大可能会导致肴杂效果减弱,覆盖范围过小可能会导致应用运行非常。
  • 结合肴杂报告:利用ProGuard生成的肴杂报告(mapping文件)来调试和分析肴杂后的代码,以确保代码肴杂的正确性。
通过公道配置ProGuard,可以在保持应勤奋能完备的条件下,最大化肴杂和优化效果,提高应用的安全性和性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表