配置safeArgs触发nav_graph inflate RuntimeException如何排查
异常说明
运行时抛出异常:RuntimeException: Exception inflating kotlin:navigation/nav_graph
异常触发场景:在navigation graph(导航图)中添加SafeArgs配置时出现崩溃,崩溃日志未提供更多可用于定位修复的有效指引。已按照开发规范校验相关类是否添加@Parcelize注解,确认所有相关类均已正确完成序列化配置,各项配置看似均符合要求,但崩溃问题仍可复现。
排查方向与解决方案
- 校验组件版本与插件匹配性
项目级构建文件中配置的SafeArgs插件版本,必须与app模块内引入的navigation-fragment、navigation-ui依赖版本完全一致,小版本号不匹配也会导致导航图解析失败,且不会输出明确的版本不匹配日志。Kotlin项目需使用androidx.navigation.safeargs.kotlin插件,禁止错用Java版本的androidx.navigation.safeargs插件。 - 校验导航图XML参数配置合法性
逐节点检查nav_graph.xml内所有<argument>配置:- 自定义Parcelable/Serializable类型参数需核对
app:type属性填写的全限定类名,类名拼写错误、漏写包名、混淆后类名变更都会导致类加载失败触发inflate异常,Android Studio自动补全偶尔会出现漏填包名的问题,需手动核对。 - 参数默认值需与声明类型匹配,禁止给基础类型参数传不兼容格式的默认值;若Parcelable类型参数默认值设为null,必须同步添加
app:nullable="true"配置,这类语法错误不会在编译期被AS标记,会直接触发运行时崩溃。
- 自定义Parcelable/Serializable类型参数需核对
- 校验混淆规则配置
若debug版本运行正常、release版本触发崩溃,优先排查混淆规则:- 新增规则保留所有Parcelable序列化类:
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } - 新增规则保留Navigation组件相关类与SafeArgs生成类:
-keep class androidx.navigation.** { *; } -keep class **.Directions { *; } -keep class **.Args { *; }
- 新增规则保留所有Parcelable序列化类:
- 校验多模块依赖合法性
多模块项目需确认导航图中引用的跨模块参数类所在模块已通过implementation/api方式正确引入,禁止使用compileOnly方式引入导致运行时类找不到;若使用<include>标签嵌套其他模块的导航图,需确认嵌套导航图的id、参数定义无重名冲突。 - 清理损坏的构建缓存
SafeArgs注解处理器生成的中间类缓存损坏也会触发该问题,可按以下步骤清理重建:- 关闭Android Studio
- 删除项目根目录下的
.gradle、.idea文件夹,删除各模块下的build文件夹 - 执行命令
./gradlew clean build(Windows环境执行gradlew.bat clean build)重新构建项目 - 重启Android Studio后重新运行验证
内容的提问来源于stack exchange,提问作者Majid Khosravi
相关产品推荐
相关产品推荐

