【问题标题】:App crashes when downloaded from Google Play从 Google Play 下载时应用程序崩溃
【发布时间】:2021-05-24 19:04:04
【问题描述】:

我刚刚构建并部署了一个应用到 Google Play。当我通过 Android Studio 运行它时它运行良好,但现在当我从 Google Play 下载它时它崩溃了。因为这是我第一次,我什至不知道如何查看从 Google Play 下载的应用程序的崩溃报告/堆栈跟踪。我感谢任何和所有的帮助。

更新

所以我得到了 APK 的堆栈跟踪。它告诉我我的TopImageFragment.java 类无法创建我的MemeViewModel.java 类。我不知道为什么它会给出这个错误。一切正常。看来proguard确实在淘汰一个重要的类:

2019-04-18 00:46:32.062 8099-8099/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ozbek.onur.memegenerator, PID: 8099
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ozbek.onur.memegenerator/com.ozbek.onur.memegenerator.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.ozbek.onur.memegenerator.MemeViewModel
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2853)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2928)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1609)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6703)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
     Caused by: java.lang.RuntimeException: Cannot create an instance of class com.ozbek.onur.memegenerator.MemeViewModel
        at android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:155)
        at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:210)
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)
        at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)
        at com.ozbek.onur.memegenerator.TopImageFragment.onActivityCreated(TopImageFragment.java:89)

【问题讨论】:

  • 我建议您在设备崩溃时使用报告按钮,然后在 Google Play 控制台中查找日志。有了这个,您可以编辑您的问题以添加更多信息。在目前的状态下,我们无法为您提供更多帮助。
  • 知道 google play 控制台是什么以及在哪里
  • 您部署应用的 Google Play 网站。 Mayank-Pandit 的建议是我建议的一个很好的替代方案。

标签: android google-play stack-trace


【解决方案1】:

检查您是否有任何没有访问修饰符的 java 文件。根据我的经验,仅仅声明一个没有 public 或 private 修饰符的类会导致这个问题。

【讨论】:

  • 事实证明我已经声明了我的ViewModel 没有访问修饰符。非常感谢。
【解决方案2】:

这种问题通常会发生,因为您部署到 Google Play 的应用是发布版本,并且 proguard 缩小了您的应用并删除了它不应该拥有的类。当您在 Android Studio 中构建时,它是一个不会被缩小的调试构建。这就是为什么您只能从 Google Play 看到崩溃的原因。

在上传到 Google Play 之前,请在设备上测试您的发行版 APK 文件并观察 logcat 是否有错误。这应该告诉您错误删除了哪个类,您可以通过指定自定义 proguard 规则并重试直到应用程序停止崩溃来纠正它。那么当你上传到 Google Play 时,你应该会很好。

您也可以通过更改 build.gradle 文件在调试版本中启用 proguard。然后,当您通过 Android Studio 运行时,您应该会看到与通过 Google Play 看到的相同的错误。

另一种选择是,您可以在发布版本中禁用 proguard/minification。但是,不建议这样做,因为您的应用会比它需要的大。

【讨论】:

  • 我有一个 abb 文件。不是 apk。
  • 当我在手机上运行我下载的应用程序时,我在 Android Studio 上看不到它的堆栈跟踪。
  • 尝试构建一个 APK 而不是 AAB 作为测试,看看您是否可以获得堆栈跟踪。在 Android Studio 中,将 logcat 选项卡更改为“无过滤器”,然后在启动应用程序之前将其清除。您应该看到堆栈跟踪飞过。向后滚动以分析它。
  • 我刚刚发布了堆栈跟踪。看来 proguard 正在逐步淘汰一个重要的类。
  • 可能不是被移除的类,可能是该类的构造函数。尝试将 @Keep 注释放在 MemeViewModel 类和构造函数上,看看是否有帮助。并且,确保你的视图模型有一个无参数的公共构造函数。
【解决方案3】:

我的应用遇到了同样的问题,它被 ProGuard 杀死了。 因为除非另有说明,否则 ProGuard 会重命名所有类。 所以,在你的情况下,你必须添加

@保持

类名前的注释MemeViewModel

例子,

@Keep
class MemeViewModel{
//
//
}

【讨论】:

    【解决方案4】:

    根据我的建议,在下载并尝试打开手机时,请保持手机与 PC/笔记本电脑的连接。在 android studio 上使用 Logcat,它大部分都有所有答案,或者至少有导致答案的错误。尝试将错误日志放在这里,以便我们可以正确查看它。

    1) 尝试通过 android studio 推送您在 Google Play 商店中部署的相同版本的应用程序,看看问题是否仍然存在!

    2) 如果发生同样的事情,则在应用程序的入口点(大多数情况下在 MainActivity 类中的 onCreate 方法)上放置断点,然后转到 Run->Debug "YourProject" 选项并为每个命令进行逐步调试执行并查看哪个导致问题。

    【讨论】:

      最近更新 更多