如何调试仅在发布模式下崩溃的Android应用

时间:2018-08-14 14:26:55

标签: android xamarin entity-framework-core android-8.1-oreo

一切都在调试模式下运行,但在发布模式下崩溃。在调试模式下可用的哪些必需权限未在发布模式下打开?

编辑

当我将“链接”设置为“无”时,我会从第一个屏幕转到“登录”屏幕。但是,当我添加“释放”权限Internet时,它第一次尝试读取远程Entity Framework Core表时会崩溃。

编辑2

在发布模式下,如果我选中Use Shared Runtime,则该应用可以正常运行。

编辑3

在释放模式下,我暂时打开了调试功能。以下行仅在发布模式下引发System.TypeInitializationException:

if (_context.bma_users.Any(p => p.username == _name.Text) && _name.Text != string.Empty)

7 个答案:

答案 0 :(得分:10)

假设您拥有Android Studio,并且未实现崩溃报告服务(FirebaseCrashlytics等)

您可能要先查看崩溃日志打印

  • 在Android Studio中打开Logcat
  • Log Level更改为Error
  • 确保已在设备上启用USB debugging
  • 将设备连接到计算机。
  • 使应用程序崩溃并查看其打印内容。

如果您无法复制

下次崩溃时,请连接设备并执行与上述相同的操作。通常,可以查看日志历史记录,滚动直到找到崩溃:)

寻找FATAL EXCEPTION

  • 请紧记-使用Logcat搜索栏可以清除日志历史记录,在大多数情况下,您可以重新连接设备以再次查看它。

答案 1 :(得分:4)

您已经假设“权限”,不确定为什么...

我只有在发布模式下崩溃时才禁用的第一件事是缩小(aka ProGuard)。因此,请禁用混淆功能,然后再次构建并尝试查看是否仍然崩溃。如果没有,则一次重新启用proguard一行以查明原因。

答案 2 :(得分:1)

答案是在WestAndroid Options屏幕上将Project Properties设置为select max(case when year = 2016 then id end) as id_2016, max(case when year = 2017 then id end) as id_2017, max(case when year = 9999 then id end) as id_9999 from (select t.*, row_number() over (partition by year order by id) as seqnum from dbo.ExampleTable t ) t group by seqnum order by seqnum; 。似乎没有什么关系,但我尝试了所有可能的组合,终于奏效了。

答案 3 :(得分:1)

您只需为debuggable: true构建类型设置release。 完成调试后,请不要忘记删除此属性。

答案 4 :(得分:0)

您可以使用任何 crashlytics工具,例如Firebase Analytics,Fabric,Splunk Mint来获取确切的崩溃日志

答案 5 :(得分:0)

转到android部分的属性,然后进入Android选项标签。

确保在发布配置中未选中“使用共享的运行时”和“使用快速部署”框

Properties page

答案 6 :(得分:0)

使用FCM和Fabric进行崩溃处理,它们提供崩溃报告中的所有内容,甚至是应用程序崩溃时的代码行数。用这个开心吧