So aktualisieren Sie die Versionsnummer der reaktiven nativen App

93

Ich verwende React native mit Android. Wie kann ich die Versionsnummer in der App aktualisieren? Da bekomme ich diesen Fehler.

Ich generiere eine Datei gemäß dieser URL https://facebook.github.io/react-native/docs/signed-apk-android.html

Ich habe versucht, die Datei AndroidManifest.xml zu ändern, aber nachdem ich sie erstellt habe, wird diese Datei automatisch wieder geändert.

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

Hier habe ich das XML geändert:

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

Danach ändert sich die Build-Datei automatisch wieder.

Geben Sie hier die Bildbeschreibung ein

Praveen Prasad
quelle
1
android: versionCode = "2" bedeutet, wann immer Sie apk im Play Store hochladen möchten, das zur Erhöhung des Versionscodes und des Versionscodes erforderlich ist, können Sie behalten, was Sie wollen, ohne Auswirkungen zu haben
Ajinkya
funktioniert nicht, ich habe es schon getan. Ich habe meine Frage korrigiert.
Praveen Prasad

Antworten:

176

Sie sollten Ihre versionCodeund versionNamein ändern android/app/build.gradle:

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"

        {...}
    }

    {...}
}
Joseph Roque
quelle
Danke, ich selbst habe diese Datei mehrmals gesehen, aber diesen Teil einfach verpasst.
Praveen Prasad
3
Ich habe die Lösung in der Datei gefunden, auf die Sie hingewiesen haben, aber sie war tatsächlich etwas weiter unten. Es gab einen Abschnitt, der mit applicationVariants begann, und dort wurde die Datei output.versionCodeOverride festgelegt, die dem vorgeschlagenen Namen entsprach und den oben in der Datei überschriebenen überschrieb.
AidenMontgomery
1
@Noitidart Wenn Sie mit Android Studio und Gradle erstellen, reicht es aus, es hier zu ändern. Es wird alles überschreiben, was Sie in AndroidManifest.xml
Joseph Roque
12
@Noitidart versionCodeist ein Wert, der für Google / Sie bestimmt ist. Wenn Sie auf Google Play hochladen, wird erwartet versionCode, dass es größer als das vorherige versionCodeist und auch für jede hochgeladene Datei eindeutig ist. Persönlich erhöhe ich versionCodejedes Mal, wenn ich einen Upload zu Google Play vorbereite , manuell um eins. Andere Leute automatisieren es, um es basierend auf dem Git-Commit oder einem anderen Faktor zu erhöhen. versionNameist das, was Sie in "2.2" ändern würden, damit Ihre Benutzer diese Versionsnummer sehen, wenn sie Ihre App aktualisieren / herunterladen.
Joseph Roque
2
@KTWorks ja, versionCode muss eine ganze Zahl sein. versionName kann auf festgelegt werden 1.0.1und zeigt diesen Wert den Benutzern an.
Joseph Roque
90

@ Joseph Roque ist korrekt, Sie müssen die Versionsnummern in aktualisieren android/app/build.gradle.

Hier ist, wie ich dies automatisiere und es in die Version des Pakets package.jsoneinbinde und git festschreibe.

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

Anmerkungen:

  • Es ist wichtig, dass versionCodees sich um eine Ganzzahl handelt. Daher können wir hier keine semantische Versionierung verwenden. Dies wird im Play Store verwendet, um festzustellen, welche Versionen nach anderen kommen - deshalb ist es an Git-Commits gebundengetGitVersion

  • versionNameDies wird jedoch den Benutzern angezeigt. Ich verwende hier die semantische Versionierung und speichere den tatsächlichen Wert in meinem package.json. Vielen Dank an https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661

tgf
quelle
6
Andrew Jack beschreibt eine sehr ähnliche Methode und eine Methode für iOS in seinem Medium-Artikel: medium.com/@andr3wjack/… . Es ist eine großartige Lektüre für Leute, die ihre Versionen mit ihren Builds übereinstimmen möchten.
DBrown
14

Wenn Sie dies automatisieren und gleichzeitig über iOS verfügen möchten, können Sie die Versionsnummern mithilfe der reaktionsnativen Version festlegen.

Sie müssen lediglich Ihre Versionsnummer in der Datei package.json aktualisieren und Folgendes ausführen:

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

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

Ich hoffe das kann anderen helfen.

Francois Nadeau
quelle
0

Wenn jemand gegenübersteht

falscher Versionscode zB - 31284

Stellen Sie dann sicher, dass Sie SeparateBuildPerCPUArchitecture in nicht verwenden android/app/build.gradle

def enableSeparateBuildPerCPUArchitecture = false

und

So aktualisieren Sie den Versionscode und die Namensänderung in android/app/build.gradle:

android {

defaultConfig {

    versionCode 1
    versionName "1.0"

    {...}
}

{...}
}
kvadityaaz
quelle
0

Ich hatte das gleiche Problem und überprüfte alle obigen Antworten. Ich hatte einen dummen Fehler gemacht, aufgrund dessen nichts für mich funktionierte. Nur für den Fall, dass einer von Ihnen den gleichen Fehler wie ich macht, versuchen Sie dies.

  1. Die Version kann eine Dezimalzahl wie 1.0 oder 1.0.1 usw. Sein
  2. Der VersionCode kann jedoch keine Dezimalzahl sein. Er sollte 1,2,3 usw. und nicht 1,1 oder 2,2 sein

Also in project / app / build.gradle

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