升级Android 31后遇Failed resolution of: Landroidx/startup/R$string错误求助
androidx/startup/R$string找不到问题 针对多模块项目升级到API 31后出现的java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/startup/R$string;异常,以下是几个实用的解决步骤:
统一所有模块的androidx.startup依赖版本
多模块项目容易出现不同模块依赖不同版本的startup库,导致资源合并冲突。在项目根目录的build.gradle中定义统一版本:ext { startup_version = "1.1.1" }然后所有模块的依赖都使用这个统一版本:
implementation "androidx.startup:startup-runtime:$startup_version"执行
./gradlew app:dependencies查看依赖树,排除掉任何冲突的旧版本依赖。禁用Startup库的自动初始化(如果不需要)
如果你的项目没有用到Startup的自动初始化功能,直接在AndroidManifest.xml中移除InitializationProvider:<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />这样系统就不会尝试初始化该Provider,从而跳过对
androidx.startup.R$string的加载。检查多Dex配置
API 31下Dex打包规则有变化,确保开启多Dex支持:
在app模块的build.gradle中添加:android { defaultConfig { multiDexEnabled true } } dependencies { implementation "androidx.multidex:multidex:2.0.1" }执行
./gradlew clean清理缓存后重新编译项目。检查资源合并设置
确认没有模块的配置排除了startup的资源,比如android.resourcePrefix或者资源过滤规则。可以在app模块的build.gradle中添加资源配置,确保包含startup资源的语言:android { resourceConfigurations += ["en"] // 根据项目支持的语言调整 }升级Android Gradle Plugin和Gradle版本
旧版本的AGP与API 31兼容性较差,建议升级到AGP 7.0以上版本,对应Gradle 7.0以上版本,确保编译工具链适配API 31的要求。
内容的提问来源于stack exchange,提问作者charitha amarasinghe

