java - 为什么 Gson 在发布后改变属性?

标签 java android debugging release gson

我的类(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/

相关文章:

android - 完成之前的 Activity ,机器人?

javascript - jquery.min.js 加载资源失败

java - 将 JPanel 动态添加到 JScrollPane

java - H2 问题 : request works in H2 console, 不在 jUnit 测试中

java - 包私有(private)类中的公共(public)方法

android - 在某些 fragment 中隐藏 MenuItem

android - 为另一个应用程序调用自定义广播接收器

c++ - 遍历 map<string, string> 并使用 SDL_TTF 绘制其内容时出现段错误

debugging - 在 Chrome 的调试器中暂停?

java - 使用javac编译java文件