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

CodePush发布版本失败:gradle.properties无getVersionNameFromNpm()属性

问题解决:CodePush发布时提示“getVersionNameFromNpm()不存在于gradle.properties”

问题根源

你通过自定义Gradle函数getVersionNameFromNpm()从package.json动态获取versionName,但CodePush的release-react命令默认会尝试从android/gradle.properties文件中读取版本相关属性,而非识别Gradle脚本里的自定义函数,因此抛出找不到该属性的错误。

解决方案

方案1:在gradle.properties中显式定义版本属性(推荐)

通过将版本号写入gradle.properties,让CodePush可以直接读取,同时保持与package.json版本同步:

  1. 打开android/gradle.properties,添加版本属性:
VERSION_NAME=1.0.0 # 与package.json中的version保持一致
  1. 修改android/app/build.gradle,替换自定义函数为读取该属性:
android {
   defaultConfig {
        // ... 其他配置
        versionName project.VERSION_NAME
    }
}
  1. 后续更新版本时,同时修改package.json和gradle.properties中的版本号(可写简单脚本自动同步)。

方案2:发布时手动指定目标版本号

执行CodePush命令时,通过--targetBinaryVersion参数直接指定当前App的版本号,跳过自动读取Gradle配置:

codepush release-react -a [project] -d Development --targetBinaryVersion "1.0.0"

注意:这里的版本号要和package.json以及build.gradle最终生成的versionName一致

方案3:将版本属性提升到根Gradle配置

把版本逻辑移到项目根目录的build.gradle,并通过ext属性暴露版本号,让CodePush可以识别:

  1. 在项目根目录的build.gradle中添加:
ext {
    appVersionName = {
        def inputFile = new File("$rootDir/../package.json")
        def packageJson = new JsonSlurper().parseText(inputFile.text)
        return packageJson["version"]
    }()
}
  1. 修改android/app/build.gradle引用该属性:
android {
   defaultConfig {
        // ... 其他配置
        versionName rootProject.ext.appVersionName
    }
}

这样既保留了从package.json动态取版本的逻辑,又能让CodePush读取到正确的版本属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:52:34