You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose版Dessert Clicker启动崩溃,求调试排查思路

Android ViewModel迁移调试排查记录

我正在学习Google Android开发者的ViewModel与状态管理教程,完成将Dessert Clicker应用迁移至ViewModel的实验时遇到问题:应用启动即崩溃,Logcat中看不到MainActivity的onCreate()日志,在super.onCreate(...)处设置的断点也未触发,一度怀疑是APK配置存在根本性问题。我希望掌握这类问题的通用调试方法,而非直接依赖教程提供的解决方案。

第一步排查:设备选择错误

后续发现是调试设备选错了——选中了实体手机而非用于调试的AVD。切换到正确的AVD后,Logcat终于输出了完整的堆栈跟踪信息:

2024-01-11 11:11:11.119 12385-12385 AndroidRuntime          com.example.dessertclicker           E  FATAL EXCEPTION: main
                                                                                                    Process: com.example.dessertclicker, PID: 12385
                                                                                                    android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                                                        at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:234)
                                                                                                        at android.content.res.Resources.getValue(Resources.java:1439)
                                                                                                        at androidx.compose.ui.res.PainterResources_androidKt.painterResource(PainterResources.android.kt:61)
                                                                                                        at com.example.dessertclicker.MainActivityKt.DessertClickerScreen(MainActivity.kt:230)
...

错误定位与修复

堆栈信息明确指向资源调用错误:误用了UiState中的currentDessertImageId而非ViewModel对应的属性,导致传入了无效的资源ID(0x0)。通过以下代码修改解决问题:

diff --git a/AndroidBasicsCourse/DessertClicker/app/src/main/java/com/example/dessertclicker/MainActivity.kt b/AndroidBasicsCourse/DessertClicker/app/src/main/java/com/example/dessertclicker/MainActivity.kt
index 6dffdf0..a9599ee 100644
--- a/AndroidBasicsCourse/DessertClicker/app/src/main/java/com/example/dessertclicker/MainActivity.kt
+++ b/AndroidBasicsCourse/DessertClicker/app/src/main/java/com/example/dessertclicker/MainActivity.kt
@@ -164,7 +164,7 @@ private fun DessertClickerApp(
         DessertClickerScreen(
             revenue = dessertClickerUiState.revenue,
             dessertsSold = dessertClickerUiState.dessertsSold,
-            dessertImageId = dessertClickerUiState.currentDessertImageId,
+            dessertImageId = dessertClickerViewModel.currentDessertImageId,
             onDessertClicked = {
                 dessertClickerViewModel.updateRevenue()
                 dessertClickerViewModel.updateDessertsSold()

通用调试排查思路

针对此类启动崩溃且无关键日志的问题,可按以下步骤排查:

  • 确认调试目标设备:检查是否选中了正确的调试设备(AVD/实体机),确保设备已正确连接、开发者模式已开启,且应用已成功安装到目标设备。
  • 查看完整Logcat日志:切换到正确设备后,筛选对应应用包名的日志,重点关注AndroidRuntime标签下的错误信息,通过堆栈跟踪定位到具体代码行。
  • 验证资源与数据状态:若出现Resources$NotFoundException,检查传入的资源ID是否有效,确认数据来源(如ViewModel/UiState)是否正确初始化了资源属性。
  • 断点调试验证:确保断点设置在正确的代码位置,且调试器已成功附加到目标进程,可通过重启调试会话、清理项目后重新编译安装来解决断点不触发的问题。

感谢@a_local_nobody的帮助!

内容的提问来源于stack exchange,提问作者Alexandru Gheorghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:25:13