React Native 앱의 버전 번호를 업데이트하는 방법


103

Android에서 React 네이티브를 사용하고 있습니다. 앱에서 버전 번호를 업데이트하려면 어떻게해야합니까? 이 오류가 발생합니다.

이 URL 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" >

여기에서 XML을 수정했습니다.

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

이후 빌드 파일이 자동으로 다시 변경됩니다.

여기에 이미지 설명 입력


1
android : versionCode = "2"는 버전 코드 및 버전 코드를 높이기 위해 필요한 APK를 Play 스토어에 업로드 할 때마다 원하는대로 유지할 수 있음을 의미합니다.
Ajinkya

작동하지 않습니다, 나는 이미 그것을했습니다. 내 질문을 수정했습니다.
Praveen Prasad

답변:


198

당신은 변화해야 versionCode하고 versionNameandroid/app/build.gradle:

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"

        {...}
    }

    {...}
}

감사합니다. 저도 그 파일을 여러 번 보았지만 그 부분을 놓쳤습니다.
Praveen Prasad

3
지적한 파일에서 해결책을 찾았지만 실제로는 약간 더 아래에있었습니다. applicationVariants로 시작된 섹션이 있었고 거기에 output.versionCodeOverride 가 설정되었습니다. 이름이 제안한대로 파일 상단에있는 항목을 덮어 씁니다 .
AidenMontgomery

1
@Noitidart Android Studio 및 Gradle로 빌드하는 경우 여기에서 변경하는 것으로 충분합니다. 그것은 당신의 AndroidManifest.xml에 넣어 무엇보다 우선합니다
조셉 로케

14
@Noitidart versionCode는 Google / 당신을위한 가치입니다. Google Play에 업로드 할 때 versionCode이전 버전보다 크고 versionCode업로드 된 모든 파일에 대해 고유 할 것으로 예상 합니다. 개인적으로 versionCodeGoogle Play에 업로드를 준비 할 때마다 수동으로 하나씩 증가 합니다. 다른 사람들은 git 커밋 또는 다른 요소에 따라 증가하도록 자동화합니다. versionName사용자가 앱을 업데이트 / 다운로드 할 때 해당 버전 번호를 볼 수 있도록 "2.2"로 변경합니다.
Joseph Roque 2017

2
@KTWorks 예, versionCode는 정수 여야합니다. versionName은로 설정 될 수 있으며 1.0.1사용자에게 해당 값을 표시합니다.
Joseph Roque

91

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

메모:

  • versionCode정수인 것이 중요 하므로 여기서 의미 론적 버전 관리를 사용할 수 없습니다. 이것은 플레이 스토어에서 다른 버전 뒤에 오는 버전을 알려주는 데 사용됩니다. 이것이 바로 git 커밋에 묶여있는 이유입니다.getGitVersion

  • versionName그러나 사용자에게 표시됩니다-여기서 의미 론적 버전 관리를 사용하고 실제 값을 package.json. https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661 덕분에


6
Andrew Jack은 Medium 기사에서 매우 유사한 방법과 iOS 용 방법에 대해 설명합니다. medium.com/@andr3wjack/… . 자신의 버전을 자신의 빌드와 일치하게 유지하려는 사람들에게 좋은 읽기입니다.
DBrown

21

이를 자동화하고 동시에 iOS를 사용하려는 경우 react-native-version 을 사용하여 버전 번호를 설정할 수 있습니다.

package.json 파일에서 버전 번호를 업데이트 하고 다음을 실행하기 만하면됩니다.

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

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

이것이 다른 사람들에게 도움이되기를 바랍니다.



1

나는 똑같은 문제가 있었고 위의 모든 대답을 확인했습니다. 저에게는 아무것도 효과가 없었기 때문에 어리석은 실수를 저질렀습니다. 여러분 중 누구라도 저와 같은 실수를한다면 이것을 시도해보십시오.

  1. 버전은 1.0 또는 1.0.1 등과 같은 10 진수 일 수 있습니다.
  2. 단, VersionCode는 10 진수 일 수 없습니다. 1.1 또는 2.2가 아닌 1,2,3 등이어야합니다.

그래서 project / app / build.gradle에서

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

0

누군가 마주하고 있다면

잘못된 버전 코드 (예 : 31284)

그런 다음 SeparateBuildPerCPUArchitecture를 사용하지 마십시오. android/app/build.gradle

def enableSeparateBuildPerCPUArchitecture = false

버전 코드 및 이름 변경을 업데이트하려면 android/app/build.gradle:

android {

defaultConfig {

    versionCode 1
    versionName "1.0"

    {...}
}

{...}
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.