我刚刚为我的React Native应用程序做了一个新的Android捆绑包。我在android/app/build.gradle中手动将版本代码从90更新为91,但现在我试图上传到Play Store,版本代码为3145819(我预计会看到91)
build.gradle:
defaultConfig {
applicationId "com.myapp"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 91
versionName "4.1.0"
multiDexEnabled true
missingDimensionStrategy "RNN.reactNativeVersion", "reactNative57_5"
resValue "string", "build_config_package", "com.myapp"
}
字符串
我使用这个命令来绑定:
./gradlew bundleProdRelease --console plain
型
不确定为什么会发生这种情况,我肯定更喜欢更小的版本代码(用户在报告bug时更容易阅读)。
你知道这是怎么回事吗?
4条答案
按热度按时间lbsnaicq1#
好吧,我终于想通了!不,过去两年我没有拼命地寻找答案...我只是偶然发现了它。
因此,在
android/app/build.gradle
中,有一个脚本生成bundle版本代码。它是根据版本代码和目标体系结构版本代码计算出来的。例如,在RN 0.64x模板中:字符串
对我来说,
arm64-v8a
似乎总是在生成版本代码时被用作默认值,所以我得到的输出如下:型
计算通常涉及一个更神秘的数字(
1048576
♂️,参见RN 0.59x模板),它看起来很随意,并且很难理解这个捆绑包版本代码是如何生成的。现在更有意义了!
ymdaylpp2#
一种可能性是,您的
/app/build.gradle
配置包含一些转换versionCode的逻辑,可能是因为您正在进行应用程序捆绑。在react-native的当前master中,可以看到一些版本控制逻辑here。
你的build.gradle可能有相同或相似的逻辑。
Google在这里有关于版本控制的解释。
xoefb8l83#
我也有同样的问题。每次运行**./gradlew bundleRelease**并更改
字符串
至
型
该函数位于android/app/build.gradle
我不确定如何阻止它这样做,除了将enableSeparateBuildPerCPUArchitecture更改回false
ccrfmcuu4#
又过了两年。正如samzmann所提到的,
versionCodeOverride
公式在React Native的新版本中发生了变化。下面是commit和pull request的具体讨论。字符串
OP很可能使用了旧版本的React Native和之前的公式。向后看,我们可以看到设置
versionCode 91
如何变成3145819
。型
为了获得更小的版本代码,有意义(人类可读),您需要使用使用更新后的公式的React Native版本。如果在Play商店中上传并部署了版本为3145819的构建版本,您可能需要使用新的捆绑包ID。这是因为新版本必须单调递增
versionCode
值以防止降级。如果这对任何人有帮助的话,我在调试我自己的
versionCode
与32位整数溢出相关的问题时偶然发现了这个问题。Android开发者文档状态:Google Play允许versionCode的最大值是210000000。
由于
android/app/build.gradle
中的versionCodeOverride
公式,我相信我们应该保留defaultConfig.versionCode < 2100000
。这实际上只给了我们6位数字来使用semantic versioning的版本代码方案。