Android:调试和发布具有不同结果的构建

Sil*_*los 0 debugging android release apk android-studio

我即将在我的应用商店上发布一个发布版本。调试版本(我用我的手机代替模拟器),完美运行,没有任何问题。

然而,“签名 APK”版本根本没有连接到后端。

我如何在 Android Studio 中生成签名的 APK:

  • 构建 --> 生成签名的 APK

  • 创建一个新的密钥库(使用密码)

  • 构建类型 == 发布。

  • 通过移动实际的 APK 文件本身并允许从未知来源安装,将其安装到手机上。

我的标准请求(IE Signin、getUser、GetSomethingX)都出错了。这被证明是一个比我最初想象的更大的问题,因为我无法弄清楚如何测试日志打印语句并在日志猫中查看它们。当然,我可以使用 Toasts,但是尝试以这种方式阅读它有点痛苦。我编写的实际代码的调试版本和发布版本之间没有区别。

问题:为什么我的 APK 的调试版本可以完美运行,但构建/发布版本却不能?我一直在与后端的网络人员来回走动,我们不确定谁有错。应用程序的调试版本和发布版本之间是否存在本质上的不同,可能会阻止其正常工作?

有人知道吗?

谢谢大家!

-Sil

Sil*_*los 5

好的,找到答案了。

解决方案与这里的这个问题基本相同: Gson deserialize null pointer in release apk

我最初的问题是发布版本和调试版本之间是否存在差异:答案是,如果您使用 proguard 并将 minifyEnabled 设置为 true,它将混淆(请参阅此处的链接了解混淆详细信息/定义)您的代码(我希望发生的事情) )。通常,这对代码来说不是问题,因为它会将 R 文件中的点编译为正确的字符串,并使它们的命名为零差异,但是,当您使用像 Gson 这样的依赖项时,这很重要,因为 Gson 需要读取传入的 JSON Strnig 变量名称并在您的代码中匹配它们。

这里的最终结果是,为了解决没有正确解析 JSON 对象的原始问题,您只需要将序列化名称添加到 POJO 类变量中。一个例子是:

public class Person {
    @SerializedName("name")
    private String name;
    @SerializedName("email")
    private String email;
    @SerializedName("phoneNumber")
    private String phoneNumber;
    .
    //Setters and Getters
    .
}
Run Code Online (Sandbox Code Playgroud)

TL/DR - 如果您使用 Gson,请始终将 @SerializedName("JSON_VARIABLE_NAME") 添加到所有 POJO 类变量名称中。

-Sil