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.pswp.cn/news/285930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285930.shtml
英文地址,請注明出處:http://en.pswp.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…