引入Navigation Components后开启minifyEnabled报FragmentContainerView inflate错误
排查方向
混淆规则校验
该问题仅在开启
minifyEnable后复现,优先检查混淆规则是否覆盖Navigation组件要求:- 在
proguard-rules.pro中添加官方推荐的混淆规则:
# Navigation 组件基础规则 -keep class * extends androidx.navigation.Navigator { *; } -keepnames class * implements android.os.Parcelable -keepclassmembers class * implements android.os.Parcelable { public static final ** CREATOR; } # 若使用Safe Args插件需额外添加 -keepnames class * extends androidx.navigation.NavArgs -keepclassmembers class * extends androidx.navigation.NavArgs { <init>(...); }- 检查业务层自定义Fragment是否被混淆重命名导致Navigation无法反射实例化,可临时给对应Fragment添加
@Keep注解验证,或添加规则保持所有导航用到的Fragment类不被混淆。 - 临时添加规则
-keep class androidx.navigation.fragment.NavHostFragment { *; }验证是否NavHostFragment类被混淆导致加载失败。
- 在
依赖一致性校验
- 检查所有Navigation相关依赖(
navigation-fragment-ktx、navigation-ui-ktx、Safe Args插件)的版本号完全一致,避免跨版本兼容问题。 - 执行
./gradlew :app:dependencies查看依赖树,排查是否有其他三方依赖间接引入了低版本的Fragment/Navigation包,排除版本冲突。
- 检查所有Navigation相关依赖(
资源裁剪校验
若同时开启了
shrinkResources true或使用了第三方资源混淆工具(如AndResGuard),检查导航图相关资源是否被误裁剪:- 临时关闭资源混淆验证问题是否消失。
- 若确认是资源裁剪导致,在
res/raw/keep.xml中添加规则保留导航图资源。
布局配置二次校验
检查布局中
FragmentContainerView的配置是否存在混淆后才会触发的问题:- 确认
android:name属性值为androidx.navigation.fragment.NavHostFragment,无拼写错误。 - 确认
app:navGraph属性指向的导航图资源正确,无资源id错位问题。
- 确认
内容的提问来源于stack exchange,提问作者William Hu
相关产品推荐
相关产品推荐

