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

迁移至非传递R-Classes后导航参数编译错误求助

非传递R-Classes下导航参数编译错误的解决办法

问题原因

开启android.nonTransitiveRClass=true后,Android会隔离各模块的R类,旧版本Navigation组件生成NavArgs代码时,仍直接使用R.string.xxx的写法,未适配非传递R类的隔离规则,导致无法解析string引用;另外如果资源来自其他依赖模块,未明确模块前缀也会触发该错误。

解决步骤

  • 升级Navigation组件版本:
    导航组件从2.5.0版本开始完善了对非传递R类的支持,直接升级到最新稳定版(如2.7.5)即可修复自动生成代码的R类引用问题。更新依赖配置示例:

    // 在build.gradle或version catalog中更新版本
    navigationVersion = "2.7.5"
    implementation "androidx.navigation:navigation-fragment-ktx:$navigationVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$navigationVersion"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
    
  • 明确跨模块资源的引用前缀:
    如果@string/myString来自其他依赖模块(比如名为base的基础模块),修改导航参数的defaultValue为带模块前缀的格式:

    <argument
            android:name="title"
            android:defaultValue="@base:string/myString"
            app:argType="reference" />
    

    此时生成的NavArgs代码会自动使用对应模块的R类(如BaseR.string.myString),避免跨模块R类引用错误。

  • 清理重建项目:
    修改完成后,执行Clean Project再Rebuild Project,或用命令行./gradlew clean assembleDebug清除旧构建缓存,确保新的代码生成逻辑生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:27