【问题标题】:Google Play APK and Android Studio APK (USB debug) behaving differentlyGoogle Play APK 和 Android Studio APK(USB 调试)的行为不同
【发布时间】:2016-10-25 05:58:57
【问题描述】:

我之前发布了一个问题:'No args constructor for class does not exist', but it does,当我通过 Android Studio 在我的手机上使用 USB 调试模式对其进行测试时,我收到了一个有效的答案。但是,当我将应用程序推送到 Google Play 时,它停止工作并导致我在该问题中描述的相同错误。我今天重复了测试,同样的事情发生了。

为了澄清,我正在测试:

  • 完全相同的代码
  • 在同一部手机上
  • 运行完全相同的 Android 版本
  • 使用完全相同的图片

Google Play APK 的行为与 Android Studio APK 的行为有何不同?还是我错过了什么?

【问题讨论】:

  • 为什么要使用静态类进行序列化和反序列化?
  • @misaochan 编辑相同的问题并为该问题添加赏金足以反弹到活动问题的顶部,而不是发布新问题并链接旧问题,因为问题相同.下次考虑!
  • 你是在应用 proguard 来发布构建而不是调试构建吗?

标签: android android-studio google-play gson


【解决方案1】:

根据您的 build.gradle 配置,release 版本通常在您的代码上运行 ProGuard。 debug 版本通常不会在代码上运行此类工具。

那么可能发生的情况是ProGuard 运行了您的代码,发现MwVolleyApi$Page 没有在任何地方使用,并将其删除。

要测试这个理论,在你的build.gradle 中关闭minifyEnabled:

release {
    minifyEnabled false
    ...
}

然后构建一个发布-apk,并对其进行测试。

顺便说一句,在将它们上传到 Google Play 之前,您应该始终在您的设备上测试发布的 apk,您可以通过 adb install 安装它们或将它们复制到 sd 卡并从手机上的 Downloads 应用程序安装它们。

如果这确实解决了问题,您可以将规则添加到您的 proguard.cfg 文件中以防止删除 Page 类,例如:

-keep class fr.free.nrw.commons.upload.MwVolleyApi$Page {*;}

然后你可以把minifyEnabled变回true,再测试一次

【讨论】:

  • minifyEnabled false 解决了这个问题,谢谢!我们将检查-keep 一行是否足够。
【解决方案2】:

尝试使用 proguard 构建调试版本,看看问题是否重复。 在你的 build.gradle 中这样做:

buildTypes {
        all{
            // Place all proguard files
            proguardFile 'proguard/proguard-rules.pro'
            proguardFile getDefaultProguardFile('proguard-android.txt')
           }
}

【讨论】:

    【解决方案3】:

    我认为您从 Android Studio 构建的 apk 是调试版本,它是用户在开发过程中进行调试的。 在 Google Play Store 上发布的 apk 是您应用的发布版本。

    您还可以从 Android Studio 构建发布版本,并查看它与 Play 商店中的版本完全相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多