我的课程是:
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}]
为什么??
答案 0 :(得分:4)
在发布模式中,正如您在评论中所说,您有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;
}
用户@MarcinKoziń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;
}