React Native 扫码模块 compileDebugJavaWithJavac 失败如何排查?
结论
目前仅凭这段 Gradle 配置无法确定根因。Execution failed for task ':vision-camera-code-scanner:compileDebugJavaWithJavac' 表示扫码模块的 Java 编译任务失败,具体原因需要查看它之前的编译器错误。
项目声明的 compileSdkVersion 和 targetSdkVersion 均为 35,扫码模块的相关属性则为 31。这两个属性是否生效取决于模块的构建脚本,因此不能直接认定是版本冲突,也不能保证把它们改成 35 就能解决问题。
先获取具体编译错误
在项目的 android 目录执行:
./gradlew :vision-camera-code-scanner:compileDebugJavaWithJavac --stacktrace --info --console=plain
Windows 使用:
.\gradlew.bat :vision-camera-code-scanner:compileDebugJavaWithJavac --stacktrace --info --console=plain
重点保留任务失败提示前的第一条具体错误,以及相关的源码路径、行号和后续说明。例如:
error: cannot find symbol
error: package ... does not exist
error: incompatible types
这些只是可能出现的错误形式,当前项目尚未确认出现这些日志。不同错误对应的排查方向不同,仅凭最后一行任务失败提示无法选择修复方案。
检查扫码模块实际使用的 SDK 配置
当前配置包含:
compileSdkVersion = 35
targetSdkVersion = 35
VisionCameraCodeScanner_targetSdkVersion = 31
VisionCameraCodeScanner_compileSdkVersion = 31
打开 vision-camera-code-scanner 模块的 android/build.gradle,确认:
- 是否读取
VisionCameraCodeScanner_compileSdkVersion和VisionCameraCodeScanner_targetSdkVersion。 - 是否继承根项目的 SDK 配置。
- 属性未提供时使用什么默认值。
根项目声明了属性,子模块也未必会使用。确认模块确实读取了这些属性后,修改它们才有明确作用。
如果编译日志明确显示缺少某个 Android API,再结合该 API 所需的编译 SDK 检查配置。不要把修改 targetSdkVersion 当作通用的 Java 编译修复办法。
补齐依赖版本和构建环境
原始材料中的 Package.json 为空,无法判断扫码库与当前 React Native、VisionCamera 的依赖关系是否匹配。至少需要补充:
react-native、react-native-vision-camera和扫码插件的实际版本。- Gradle Wrapper、Android Gradle Plugin 的版本。
- Gradle 实际使用的 JDK 版本。
- 第一条完整的 Java 编译错误。
如果项目使用 npm,可以在项目根目录查看相关依赖:
npm ls react-native react-native-vision-camera vision-camera-code-scanner
如果实际安装的包名不同,按 Package.json 中的名称查询;使用 Yarn 或 pnpm 时,使用对应的依赖查询命令。
在 android 目录执行:
./gradlew --version
检查输出中的 Gradle 和 JVM 信息,并与 Android Studio 的 Gradle JDK 设置核对。终端的 java -version 结果可以作为补充,但不能单独证明 Gradle 使用了同一个 JDK。
另外,以下声明没有直接写出版本:
classpath("com.android.tools.build:gradle")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
这两条声明本身不足以说明配置有误。还需要查看项目的其他配置和实际解析结果,确认插件版本由哪里提供。
按错误内容选择修复方向
| 日志中的具体问题 | 优先检查的内容 |
|---|---|
| 找不到 React Native 或 VisionCamera 的类、方法 | 扫码插件源码使用的 API 是否与已安装版本匹配 |
| 找不到 Android SDK 中的类或常量 | 模块实际生效的 compileSdkVersion 及对应 SDK 安装情况 |
| Java 源码或字节码版本不受支持 | Gradle 使用的 JDK、Java 编译目标及工具链兼容条件 |
| 找不到某个依赖包 | 模块的依赖声明、仓库配置和依赖解析日志 |
每次针对明确的错误修改一项,然后重新运行同一个编译任务,检查修改是否有效。现有信息没有证明 NDK、Kotlin 或 Google Services 插件导致了失败,不宜同时调整这些版本。
注意事项
清理构建缓存可以作为修改配置后的辅助操作,但不会自动修复缺失的类、方法或不匹配的依赖版本。更换扫码库前也要检查兼容条件;“另一个库也无法正常工作”不足以证明两次故障原因相同。
接下来需要第一条完整的 Java 编译错误、Package.json 中的相关依赖版本,以及 ./gradlew --version 的输出。有了这些信息,才能把排查范围缩小到具体配置或源码调用。
备注:内容仅供参考。
