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

小米设备Android Navigation启动崩溃:找不到'navigation'导航器

解决Android Navigation在小米设备启动时的"Could not find Navigator with name 'navigation'"崩溃问题

问题根源

启用ProGuard后,Navigation框架的核心组件(如FragmentNavigator)被混淆或代码压缩移除,导致系统无法识别默认的"navigation"类型导航器。小米设备的MIUI ROM存在更激进的代码优化策略,因此该问题仅在部分小米设备上触发。

解决方案

1. 添加ProGuard混淆规则

在proguard-rules.pro中添加以下规则,保留Navigation相关的核心类与组件:

# 保留AndroidX Navigation框架核心类
-keep class androidx.navigation.** { *; }
-keep interface androidx.navigation.** { *; }

# 保留Material Design导航组件
-keep class com.google.android.material.navigation.** { *; }

# 保留Safe Args生成的类(若使用Safe Args)
-keep class *.*Args { *; }
-keep class *.*Directions { *; }

# 若有自定义Navigator,保留对应包下的类
-keep class com.yourpackage.navigators.** { *; }

2. 检查导航图与布局配置

确保布局中的NavHostFragment配置正确,无错误的导航器引用:

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:navGraph="@navigation/nav_graph"
    app:defaultNavHost="true" />

同时验证导航图nav_graph.xml中,所有目的地未错误指定自定义导航器名称(默认"navigation"对应FragmentNavigator)。

3. 统一Navigation依赖版本

确保项目中Navigation相关依赖版本一致,避免兼容性问题:

// 示例版本,请使用最新稳定版
implementation "androidx.navigation:navigation-fragment-ktx:2.7.7"
implementation "androidx.navigation:navigation-ui-ktx:2.7.7"

4. 针对MIUI的预初始化处理

部分MIUI设备会提前回收未被主动引用的类,可在Application中提前初始化Navigation核心类:

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        try {
            // 提前加载FragmentNavigator,防止被MIUI优化移除
            Class.forName("androidx.navigation.fragment.FragmentNavigator")
        } catch (e: ClassNotFoundException) {
            e.printStackTrace()
        }
    }
}

崩溃栈分析参考

典型崩溃栈如下,明确指向导航图解析时无法找到对应Navigator,与代码混淆/类未加载直接相关:

java.lang.IllegalStateException: Could not find Navigator with name "navigation". You must call NavController.addNavigator() for each navigation type.
at androidx.navigation.NavController.getNavigator(NavController.java:614)
at androidx.navigation.NavInflater.inflate(NavInflater.java:107)
at androidx.navigation.NavController.setGraph(NavController.java:696)
at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:279)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:3104)
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:40