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

App crashes when downloaded from Google Play

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

更新

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

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)

根据我的建议,在您下载并尝试打开它时,让您的 phone 与您的 PC/Laptop 保持连接。在 android studio 上使用 Logcat,它主要包含所有答案或至少包含导致答案的错误。尝试将错误日志放在这里,以便我们正确查看。

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

2) 如果发生同样的事情,那么将断点放在应用程序的入口点(大多数情况下在 MainActivity class 中的 onCreate 方法)并转到 运行->Debug "YourProject" 选项并对每个正在执行的命令进行逐步调试,看看是哪个命令导致了问题。

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

在上传到 Google 播放之前,请在设备上测试您的发布 APK 文件并观察 logcat 是否有错误。这应该会告诉您什么 class 被错误地删除了,您可以通过指定自定义混淆器规则并重试直到应用程序停止崩溃来纠正它。然后上传到Google播放时,应该就可以了。

您还可以通过更改 build.gradle 文件在调试版本中启用混淆器。然后,当您 运行 通过 Android Studio 时,您应该看到与通过 Google Play.

看到的错误相同的错误

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

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

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

@Keep

您的 class 名称前的注释 MemeViewModel.

例子,

@Keep
class MemeViewModel{
//
//
}