如何更新react native app的版本号

Pra*_*sad 68 android react-native

我在Android上使用React native.如何在应用程序中更新版本号?因为我收到这个错误.

我按照这个网址生成文件 https://facebook.github.io/react-native/docs/signed-apk-android.html

我尝试修改AndroidManifest.xml文件,但在构建之后,该文件会自动修改回来.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facebook.react"
    android:versionCode="1"
    android:versionName="1.0" >
Run Code Online (Sandbox Code Playgroud)

在这里,我修改了XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facebook.react"
    android:versionCode="2"
    android:versionName="1.1" >
Run Code Online (Sandbox Code Playgroud)

之后,构建文件会自动更改回来.

在此输入图像描述

Jos*_*que 134

你应该改变你versionCodeversionNameandroid/app/build.gradle:

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"

        {...}
    }

    {...}
}
Run Code Online (Sandbox Code Playgroud)

  • @Noitidart`versionCode`是一个适用于Google /你的值.当您上传到Google Play时,它希望`versionCode`大于之前的`versionCode`,并且对于每个上传的文件也是唯一的.就个人而言,每次我准备上传到Google Play时,我都会手动将`versionCode`递增一.其他人根据git提交或其他因素自动增加它.`versionName`是您将更改为"2.2"的内容,以便您的用户在更新/下载您的应用时会看到该版本号. (9认同)
  • 我在你指向的文件中找到了解决方案,但它实际上稍微向下了.有一个部分以**applicationVariants**开头,并且在那里**output.versionCodeOverride**正在设置,它按照建议的名称进行,并覆盖文件顶部的那个. (3认同)
  • @Noitidart 如果您使用 Android Studio 和 Gradle 进行构建,那么在这里更改它就足够了。它将覆盖您在 AndroidManifest.xml 中放入的任何内容 (2认同)
  • 如果我希望我的版本为“2.2”,我应该将 versionCode 设置为“2.2”吗?我不明白 `versionCode` :( (2认同)
  • @KTWorks是的,versionCode必须是整数.versionName可以设置为"1.0.1"并将该值显示给用户. (2认同)

tgf*_*tgf 76

@Joseph Roque是正确的,您需要更新版本号android/app/build.gradle.

以下是我如何将其自动化并将其绑定到包的版本package.json和git提交中.

android/app/build.gradle:

/* Near the top */

import groovy.json.JsonSlurper

def getNpmVersion() {
    def inputFile = new File("../package.json")
    def packageJson = new JsonSlurper().parseText(inputFile.text)
    return packageJson["version"]
}
/* calculated from git commits to give sequential integers */
def getGitVersion() {
    def process = "git rev-list master --first-parent --count".execute()
    return process.text.toInteger()
}


......


def userVer = getNpmVersion()
def googleVer = getGitVersion()

android {
...
    defaultConfig {
        .....
        versionCode googleVer
        versionName userVer

        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 重要的versionCode是它是一个整数 - 所以我们不能在这里使用语义版本控制.这在Play商店中使用,以告诉哪些版本跟随其他版本 - 这就是为什么它与git提交有关getGitVersion

  • versionName然而向用户显示 - 我在这里使用语义版本并将真实值存储在我的package.json.感谢https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661

  • Andrew Jack在他的Medium文章中讨论了一种非常类似的方法和iOS方法:https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661#.ky7l2lys7.对于想要保持其版本与其构建匹配的人来说,这是一个很好的阅读. (5认同)

Fra*_*eau 6

从Google搜索时,我偶然发现了这个问题,但没有一个答案适合我,因为我想自动化该过程。

对于那些希望自动执行此操作并同时具有iOS的用户,可以使用react-native-version设置版本号。

安装后,您只需在package.json文件中更新版本并运行脚本即可。

$ yarn postversion
$ react-native-version --never-amend
[RNV] Versioning Android...
[RNV] Android updated
[RNV] Versioning iOS...
[RNV] iOS updated
[RNV] Done
?  Done in 0.39s.
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助其他人。

  • 如果您已退出展会,请确保删除 app.json,否则 android 和 ios 文件将不会更新。 (2认同)
  • @bjorn-reppen 在 Bare Workflow Expo 项目中删除 app.json 并不是最好的解决方案,因为 Expo 仍然使用 App.json(例如更新)该问题正在此处讨论:https://github.com/stovmascript/ react-native-version/issues/105 我修补了react-native-version 4.0.0作为临时解决方法,直到它得到修复。 (2认同)