Google Play APK和Android Studio APK(USB调试)表现不同

mis*_*han 12 android gson google-play android-studio

我之前发布了一个问题:'没有类的args构造函数不存在',但是当我通过Android Studio在我的手机上使用USB调试模式测试它时,它确实得到了答案.但是,当我将应用推送到Google Play时,它会停止工作并导致我在该问题中描述的相同错误.我今天重复测试,同样的事情发生了.

为了澄清,我正在测试:

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

谷歌播放APK的行为与Android Studio APK有什么不同?或者我错过了什么?

mar*_*mor 8

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

所以可能发生的事情就是ProGuard遍历你的代码,发现它MwVolleyApi$Page没有在任何地方使用,并删除它.

要测试这个理论,请build.gradle关闭minifyEnabled:

release {
    minifyEnabled false
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后构建一个release-apk,并测试它.

顺便说一句,在将设备上传到Google Play之前,您应该始终在设备上测试发布apks,您可以通过adb install它们安装或将它们复制到SD卡,然后通过Downloads手机上的应用安装它们.

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

-keep class fr.free.nrw.commons.upload.MwVolleyApi$Page {*;}
Run Code Online (Sandbox Code Playgroud)

然后你可以minifyEnabled回到真,再次测试