繁体   English   中英

从 Google Play 下载时应用程序崩溃

[英]App crashes when downloaded from Google Play

我刚刚构建了一个应用程序并将其部署到 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 的应用程序是发布版本,并且 proguard 缩小了您的应用程序并删除了它不应该具有的类。 当您在 Android Studio 中构建时,它是一个不会被缩小的调试构建。 这就是为什么您只能从 Google Play 看到崩溃的原因。

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

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

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

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

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

@保持

类名MemeViewModel之前的注释。

例子,

@Keep
class MemeViewModel{
//
//
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM