MAUI模板项目闪退问题

MAUI模板项目闪退问题

MAUI最初发布的时候就曾创建过几个模板项目进行体验过,没遇到什么坑。由于最近需要开发针对餐饮行业的收银机(安卓系统)开发一款应用,这种收银机一般配置不咋滴,系统版本和性能也肯定比不上我们自己使用的手机。在做技术选型时首先想到了MAUI,备选Flutter,React Native。都是大厂维护的跨平台应用框架,在使用MAUI框架时遇到新建的模板应用居然启动时直接闪退,最终也是解决了这个闪退问题,遂分享下这一经历。

创建项目

演示创建项目过程,所有流程都是IDE默认,不做任何修改。

新建MAUI模板项目

用VS新建MAUI模板项目,如下

5203f529e8785b588ba96ed29583d78b.png项目名也默认为MauiApp1ca5041e04d0662cc36d2ca1c7bb4fb6a.png

连接设备

  • 通过USB连接目标安卓设备

  • 目标设备开启开发者模式,然后开启usb调试(自行百度必应/谷歌)

  • 手机上切换usb调试的模式,一般会出现 仅充电,文件传输。。。,简单粗暴地切换各种选项,当VS列出了你的设备就可以了。

8e81c7be553ad29e2464133120cbc5dd.png

调试项目

  • 完成上一步的设备连接,直接在debug模式下启动项目

9e87c89e3a9ab87772a087b8edc35a25.png

等待一会,可以在设备上看到应用已经安装了,按说应该会被自动打开,等了好久也没动静,VS的输出窗口也不再有新的内容输出了

0bb42f06d888a5ff485ea1c1ad3f90e8.png

手动点击设备上的安装好的MauiApp1应用,然后刚看到启动页面一个大大的.NET标志,随后来了个 Maui1已停止运行

0238f18b6a22110f7654d58b0013a4ee.png

解决闪退问题

以前也做过使用android studio开发过原生安卓应用,一般这种问题都能在IDE有错误输出,可以通过错误信息找到闪退原因。

回顾刚才这个问题,不知道去哪里查看日志,这该怎么去看闪退的原因呢,要是VS能像android studio那样可以查看详细的日志就好了,目前我还不知道是否有地方能看详细的debug日志。我选择了一种比较通用的排查错误的方式:adb工具。

有关adb不做介绍,读者如有疑问自行百度必应/谷歌,你只需要知道他是用来调试安卓应用的一个强大工具即可。

下面的流程需要你将adb目录添加到环境变量PATH中,方可全局使用adb命令。

常用命令

adb命令查看列出手机装的所有 app 的包名:

adb shell pm list packages

列出系统应用的所有包名:

adb shell pm list packages -s

列出除了系统应用的第三方应用包名:

adb shell pm list packages -3

推测一个包中可能带有的关键字:

adb shell dumpsys activity | findstr mFocusedActivity

清除应用数据与缓存

adb shell pm clear 应用包名

查看日志

adb logcat

V:详细(最低优先级) D:调试 I:信息 W:警告 E:错误 F:严重 S:静默(最高优先级,未曾输出过任何内容)

找到我们要看的日志

  • 确认adb能识别到你的设备

$ adb devices
List of devices attached
1234567890ABCDEF        device
  • 找出我们的包名

$ adb shell pm list packages -3
....
package:com.landi.print.service
package:com.companyname.mauiapp1
....

包名为:com.companyname.mauiapp1

  • 使用logcat

直接运行adb logcat能看到设备的所有日志,会对我们的排查造成干扰,我们只需要查看package:com.companyname.mauiapp1的日志 可以使用grep进行过滤,这个在在windows的命令行工具都不支持,我使用的是GitBashshell命令行工具,可以使用这一功能。

adb logcat | grep com.companyname.mauiapp1

这样就只会输出mauiapp1的日志了。执行上面的命令后,点击mauiapp1应用图标启动应用,得到我们应用启动到崩溃的所有日志如下:

06-16 10:21:11.953  1424  1424 D Launcher2.2.10: flow not clicked com.companyname.mauiapp1crc64e632a077a20c694c.MainActivity
06-16 10:21:11.953  1424  1424 D Launcher2.2.10: flow click desktop com.companyname.mauiapp1crc64e632a077a20c694c.MainActivity
06-16 10:21:11.953   424   466 I ActivityManager: START u0 {act=android.intent.action.MAIN flg=0x10200000 cmp=com.companyname.mauiapp1/crc64e632a077a20c694c.MainActivity} from uid 10072
06-16 10:21:11.958   424   466 E ActivityManager: getPackageFerformanceMode--ComponentInfo{com.companyname.mauiapp1/crc64e632a077a20c694c.MainActivity}----com.companyname.mauiapp1
06-16 10:21:11.967   424  1456 E ActivityManager: getPackageFerformanceMode--ComponentInfo{com.companyname.mauiapp1/crc64e632a077a20c694c.MainActivity}----com.companyname.mauiapp1
06-16 10:21:11.987   424  1456 I ActivityManager: Start proc 19415:com.companyname.mauiapp1/u0a97 for activity com.companyname.mauiapp1/crc64e632a077a20c694c.MainActivity
06-16 10:21:12.173 19415 19415 D debug-app-helper: Checking if libmonodroid was unpacked to /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonodroid.so
06-16 10:21:12.173 19415 19415 D debug-app-helper: Native libs extracted to /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm, assuming application/android:extractNativeLibs == true
06-16 10:21:12.173 19415 19415 D debug-app-helper: Added filesystem DSO lookup location: /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm
06-16 10:21:12.173 19415 19415 W debug-app-helper: Using runtime path: /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm
06-16 10:21:12.173 19415 19415 W debug-app-helper: checking directory: `/data/user/0/com.companyname.mauiapp1/files/.__override__/lib`
06-16 10:21:12.173 19415 19415 W debug-app-helper: directory does not exist: `/data/user/0/com.companyname.mauiapp1/files/.__override__/lib`
06-16 10:21:12.173 19415 19415 W debug-app-helper: Checking whether Mono runtime exists at: /data/user/0/com.companyname.mauiapp1/files/.__override__/libmonosgen-2.0.so
06-16 10:21:12.173 19415 19415 W debug-app-helper: Checking whether Mono runtime exists at: /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonosgen-2.0.so
06-16 10:21:12.173 19415 19415 I debug-app-helper: Mono runtime found at: /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonosgen-2.0.so
06-16 10:21:12.192 19415 19415 W monodroid: Creating public update directory: `/data/user/0/com.companyname.mauiapp1/files/.__override__`
06-16 10:21:12.198 19415 19415 F monodroid: No assemblies found in '/data/user/0/com.companyname.mauiapp1/files/.__override__' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting...
06-16 10:21:12.275 19433 19433 F DEBUG   : pid: 19415, tid: 19415, name: nyname.mauiapp1  >>> com.companyname.mauiapp1 <<<
06-16 10:21:12.284 19433 19433 F DEBUG   : Abort message: 'No assemblies found in '/data/user/0/com.companyname.mauiapp1/files/.__override__' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting...'
06-16 10:21:12.288 19433 19433 F DEBUG   :     #01 pc 0001b08b  /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonodroid.so (xamarin::android::internal::MonodroidRuntime::create_domain(_JNIEnv*, xamarin::android::jstring_array_wrapper&, bool, bool)+282)
06-16 10:21:12.288 19433 19433 F DEBUG   :     #02 pc 0001c08f  /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonodroid.so (xamarin::android::internal::MonodroidRuntime::create_and_initialize_domain(_JNIEnv*, _jclass*, xamarin::android::jstring_array_wrapper&, xamarin::android::jstring_array_wrapper&, _jobjectArray*, xamarin::android::jstring_array_wrapper&, _jobject*, bool, bool, bool)+26)
06-16 10:21:12.288 19433 19433 F DEBUG   :     #03 pc 0001d2c5  /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonodroid.so (xamarin::android::internal::MonodroidRuntime::Java_mono_android_Runtime_initInternal(_JNIEnv*, _jclass*, _jstring*, _jobjectArray*, _jstring*, _jobjectArray*, _jobject*, _jobjectArray*, int, unsigned char, unsigned char)+4020)
06-16 10:21:12.288 19433 19433 F DEBUG   :     #04 pc 0001d55f  /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/lib/arm/libmonodroid.so (Java_mono_android_Runtime_initInternal+50)
06-16 10:21:12.288 19433 19433 F DEBUG   :     #05 pc 0005282f  /data/app/com.companyname.mauiapp1-Wpq5srmqUiNM5498jRmH8Q==/oat/arm/base.odex (offset 0x2e000)
06-16 10:21:12.905   424 19434 W ActivityManager:   Force finishing activity com.companyname.mauiapp1/crc64e632a077a20c694c.MainActivity
06-16 10:21:12.916   424   451 I ActivityManager: Showing crash dialog for package com.companyname.mauiapp1 u0
06-16 10:21:12.976   424   877 I ActivityManager: Process com.companyname.mauiapp1 (pid 19415) has died: fore TOP

我们只关注日志级别为F,E的即可:下面错误信息说明了程序挂掉的原因

06-16 10:21:12.198 19415 19415 F monodroid: No assemblies found in '/data/user/0/com.companyname.mauiapp1/files/.__override__' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting...
06-16 10:21:12.275 19433 19433 F DEBUG   : pid: 19415, tid: 19415, name: nyname.mauiapp1  >>> com.companyname.mauiapp1 <<<
06-16 10:21:12.284 19433 19433 F DEBUG   : Abort message: 'No assemblies found in '/data/user/0/com.companyname.mauiapp1/files/.__override__' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting...'

接下来就可以发挥我们程序员的重要技能之一:百度谷歌,能不能搜索正确的答案就看造化了。

看来笔者有点东西,谷歌到了一个类似的案例:https://stackoverflow.com/questions/42336546/xamarin-android-application-crashed-after-clear-data-in-settings

有兴趣的去深究下,这里xamarin的解决办法是关闭 Use Fast Deployment

修改项目配置

23ca5f34b625a2f83efa0b5d545e27a9.png经过仔细查看属性配置文件,找到这个配置与stackoverflow的上说的关闭 Use Fast Deployment极其相似,应该就是它了,关闭它再次使用VS以debug模式启动项目。

这次经过稍微漫长的过程,也执行到Found device: 1234567890ABCDEF不动了

01b88fda476a99f610099f0971c36894.png

手动打开App,没任何效果。

卸载Mauiapp1重试

虽然上一步改了没效果,但我坚信应该就是这样,所以卸载app再试试,排除干扰因素。

ac488557485e70d18ca01270ed7b6d0e.png

Found device: 1234567890ABCDEF之后不再卡住不动了 随后我的设备上也安装并自动打开了Mauiapp1并且没有闪退!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真正CSDN博客文章一键转载插件(含源码)

插件地址&#xff1a;https://greasyfork.org/zh-CN/scripts/381053-csdn%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E8%BD%AC%E8%BD%BD%E6%8F%92%E4%BB%B6 插件安装使用说明请参阅&#xff1a;https://greasyfork.org/zh-CN 文章阅读界面 文章发布页面 源代码 // UserScript //…

Kotlin之集合排序(sortBy、sortByDescending)

1、Kotlin的集合排序 如果我们需要对一个集合里面的某个对象的一个字段进行排序,java的话需要实现一个比较器Comparator,Kotlin的针对集合里面的某个对象的一个字段进行排序非常简单,一行代码搞定。 2、sortBy方法、sortByDescending方法 1)、sortBy升序排列 2)、sortBy…

限制nginx仅能域名访问,不可用ip访问

在nginx.conf 文件里 初始时是&#xff1a; 12345server {listen 80 default_server; server_name www.lnmp.org; ... }修改成 12345server {listen 80; server_name yoursDomainName; #这里是你自己指定的域名 ... }再在上个server后继续添加一段&#xff1a; 12345server …

getElementByClassName()不兼容的解决办法

在获取元素时候采用getElementByClassName()方法是比较方便的&#xff0c;但是对于IE6不兼容&#xff0c;可以采用以下代码来自定义这个方法&#xff1a; window.οnlοadfunction(){ if(!document.getElementByClassName){ document.getElementByClassNamefunction(cls){ var …

学习C语言指针,这一篇案例教程就够够的了

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。 一个优秀的程序员最爱玩的就是指针! 通过本文10个案例的学习,你会对C语言指针的来龙去脉做一个全面的学习,直接用于实战开…

阻塞队列BlockingQueue用法

多线程环境中&#xff0c;通过队列可以很容易实现数据共享&#xff0c;比如经典的“生产者”和“消费者”模型中&#xff0c;通过队列可以很便利地实现两者之间的数据共享。 假设我们有若干生产者线程&#xff0c;另外又有若干个消费者线程。如果生产者线程需要把准备好的数据共…

C语言试题六十六之请编写函数实现三个数从小到大排序

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 对a、b、c…

微软欲闭源VS Code的C#扩展惹众怒

VS Code 是一个非常棒的代码编辑器&#xff0c;轻量&#xff0c;免费&#xff0c;跨平台。并且凭其丰富且强大的扩展功能受到众多开发者的青睐&#xff0c;你可以在上面愉快的进行各种语言的开发工作。就在前两天&#xff0c;微软的 .NET 和 Visual Studio 的项目经理 Tim Heue…

Python3.6学习笔记(三)

面向对象编程 面向对象编程 Object Oriented Programming 简称 OOP&#xff0c;是一种程序设计思想。OOP把对象作为程序的基本单元&#xff0c;一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合&#xff0c;即一组函数的顺序执行。为…

EnumMap

什么是EnumMap Map接口的实现&#xff0c;其key-value映射中的key是Enum类型&#xff1b; 补充说明 其原理就是一个对象数组&#xff0c;数组的下标索引就是根据Map中的key直接获取&#xff0c;即枚举中的ordinal值&#xff1b; 效率比HashMap高&#xff0c;可以直接获取数组下…

【CSS动效实战(纯CSS与JS动效)】03 精美手风琴侧边栏完整示例教程 示例1

本节示例演示&#xff1a; 一、基本布局 一般来说&#xff0c;侧边栏的位置是在左侧&#xff0c;咱们为了更好的展现侧边栏的效果&#xff0c;并且在本节中不涉及过多的内容&#xff0c;我们只需要直接给一个 div 宽度为 15即可&#xff0c;接着再到这个 div 中编写对应的侧…

ArcGIS实验教程——实验三十二:ArcGIS水文分析(流向分析、计算水流长度、汇流分析、河网分析、流域分析)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、流向分析1. 水流方向计算方法2. 原始DEM流向分析3. 洼地判定4. 洼地填充5. 无洼地DEM流向分析二、计算水流长度三、汇流分析四、河网分析五、流域分析水文分析是数字地形分析的一个重…

C语言试题六十七之请编写函数实现水仙花数

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 输出所有“…

Yii框架操作方法

1.yii数据查询a.使用CDbCriteria数据查询$attributes array();$criteria new CDbCriteria;//$criteria->selectamount; $criteria->conditionuser_id:user_id;$criteria->paramsarray(:user_id>18889195);$DwCouponModel new Coupon();$cla***esult $DwCoupon…

Windows 服务 同时启动多个服务

Windows 服务 同时启动多个服务独立观察员 2019.02.26最近需要开发 Windows Service 程序&#xff0c;之前没有接触过&#xff0c;所以把了解到的一些东西记录下来。Windows 服务程序可以简单理解为需要长时间在后台运行&#xff0c; 而又不需要界面显示的程序&#xff0c;在计…

Python3.6学习笔记(四)

错误、调试和测试 程序运行中&#xff0c;可能会遇到BUG、用户输入异常数据以及其它环境的异常&#xff0c;这些都需要程序猿进行处理。Python提供了一套内置的异常处理机制&#xff0c;供程序猿使用&#xff0c;同时PDB提供了调试代码的功能&#xff0c;除此之外&#xff0c;…

如何恢复master数据库

今天&#xff0c;重装Sql2000数据库后&#xff0c;在恢复master数据库时出现了错误&#xff0c;提示为“当试图还原master数据库时&#xff0c;必须以单用户模式使用restoredatabase,restore database操作异常终止”。在网上搜索了一下&#xff0c;发现了一篇介绍比较详细的&am…

一、基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》

这个系列是 solidity8.版本的教程&#xff0c;既然学习了 solidity 就应该明白智能合约是啥&#xff0c;在此系列文章中将不赘述基础概念&#xff0c;只讲解对应的语法&#xff0c;希望读者理解。 环境 solidity 版本&#xff1a;8.(2022年9月8日 最新版本) IDE&#xff1a;h…

遥感空间尺度转换技术(升尺度和降尺度)

遥感图像的一个基本特征是空间分辨率。目前已经可以有效获取大量不同空间分辨率遥感数据。 尺度和尺度转换已经成为遥感的核心问题之一,人们已经从不同角度提出了这一问题。尺度转换分为两种: 升尺度:从高分辨率到低分辨率的转换;降尺度:从低分辨率到高分辨率的转换。文章…

linux command1

#列出指定用户&#xff08;当前用户&#xff09;的组信息 groups #将指定的用户添加(-a&#xff09;到指定的组内&#xff08;改组必须已经存在&#xff09;或指定用户从指定的组中删除&#xff08;-d&#xff09; gpasswd –a/-d username groupname #添加组 groupadd grou…