ChatGPT解决这个技术问题 Extra ChatGPT

如何更新本机应用程序的版本号

我在 Android 上使用 React Native。如何更新应用程序中的版本号?当我收到此错误时。

我正在根据这个 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" >

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

https://i.stack.imgur.com/bhOmm.png

android:versionCode="2" 意味着每当您想在 Play 商店上载需要增加版本代码和版本代码的 apk 时,您可以保留任何您想要的不影响
不行,我已经做了。我已经纠正了我的问题。

D
DysphoricUnicorn

您应该在 android/app/build.gradle 中更改您的 versionCodeversionName

android {

    defaultConfig {

        versionCode 1
        versionName "1.0"
        
        {...}
    }

    {...}
}

请注意,versionCode 必须是一个大于以前版本所用整数的整数,而 versionName 是可以向用户显示的人类可读版本。


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

@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 是一个整数 - 所以我们不能在这里使用语义版本控制。这在 Play 商店中用于判断哪些版本在其他版本之后 - 这就是为什么它与 getGitVersion 中的 git 提交相关联

但是 versionName 会显示给用户 - 我在这里使用语义版本控制并将实际值存储在我的 package.json 中。感谢 https://medium.com/@andr3wjack/versioning-react-native-apps-407469707661


Andrew Jack 在他的 Medium 文章中讨论了一种非常相似的方法,以及一种适用于 iOS 的方法:medium.com/@andr3wjack/…。对于希望保持他们的版本与他们的构建匹配的人来说,这是一本很好的读物。
这是否意味着每次我使用 git commit 版本都会增量更改?哪种更新类型会增加?我的意思是,它会从补丁号开始吗?
@EdisonPebojot 是的,虽然只有一个版本会改变。有两种版本类型 - versionCode 必须是增量的并且基于提交的数量。并且从您的 package.json 中获取的 versionName 可以是一个字符串,并且对用户可见。您可能想阅读此答案:stackoverflow.com/a/10269683/1760776 了解更多详情
Andrew Jack 在 Medium 上的文章已被删除。不过,这是他关于该主题的博客文章:blog.andrewjack.uk/versioning-react-native-apps
需要将 master 更改为 main def process = "git rev-list main --first-parent --count".execute()
F
Francois Nadeau

对于那些想要自动化并同时拥有 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.

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


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

我遇到了同样的问题,我检查了上述所有答案,我犯了一个愚蠢的错误,因为没有什么对我有用。以防万一你们犯了和我一样的错误,试试这个。

版本可以是十进制数,例如 1.0 或 1.0.1 等,但 VersionCode 不能是十进制数 它应该是 1、2、3 等,而不是 1.1 或 2.2

所以在 project/app/build.gradle

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

o
oOEric

在 app.json 中的 android 下设置 versionCode

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

参考: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


k
kvadityaaz

如果有人面对

错误的版本代码,例如 - 31284

然后确保不要在 android/app/build.gradle 中使用SeparateBuildPerCPUArchitecture

def enableSeparateBuildPerCPUArchitecture = false

更新 android/app/build.gradle 中的版本代码和名称更改:

android {

defaultConfig {

    versionCode 1
    versionName "1.0"

    {...}
}

{...}
}

A
Atif Khan

如果您在使用 expo 时遇到此问题,请转到 app.json 并将 version 更改为更高的数字。

{
  "expo": {
    "name": "nameofapp", // btw dont copy this
    "slug": "appslug",   // btw dont copy this
    "version": "1.0.0",  // here is where you change the version
    ...
    ...
    ...
  }
}

您还需要更改 package.json 中的版本

{
  ...
  "name": "appname",  // btw dont copy this
  "version": "2.0.0", // here is where you change the version
  ...
  "android": {
    "versionCode": 2,
    ...
  }
  ...
}

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅