Android项目中Moshi注解类代码混淆失效问题咨询
问题:Moshi配合代码混淆时类名与结构未被混淆的原因
为Android项目启用代码混淆,使用Moshi处理JSON操作,但Release APK中带@JsonClass(generateAdapter = true)注解的类反编译后可读性仍很高,类名和变量名清晰可见,Moshi生成的适配器类也暴露了可读内容。此前用Gson时无此问题,且未在proguard-rules.pro中添加任何和Moshi或该类相关的保留规则,询问是否遗漏配置。
Gradle配置
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
原始类
import com.decompiletest.enum.EyeColor import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) data class MPerson( @Json(name = "name") val name: String, @Json(name = "lucy_number") val luckyNumber: Int, @Json(name = "eye_color") val eyeColor: EyeColor, )
混淆后类
import p002a1.C1300j; import p002a1.C1303m; import p026f1.C0403d; import p099y0.C1202a; @C1303m(generateAdapter = true) /* renamed from: com.decompiletest.moshis.MPerson */ public final class MPerson { /* renamed from: a */ public final String f759a; /* renamed from: b */ public final int f760b; /* renamed from: c */ public final C1202a f3861c; public MPerson(@C1300j(name = "name") String str, @C1300j(name = "lucy_number") int i, @C1300j(name = "eye_color") C1202a aVar) { C0403d.m3330r(str, "name"); C0403d.m3330r(aVar, "eyeColor"); this.f759a = str; this.f760b = i; this.f3861c = aVar; } public final MPerson copy(@C1300j(name = "name") String str, @C1300j(name = "lucy_number") int i, @C1300j(name = "eye_color") C1202a aVar) { C0403d.m3330r(str, "name"); C0403d.m3330r(aVar, "eyeColor"); return new MPerson(str, i, aVar); } public final boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof MPerson)) { return false; } MPerson mPerson = (MPerson) obj; return C0403d.m3322d(this.f759a, mPerson.f759a) && this.f760b == mPerson.f760b && this.f3861c == mPerson.f3861c; } public final int hashCode() { int hashCode = Integer.hashCode(this.f760b); return this.f3861c.hashCode() + ((hashCode + (this.f759a.hashCode() * 31)) * 31); } public final String toString() { return "MPerson(name=" + this.f759a + ", luckyNumber=" + this.f760b + ", eyeColor=" + this.f3861c + ")"; } }
解答
这是Moshi的预期行为,并非遗漏配置。Moshi的代码生成器会动态生成ProGuard规则,有条件地保留带@JsonClass(generateAdapter = true)注解的类的类名和主构造函数,确保运行时能正常反射实例化这些类。
内容的提问来源于stack exchange,提问作者Omer KAPLANDROID
相关产品推荐
相关产品推荐

