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

React Native项目中react-native-os与Gradle版本兼容问题求助

解决react-native-os依赖中Gradle compile()方法废弃导致的Android构建错误

针对你遇到的react-native-os依赖因使用废弃的compile()方法导致Android构建失败的问题,以下是几个可行的解决方案:

方案一:通过Gradle动态修改依赖配置(无需修改node_modules)

在项目根目录的android/build.gradle文件中,添加Gradle动态配置逻辑,自动将react-native-os模块中的compile依赖替换为implementation:

allprojects {
    repositories {
        // 保留原有的仓库配置
        mavenCentral()
        mavenLocal()
        maven { url("$rootDir/../node_modules/react-native/android") }
        maven { url("$rootDir/../node_modules/jsc-android/dist") }
        google()
    }

    // 添加以下配置块
    subprojects {
        afterEvaluate { project ->
            // 仅针对react-native-os模块修改依赖声明
            if (project.name == 'react-native-os') {
                project.dependencies {
                    // 移除旧的compile依赖
                    def oldDependency = project.dependencies.find { it.group == 'com.facebook.react' && it.name == 'react-native' }
                    if (oldDependency) {
                        remove oldDependency
                    }
                    // 添加新的implementation依赖
                    implementation 'com.facebook.react:react-native:+'
                }
            }
        }
    }
}

修改完成后重新执行Android构建,Gradle会在构建流程中自动修正react-native-os的依赖配置。

方案二:修复patch-package补丁文件

如果之前使用patch-package时出错,大概率是补丁包含了不必要的变动。重新生成精准补丁:

  1. 手动修改node_modules/react-native-os/android/build.gradle,将第47行的compile 'com.facebook.react:react-native:+'替换为implementation 'com.facebook.react:react-native:+'
  2. 执行命令生成补丁:
    npx patch-package react-native-os
    
  3. 检查patches/react-native-os+[版本号].patch文件,确保只有这一行的修改,无多余变更
  4. 重新运行Android构建:./gradlew assembleDebug

方案三:替换为维护活跃的替代依赖

react-native-os库长期未更新,建议替换为更活跃的react-native-device-info,它包含所有os相关功能且兼容最新Gradle版本:

  1. 卸载旧依赖:
    npm uninstall react-native-os
    
  2. 安装新依赖:
    npm install react-native-device-info
    
  3. 替换代码中的调用逻辑:
    原代码:
    import { os } from 'react-native-os';
    console.log(os.type(), os.version());
    
    替换为:
    import DeviceInfo from 'react-native-device-info';
    console.log(DeviceInfo.getSystemName(), DeviceInfo.getSystemVersion());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:05:14