我需要保持所有模型类不被混淆,我在proguard规则中添加了这一行以保留所有模型类。
-keep class my_package_name.model.** { *; }
此命令保留所有模型类,但仍然模糊了Model类中的注释。我尝试添加以下行
-keepattributes *Annotation*
-keepattributes EnclosingMethod
但结果仍然相同。我的模型类包含这两个注释
@SerializedName("message")
@Expose
private String message;
如何保持两个注释不被混淆?
答案 0 :(得分:3)
使用字段时,Gson使用存储在类文件中的泛型类型信息。 Proguard默认会删除此类信息,因此请将其配置为保留所有信息。
尝试添加
-keepattributes Signature
-keepattributes EnclosingMethod
-keepattributes InnerClasses
-keepattributes Annotation
使用GSON @Expose注释
-keepattributes *Annotation*
对于Gson特定类
-keep class sun.misc.Unsafe { *; }
防止proguard从TypeAdapterFactory,JsonSerializer,JsonDeserializer实例中剥离接口信息(因此它们可以在@JsonAdapter中使用)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
答案 1 :(得分:3)
试试这个:
-keepattributes *Annotation*
-keepattributes Signature
-dontnote sun.misc.**
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
实际上,github https://github.com/google/gson/blob/master/examples/android-proguard-example/proguard.cfg上的官方报告中有一个proguard配置
答案 2 :(得分:2)
-keep @package.annotationclassname public class *
答案 3 :(得分:1)
添加到您的proguard:它阻止特定类被混淆。
-dontshrink
。:https://www.guardsquare.com/en/proguard/manual/usage -dontoptimize
。 我真的不明白这个问题,你指的是一个领域还是内部阶级? 如果类中有内部类,则需要指定其内部字段。 例如,如果这是类:
public class Parent {
protected Child child;
protected class Child {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
在proguard中,您需要指定Child
class:
-keep class com.package.name.Parent$Child {*; }
答案 4 :(得分:1)
您可能需要在项目中创建名为DontObfuscate的注释 更多检查这个 Managing obfuscation with annotations
答案 5 :(得分:1)
规则
-keep class com.google.gson.annotations.*
会将所有注释保留在com.google.gson.annotations包中,包括您使用过的SerializedName和Expose。