Jak zaktualizować numer wersji React Native App

103

Używam natywnego Reacta z Androidem. Jak mogę zaktualizować numer wersji w aplikacji? Jak otrzymuję ten błąd.

Generuję plik zgodnie z tym adresem URL https://facebook.github.io/react-native/docs/signed-apk-android.html

Próbowałem zmodyfikować plik AndroidManifest.xml, ale po jego utworzeniu plik ten jest automatycznie modyfikowany z powrotem.

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

Tutaj zmodyfikowałem XML:

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

Następnie plik kompilacji automatycznie zmienia się z powrotem.

wprowadź opis obrazu tutaj

Praveen Prasad
źródło
1
android: versionCode = "2" oznacza, że ​​zawsze, gdy chcesz przesłać apk do sklepu Play, co jest konieczne do zwiększenia kodu wersji i kodu wersji, możesz zachować wszystko, co chcesz, nie ma wpływu
Ajinkya
nie działa, już to zrobiłem. Poprawiłem swoje pytanie.
Praveen Prasad

Odpowiedzi:

198

Należy się zmieniać swoje versionCodeoraz versionNamew android/app/build.gradle:

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"

        {...}
    }

    {...}
}
Joseph Roque
źródło
Dzięki, sam widziałem ten plik wiele razy, ale przegapiłem tę część.
Praveen Prasad
3
Znalazłem rozwiązanie w wskazanym pliku, ale w rzeczywistości znajdowało się ono nieco dalej. Była sekcja, która zaczynała się od applicationVariants i tam ustawiano output.versionCodeOverride , który działał zgodnie z sugestią nazwy i zastępował ten na górze pliku.
AidenMontgomery
1
@Noitidart, jeśli tworzysz w Android Studio i Gradle, wystarczy zmienić to tutaj. Zastąpi wszystko, co umieścisz w AndroidManifest.xml
Joseph Roque
14
@Noitidart versionCodeto wartość, która jest przeznaczona dla Google / Ciebie. Podczas przesyłania do Google Play oczekuje versionCodesię, że będzie większy niż poprzedni versionCode, a także unikalny dla każdego przesłanego pliku. Osobiście po prostu ręcznie zwiększam versionCodeo jeden za każdym razem, gdy przygotowuję przesyłanie do Google Play. Inni ludzie automatyzują go, aby zwiększać na podstawie zatwierdzenia git lub innego czynnika. versionNameto, co należy zmienić na „2.2”, aby użytkownicy widzieli ten numer wersji podczas aktualizowania / pobierania aplikacji.
Joseph Roque
2
@KTWorks tak, versionCode musi być liczbą całkowitą. versionName można ustawić na 1.0.1i będzie wyświetlać tę wartość użytkownikom.
Joseph Roque
91

@Joseph Roque ma rację, musisz zaktualizować numery wersji w android/app/build.gradle.

Oto jak to zautomatyzować i powiązać go z wersją pakietu w package.jsoni zatwierdzeniach git.

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

Uwagi:

  • Ważne jest, aby versionCodebyła to liczba całkowita - więc nie możemy tutaj użyć wersji semantycznej. Jest to używane w sklepie Play, aby określić, które wersje są dostępne po innych - dlatego jest powiązane z zatwierdzeniami gitgetGitVersion

  • versionNamejednak jest pokazywany użytkownikom - używam tutaj wersjonowania semantycznego i przechowuję prawdziwą wartość w moim package.json. Dzięki https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661

tgf
źródło
6
Andrew Jack omawia bardzo podobną metodę i metodę dla iOS w swoim artykule na Medium: medium.com/@andr3wjack/… . To świetna lektura dla osób, które chcą, aby ich wersje były zgodne z ich kompilacjami.
DBrown
21

Dla tych, którzy chcą to zautomatyzować i jednocześnie mają iOS, możesz użyć opcji React-native-version, aby ustawić numery wersji.

Wszystko, co musisz zrobić, to zaktualizować numer wersji w pliku package.json i uruchomić następujące polecenie:

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

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

Mam nadzieję, że to pomoże innym.

Francois Nadeau
źródło
1

Miałem ten sam problem i sprawdziłem wszystkie powyższe odpowiedzi, popełniłem głupi błąd przez co nic mi nie pomogło. Na wypadek gdyby któryś z was popełnił ten sam błąd co mój, spróbuj tego.

  1. Wersja może być liczbą dziesiętną, na przykład 1.0 lub 1.0.1 itd
  2. Ale VersionCode nie może być liczbą dziesiętną. Powinna wynosić 1, 2, 3 itd., A nie 1,1 lub 2,2

Więc w project / app / build.gradle

android {
defaultConfig {
    versionCode 1 // do not use decimal number here
    versionName "1.0" // you can use decimal number here.
    {...}
}
{...}
}
Vasanth
źródło
0

Jeśli ktoś stoi

zły kod wersji, np. - 31284

Następnie upewnij się, że nie używasz SeparateBuildPerCPUArchitecture w android/app/build.gradle

def enableSeparateBuildPerCPUArchitecture = false

i

aby zaktualizować kod wersji i zmienić nazwę w android/app/build.gradle:

android {

defaultConfig {

    versionCode 1
    versionName "1.0"

    {...}
}

{...}
}
kvadityaaz
źródło