React Native集成CodePush Android构建报错:Duplicate Resources求助
问题成因
- CodePush Android插件会自动通过Gradle生成
gradleResValues.xml文件,并将配置的DeploymentKey写入为资源项 - 你同时在
strings.xml中手动添加了同名的CodePushDeploymentKey资源,导致打包阶段资源合并时冲突 - 删除
strings.xml中的条目后出现R类不存在错误,通常是因为项目代码里仍在直接引用R.string.CodePushDeploymentKey,但Gradle自动生成的资源不会被包含在默认的R类引用路径里,或者构建缓存未清理导致R类未重新生成
安全修复方案
1. 移除重复资源并修正代码引用
- 彻底删除
strings.xml中所有包含CodePushDeploymentKey的条目 - 遍历项目中所有引用该资源的代码(比如Java/Kotlin文件、React Native原生模块调用),将
R.string.CodePushDeploymentKey替换为BuildConfig.CODEPUSH_DEPLOYMENT_KEY——CodePush插件会自动在BuildConfig中生成这个常量,无需手动维护 - 如果必须保留资源引用方式,可确认Gradle生成的资源命名(通常和手动配置的一致),但更推荐用BuildConfig,避免资源冲突风险
2. 清理构建缓存
- 执行Gradle清理命令:
./gradlew clean # macOS/Linux gradlew clean # Windows - 清除React Native缓存:
npx react-native clean - 若使用Android Studio,重启IDE并同步Gradle文件,避免缓存残留
3. 验证CodePush Gradle配置
打开android/app/build.gradle,确认CodePush配置仅通过Gradle插件注入,示例配置如下:
apply plugin: 'com.microsoft.codepush' codepush { deploymentKey = "你的部署密钥" // 其他可选配置:比如targetBinaryVersion等 }
确保没有在AndroidManifest.xml中手动添加如下meta-data项,避免重复注入:
<meta-data android:name="CodePushDeploymentKey" android:value="你的密钥" />
4. 验证修复效果
执行Release打包命令测试:
./gradlew assembleRelease
若仍有问题,可查看build/generated/res/gradleResValues/release/values/gradleResValues.xml文件,确认其中仅存在一个CodePushDeploymentKey资源项
内容的提问来源于stack exchange,提问作者SJH8730
相关产品推荐
相关产品推荐

