关于后端:MAUI模板项目闪退问题

50次阅读

共计 6988 个字符,预计需要花费 18 分钟才能阅读完成。

MAUI 模板我的项目闪退问题

MAUI 最后公布的时候就曾创立过几个模板我的项目进行体验过,没遇到什么坑。因为最近须要开发针对餐饮行业的收银机(安卓零碎)开发一款利用,这种收银机个别配置不咋滴,零碎版本和性能也必定比不上咱们本人应用的手机。在做技术选型时首先想到了 MAUI,备选Flutter,React Native。都是大厂保护的跨平台利用框架,在应用MAUI 框架时遇到新建的模板利用竟然启动时间接闪退,最终也是解决了这个闪退问题,遂分享下这一经验。

创立我的项目

演示创立我的项目过程,所有流程都是 IDE 默认,不做任何批改。

新建 MAUI 模板我的项目

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


我的项目名也默认为MauiApp1

连贯设施

  • 通过 USB 连贯指标安卓设施
  • 指标设施开启开发者模式,而后开启 usb 调试(自行 百度 必应 / 谷歌)
  • 手机上切换 usb 调试的模式,个别会呈现 仅充电,文件传输。。。,简略粗犷的切换各种选项,当 VS 列出了你的设施就能够了。

调试我的项目

  • 实现上一步的设施连贯,间接的 debug 模式下启动我的项目

期待一会,能够在设施上看到利用曾经装置了,按说应该会被主动关上,等了良久也没动静,VS 的输入窗口也不在有新的内容输入了

手动点击设备上的装置好的 MauiApp1 利用,而后刚看到启动页面一个大大的.NET 标记,随后来了个 Maui1 已进行运行

解决闪退问题

以前也做过应用 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/que…

有趣味的去深究下,这里 xamarin 的解决办法是敞开 Use Fast Deployment

批改我的项目配置


通过认真查看属性配置文件,找到这个配置与 stackoverflow 的上说的敞开 Use Fast Deployment极其类似,应该就是它了,敞开它再次应用 VS 以 debug 模式启动我的项目。

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

手动关上 App,没任何成果。

卸载 Mauiapp1 重试

尽管上一步改了没成果,但我深信应该就是这样,所以卸载 app 再试试,排除烦扰因素。

Found device: 1234567890ABCDEF之后不在卡住不动了
随后我的设施上也装置并主动关上了 Mauiapp1 并且没有闪退!

本文由 mdnice 多平台公布

正文完
 0