diff --git a/app/.gitignore b/app/.gitignore index 42afabf..cb1d382 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,4 @@ -/build \ No newline at end of file +/build +/release/baselineProfiles/0/app-release.dm +/release/baselineProfiles/1/app-release.dm +/release/output-metadata.json diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 458a1d6..293b300 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -20,12 +20,39 @@ # hide the original source file name. #-renamesourcefileattribute SourceFile -# 保持 Android 四大组件等系统类 +# ---------------------------------- 基础配置 ---------------------------------- +# 代码优化次数,通常设为5 +-optimizationpasses 5 +# 不使用混合大小写类名 +-dontusemixedcaseclassnames +# 不忽略非公共库类 +-dontskipnonpubliclibraryclasses +# 不进行预校验(Android不需要,可加快速度) +-dontpreverify +# 打印混淆详情 +-verbose +# 忽略警告 +-ignorewarnings + +# ---------------------------------- 保留重要属性 ---------------------------------- +# 保留泛型签名(重要,避免JSON解析等类型转换错误) +-keepattributes Signature +# 保留注解(如@Keep, @SerializedName等) +-keepattributes *Annotation* +# 保留异常信息 +-keepattributes Exceptions +# 保留源代码文件名和行号(便于崩溃日志分析) +-keepattributes SourceFile,LineNumberTable + +# ---------------------------------- 保留Android基本组件 ---------------------------------- +# 保留四大组件及其子类 -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 --keep public class * extends android.app.Application +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference # 保持 Native 方法不被混淆 -keepclasseswithmembernames class * { @@ -63,4 +90,65 @@ # 保持由 JSON 转换的 Bean 类(或者你的数据模型类)不被混淆 -keep class com.gamedog.vididin.beans.** { *; } --keep class com.gamedog.vididin.router.** { *; } \ No newline at end of file +-keep class com.gamedog.vididin.router.** { *; } + + +# 保留R文件中的静态字段(保证资源反射能正常工作) +-keepclassmembers class **.R$* { + public static ; +} + +# gson +-keep class com.google.gson.** { *; } +-keep class sun.misc.Unsafe { *; } +-keep class com.google.gson.stream.** { *; } +# 明确保护被@SerializedName注解的字段 +-keepclassmembers class * { + @com.google.gson.annotations.SerializedName ; +} + + +#okhttp +# OkHttp3 +-dontwarn okhttp3.** +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okio.** +# Retrofit2 +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } +-keepattributes Signature, Exceptions + + +#butter knife +# Butter Knife +-keep class butterknife.** { *; } +-dontwarn butterknife.internal.** +-keep class **$$ViewBinder { *; } +-keepclasseswithmembernames class * { + @butterknife.* ; +} +-keepclasseswithmembernames class * { + @butterknife.* ; +} + + + + +# ---------------------------------- 核心:排除Bean/Model类(防止JSON解析失败) ---------------------------------- +# 规则:保护所有你定义的、用于JSON序列化/反序列化的数据模型类(JavaBean/POJO)不被混淆。 +# 替换 `com.yourpackage.model` 为你的数据模型类所在的实际包名。 +# 这将保护该包(及其子包)下所有类的类名、字段名和方法名不被更改。 + +-keep class com.gamedog.vididin.beans.** { *; } + + +# 如果模型类实现了Serializable接口,建议额外保留序列化版本UID和特定方法 +-keepclassmembers class com.yourpackage.model.** 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(); +} \ No newline at end of file