我的类(class)是:
private static class CameraSize {
public CameraSize(int h, int w) {
this.h = h;
this.w = w;
}
public int h;
public int w;
}
List<CameraSize> lstCS=new LinkedList<>();
Gson gson = new GsonBuilder().create();
for (int l = 0; l < listSize.size(); l++) {
int height = listSize.get(l).height;
int width = listSize.get(l).width;
CameraSize cs = new CameraSize(height, width);
lstCS.add(cs);
}
gson.toJson(lstCS);
调试输出:
[{"h":1944,"w":2592},{"h":1458,"w":2592}]
发布中的输出:
[{"a":1944,"b":2592},{"a":1458,"b":2592}]
为什么??
最佳答案
在 Release模式下,正如您在评论中所说,您有 minifyEnabled
。
您的字段名称在混淆过程后会发生变化。如果你想不混淆地保存它们,你必须告诉 Proguard
来保存它们。
您可以保留所有嵌套的 CameraSize
类:
-keep class **$CameraSize { *; }
或者只有特定的:
-keep class your.package.to.outer.class.OuterName$CameraSize { *; }
你可以优化它更多的指定字段:
-keepclassmembers class your.package.to.outer.class.OuterName$CameraSize {
public int h;
public int w;
}
正如用户 @Marcin Koziński 所说,您还可以对您的类/字段使用 @Keep
注释来避免混淆过程。
在这种情况下:
private static class CameraSize {
public CameraSize(int h, int w) {
this.h = h;
this.w = w;
}
@Keep
public int h;
@Keep
public int w;
}
关于java - 为什么 Gson 在发布后改变属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645225/