Android:调试和发布版本有不同的结果

标签 android debugging android-studio apk release

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

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

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

  • 构建 --> 生成签名 APK

  • 创建一个新的 keystore (使用 pw)

  • 构建类型 == 发布。

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

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

问题: 关于为什么我的 APK 调试版本可以完美运行但构建/发布版本却不能正常运行,我是否遗漏了什么?我一直在与后端的网络人员来回交流,我们不确定这里是谁的错。应用程序的调试版本和发布版本之间是否存在根本差异,可能会阻止其正常工作?

有人知道吗?

谢谢大家!

最佳答案

好的,找到答案了。

这里的解决方法和这个问题基本一样: Gson deserialize null pointer in released apk

我最初的问题是发布版本和调试版本之间是否存在差异:答案是,如果您使用 proguard 并将 minifyEnabled 设置为 true,它会混淆 ( See link here for Obfuscation details/ Definition) 您的代码(这是我想要发生的)。通常,这对代码来说不是问题,因为它会将 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
    .
}

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

关于Android:调试和发布版本有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213494/

相关文章:

windows - 运行模拟器/物理设备时无法加载图像

android - Rxjava2 with Retrofit 获取单个和所有数据

java - Intellij 远程调试经常断开连接

debugging - phpstorm + xdebug : Remote host is configured as "localhost" despite server host is probably not local

.net - 加载 psscor4 : The garbage collector data structures are not in a valid state for traversal 时

android - 如何仅在 Ubuntu 上安装 Android Studio 命令行工具

android-studio - 更改所有文件头

android - 使用我的 Android 应用程序将文本标签发送到 Instagram

java.lang.IllegalStateException : Couldn't read row 0, col -1

android - 对存储库使用不安全协议(protocol),无需明确选择加入