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

时间:2016-02-04 23:12:14

标签: android debugging android-studio apk release

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

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

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

  • 构建 - >生成签名APK

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

  • 构建类型==发布。

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

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

问题:     有什么东西我错过了为什么我的调试版本的APK工作完美,但构建/发布版本没有?我一直和后端的网络人员来回走动,我们不确定谁在这里有过错。在应用程序的调试版本和发布版本之间是否存在根本不同的东西,可能会阻止它按预期工作?

有人知道吗?

全部谢谢!

-Sil

2 个答案:

答案 0 :(得分:3)

好的,找到了答案。

解决方案与此问题基本相同: 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类变量名称。

-Sil

答案 1 :(得分:0)

也许这不会回答你的问题 你有没有使用USB调试?
这是一种允许您直接从真实手机调试应用程序的方法 你只需要下载驱动程序,启用手机调试模式,然后通过usb将手机插入PC /笔记本电脑 this is the link about how to setup the usb debugging

this for the driver

希望这会对你有所帮助 最好的问候