Xamarin应用在调试模式下运行正常,但在发布模式下崩溃。

7
我的Xamarin应用在调试模式下运行完美,但在发布模式下崩溃了。我收到这个错误:“很抱歉,应用程序停止运行。” 我通过USB连接了我的手机,在发布模式下运行应用程序时收到此错误。
不幸的是,我无法在发布模式下调试应用程序,因为我在输出窗口中收到此消息:“Android 应用正在运行(在 Android 项目属性中禁用了调试)”,尽管“启用开发人员测试工具”框已被选中。我尝试了所有链接替代项None/SDK/SDK和User,但仍然无法解决问题。
是否有一种方法可以查看崩溃原因,例如日志文件或其他内容?

如果您能提供一个 [mcve],那将非常棒。 - mjwills
你可以在发布模式下打开调试。 - TheGeneral
无论如何,Android的logcat文件存储在哪里?这些logcat文件告诉你什么? - TheGeneral
在这里,因为第一次没有得到答案而再次问同样的问题是不被赞同的。https://stackoverflow.com/questions/49645888/xamarin-app-runs-on-emulator-but-crashes-on-real-device#49645888 - Frauke
我的问题是在其中一个页面中使用了错误的静态资源。 - zmovahedi
7个回答

8
经过几个小时的努力,我的情况是因为我在定义另一个资源之前从App.xaml文件中使用了静态资源。奇怪的是,它在调试模式下完美地运行,但出于某种原因,在发布模式下一直崩溃。定位问题后,我重新排列了声明,问题得以解决。
无论如何,你可以将MainActivity中的整个onCreate块包装在try catch块中,并将异常记录到某个地方,例如公共http请求日志记录器或写入到文件中。截至本次撰写,RequestBin 提供了这样的免费服务。创建端点后,只需向url发出带有异常消息作为数据的POST请求即可。这是一个例子:
protected override void OnCreate(Bundle bundle)
{
    try
    {
        // oncreate logic
    }
    catch(Exception ex)
    {
        var client = new HttpClient();
        client.PostAsync("your logger api url", new StringContent(ex.ToString())).Wait();
    }
}

希望这能对某些人有所帮助。


1
谢谢,我也在我的某个页面中使用了错误的静态资源,但为什么在调试模式下它能完美地工作呢?在这种情况下很难找到问题。 - zmovahedi
1
谢谢!两年后,这个程序仍然像魔法一样运行 :) - ThisQRequiresASpecialist

2

你可以尝试以下步骤:

  1. 手动卸载在Debug模式下部署的本地应用程序,并部署Release版本的应用程序。

  2. 更新Xamarin版本。

  3. 项目设置→ Android选项→链接器→配置= Release; 链接=仅SDK程序集。


我发现“Sdk和用户程序集”链接选项只会搞砸构建。当使用此选项时,我遇到了“无法实例化”的类和“未找到”的问题。将其设置为“仅Sdk”可以正常工作。很有趣,当Xamarin给你一个选项但它很少起作用。即使在2021年,这种情况仍然存在。 - Khoa Tran

1
请确保在发布配置中未选择共享Mono运行时enter image description here

我的问题只出现在真机的iOS发布模式上(不是模拟器),结果发现项目属性中的链接设置在调试模式和发布模式下是不同的。与上述原理相同。 - tkerwood

1

我在项目属性中将“发布”中的“优化代码”关闭了。 对我有用。


0
今天我也遇到了同样的问题。在尝试了多种配置和构建设置后,唯一有效的解决方案是通过 NuGet 包管理器更新所有 Xamarin 相关的包。下次您遇到这种情况时可以尝试这个方法。

0

实际上,对于我来说,清理解决方案、卸载应用程序和卸载API都很好用。


0
首先检查Android属性,看链接设置是否为none。
如果是的话,进入Android选项,进入高级设置,在支持的架构中选择所有选项,然后清理解决方案并重新构建一次。
这样解决了我在发布模式下的崩溃问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接