119
votes

I am using React native with Android. How can I update version number in the app? As I am getting this error.

I am generating file as per this url https://facebook.github.io/react-native/docs/signed-apk-android.html

I have tried modifying AndroidManifest.xml file, but after I build it, that file gets automatically modified back.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facebook.react"
    android:versionCode="1"
    android:versionName="1.0" >

Here, I modified the XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facebook.react"
    android:versionCode="2"
    android:versionName="1.1" >

After, build file automatically changes back.

enter image description here

6
android:versionCode="2" mean whenever you want to upload apk on play store that is necessary to increase version code & version code you can keep whatever you want doesn't impact - Ajinkya
doesn't work, I have already done it. I have corrected my question. - Praveen Prasad

6 Answers

219
votes

You should be changing your versionCode and versionName in android/app/build.gradle:

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"

        {...}
    }

    {...}
}
96
votes

@Joseph Roque is correct, you need to update the version numbers in android/app/build.gradle.

Here's how I automate this and tie it into the package's version in package.json and git commits.

In 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"
        }
    }

Notes:

  • It's important that versionCode is an integer - so we can't use semantic versioning here. This is used on the play store to tell which versions come after others - that's why it's tied to git commits in getGitVersion

  • versionName however is shown to users - I'm using semantic versioning here and storing the real value in my package.json. Thanks to https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661

32
votes

For those wanting to automate this, and have iOS at the same time, you can use react-native-version to set the version numbers.

All you need to do is update your version number inside the package.json file and run the following:

$ npx react-native-version --never-amend

[RNV] Versioning Android...
[RNV] Android updated
[RNV] Versioning iOS...
[RNV] iOS updated
[RNV] Done
✨  Done in 0.39s.

I hope this can help others.

3
votes

I had the same problem and I checked all the above answer, I had a made a silly mistake because of which nothing worked for me. Just in case any of you do same mistake as mine try this.

  1. Version can be a decimal number like 1.0 or 1.0.1 etc
  2. But VersionCode cannot be decimal number It should be 1,2,3 etc and not 1.1 or 2.2

So in project/app/build.gradle

android {
defaultConfig {
    versionCode 1 // do not use decimal number here
    versionName "1.0" // you can use decimal number here.
    {...}
}
{...}
}
2
votes

Set the versionCode under android in app.json:

{
  "expo": {
    "name": "App Name",
...
    "android": {
      "package": "com.app.name",
      "permissions": [],
      "versionCode": 2
    }
  }
}

ref:https://docs.expo.io/versions/latest/workflow/configuration/#versioncodeversion-number-required-by-google-play-increment-by-one-for-each-release-must-be-an-integer-httpsdeveloperandroidcomstudiopublishversioninghtml

0
votes

If someone is facing

wrong version code eg - 31284

Then make sure to not use SeparateBuildPerCPUArchitecture in android/app/build.gradle

def enableSeparateBuildPerCPUArchitecture = false

and

to update the version code and name change in android/app/build.gradle:

android {

defaultConfig {

    versionCode 1
    versionName "1.0"

    {...}
}

{...}
}