Java 为什么Gson在发布后更改属性?

Java 为什么Gson在发布后更改属性?,java,android,debugging,release,gson,Java,Android,Debugging,Release,Gson,我的班级是: 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()

我的班级是:

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);
发布中的输出:

[{"a":1944,"b":2592},{"a":1458,"b":2592}]

为什么???

在发布模式下,正如您在评论中所说,您启用了
minify

在模糊处理过程之后,字段的名称将发生更改。如果您想在不混淆的情况下保存它们,您必须告诉
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;
}

在发布模式下,正如您在评论中所说,您启用了
minify

在模糊处理过程之后,字段的名称将发生更改。如果您想在不混淆的情况下保存它们,您必须告诉
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;
}

你在用proguard吗?是的。我用的是proguard和minifyEnablaed你用的是proguard吗?是的。我使用了proguard和minifyEnablaed。在Android中,您也可以将
@Keep
注释添加到
CameraSize
类中。@Marcinkoziski没错!顺便说一句,我还是喜欢把我所有的“保存”在proguard文件中,以避免忘记一些东西。我想这是我个人的偏好。我总是忘了添加到ProGuard文件中,我更容易添加
@Keep
s。在Android中,您也可以只将
@Keep
注释添加到
CameraSize
类。@marcinkoziski没错!顺便说一句,我还是喜欢把我所有的“保存”在proguard文件中,以避免忘记一些东西。我想这是我个人的偏好。我总是忘记添加到ProGuard文件,因此添加
@Keep
s对我来说更容易。