我正在开发一个应用程序,每次运行它时,我都会收到这样的消息:
不幸的是,MyApp已停止。
我可以做什么来解决这个问题?
关于这个问题-显然是受什么是堆栈跟踪以及如何使用它调试应用程序错误的启发?,有很多问题表明他们的应用程序已经崩溃,没有任何进一步的细节。这个问题旨在指导Android新手程序员如何自己解决问题,或者提出正确的问题。
我正在开发一个应用程序,每次运行它时,我都会收到这样的消息:
不幸的是,MyApp已停止。
我可以做什么来解决这个问题?
关于这个问题-显然是受什么是堆栈跟踪以及如何使用它调试应用程序错误的启发?,有很多问题表明他们的应用程序已经崩溃,没有任何进一步的细节。这个问题旨在指导Android新手程序员如何自己解决问题,或者提出正确的问题。
当前回答
在终端中运行此命令也有助于查找问题:
gradlew build > log.txt 2>details.txt
然后您应该转到gradlew文件位置,读取上面的两个日志文件。
其他回答
Logcat-在Android Studio的开发阶段检查日志
最初清除Logcat并让应用程序再次崩溃,这样您只能获得崩溃的日志详细信息。你必须检查堆栈跟踪
不幸的是,MyApp已停止。这有很多原因。你可以在日志中查看。为此,您可以使用Log.e(“标签”、“消息”);
应用程序崩溃期间的常见错误,如:
编码错误(错误使用关键字)。属性名称不匹配。不支持的插件(可能)。版本不匹配(可能)。AndroidManifest文件中缺少活动。AndroidManifest文件中缺少权限。最常见的NullPointerException。已声明但未定义。
要解决应用程序崩溃错误:
记住以上几点并仔细阅读。出现错误后,您将获得蓝色的文件名(单击它们并跳转到发生错误的代码)。
让我分享一下当你遇到强制关闭时(当应用程序停止工作时)的基本Logcat分析。
DOCS
Android收集/分析日志的基本工具是logcat。
这里是Android关于logcat的页面
如果你使用android Studio,你也可以检查这个链接。
捕获
基本上,您可以使用以下命令手动捕获logcat(或者只需检查AndroidStudio中的AndroidMonitor窗口):
adb logcat
有很多参数可以添加到命令中,帮助您筛选和显示所需的消息。。。这是个人的。。。我总是使用下面的命令来获取消息时间戳:
adb logcat -v time
您可以将输出重定向到文件并在文本编辑器中分析它。
正在分析
如果你的应用程序正在崩溃,你会得到类似的结果:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
日志的这一部分向您展示了许多信息:
问题发生时间:07-09 08:29:13.475
检查问题发生的时间很重要。。。您可能会在日志中发现几个错误。。。您必须确保正在检查正确的消息:)
哪个应用程序崩溃了:com.example.khan.abc
这样,您就知道哪个应用程序崩溃了(以确保您正在检查有关消息的日志)
哪个错误:java.lang.NullPointerException
NULL指针异常错误
有关错误的详细信息:尝试对空对象引用调用虚拟方法“void android.support.v4.app.FrageActivity.onBackPressed()”
您试图从FragmentActivity对象调用方法onBackPressed()。然而,当您这样做时,该对象为空。
堆栈跟踪:堆栈跟踪显示方法调用顺序。。。有时,错误发生在调用方法中(而不是在被调用方法中)。在com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
文件com.example.kan.abc.AudioFragment.java中发生错误,位于onClick()方法的第125行(stacktrace显示发生错误的行)
它由以下人员调用:
at android.view.View.performClick(View.java:4848)
由以下人员调用:
at android.view.View$PerformClick.run(View.java:20262)
由以下人员调用:
at android.os.Handler.handleCallback(Handler.java:815)
等
概述
这只是一个概述。。。并非所有的日志都很简单,但错误给出了特定的问题,详细信息显示了所有问题。。。它只是为了分享这个想法并向您提供入门级信息。。。
我希望我能帮助你。。。当做
如果你的应用程序没有任何错误地崩溃,并且你没有使用资产管理器,而是加载了如下纹理:
Texture texture = new Texture("myImage.png"); //dont to this all the time
那就是问题所在。我也遇到过这种情况。你应该经常使用资产管理器来避免内存过载。
如果您的终端中没有任何有趣的日志(或者它们与您的应用程序没有直接关联),那么您的问题可能是由于本地库。在这种情况下,您应该检查终端中的“墓碑”文件。
逻辑删除文件的默认位置取决于每个设备,但如果是这样的话,则会有一个日志告诉您:逻辑删除已写入:/data/botobs/逻辑删除_06
有关详细信息,请查看https://source.android.com/devices/tech/debug.
检查您的Logcat消息。此外,请参阅Manifest文件以查找缺少的元素,如定义“活动”、用户权限等。
若要查看Logcat,如果您使用Android Studio,请按alt+6或
如果您使用Eclipse,那么窗口->打开透视->其他-LogCat
现在,从下拉菜单中选择error。
或者,您可以使用ADB工具获取Logcat文件来分析问题。
adb logcat > logcat.txt
现在打开logcat.txt文件并搜索应用程序名称。应该提供失败原因、行号、类名等信息。