React Native 0.64.0 Android Release构建失败 R8报androidx.transition.R重复定义
构建失败根因定位
报错核心为R8执行Release混淆时检测到androidx.transition.R类重复定义:一份来自编译流程生成的非命名空间R类jar包,一份来自javac编译输出目录,属于React Native 0.64.0搭配AGP 4.1.0版本的已知兼容问题。
常规的删除node_modules、.gradle、构建目录,清理Gradle缓存、使IDE缓存失效重启的操作,只是清除了旧的冲突产物,没有修改生成重复R类的底层编译逻辑,因此重新构建后问题会再次出现。
可落地解决步骤
- 第一步:配置编译规则规避R类重复输出
打开android/app/build.gradle文件,在android配置块中新增如下规则,统一R类的生成路径:android { // 保留原有所有配置 // 新增配置 android.buildFeatures.nonFinalResIds = false } - 第二步:补充R8混淆兼容规则
打开android/app/proguard-rules.pro规则文件,在末尾追加配置,让R8对重复定义的R类做去重处理,不触发编译中断:# 跳过重复R类的检测校验 -dontwarn androidx.transition.** # 保留所有生成的R类,避免裁剪冲突 -keep class **.R { *; } - 第三步:统一依赖版本消除传递冲突
如果上述配置无效,说明项目存在多版本传递引入的androidx.transition依赖冲突,可在android/app/build.gradle的dependencies块前添加强制版本对齐规则:configurations.all { resolutionStrategy { // 强制统一所有引入的transition库版本,避免多版本输出重复R类 force "androidx.transition:transition:1.4.0" } } - 备选方案:调整版本兼容组合
若以上配置仍无效,可将AGP版本从4.1.0调整为4.0.1,同步把Gradle wrapper版本调整至6.4.1,该版本组合在RN 0.64上不存在R类双路径输出的逻辑bug。
操作提醒:所有配置修改完成后,先执行
./gradlew clean全量清理构建产物,再重新触发Release构建流程。
内容的提问来源于stack exchange,提问作者Log.wtf
相关产品推荐
相关产品推荐

