React Native:使用enableSeparateBuildPerCPUArchitecture对Android版本的代码太大了

时间:2017-05-14 15:39:55

标签: android react-native google-play

我正在为我的React Native App for Android编译 enableSeparateBuildPerCPUArchitecture 为false但是因为我读了如果我设置为true,那么该应用程序将减少为4mb并且它是真的。

所以我当前的版本代码是9,所以我设置为10新版本,当我创建一个带有 true 选项的新版本时,我将其上传到我的Google Play信息中心,我意识到了新版本版本代码不是10但是是1048586:/

幸运的是我没有发布那个版本而我刚删除它但是我想知道发生了什么,如果这是正常的,如果我之后创建一个新版本,这个数字将会增加1单位如1048586到1048587?

谢谢!

修改

我找到了设置版本代码的代码行

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

但是我仍然无法找到为什么需要将版本代码增加到一个大数字的真正原因

2 个答案:

答案 0 :(得分:0)

“我们之所以需要这样做,是因为ABI中的每个APK都需要一个单独的版本代码,该代码在每次应用更新时都会上调。此代码块为每种体系结构的基本版本代码添加了一个不同的常量。然后,每个APK都有各自不同的值,这些值不太可能重叠。有关更多详细信息,请参阅有关ABI拆分的Android文档。“

https://reactnative.thenativebits.com/courses/upgrading-react-native/upgrade-to-react-native-0.59/

因此,您需要将versionCode的“控制权”交给构建系统,而要依赖versionName。

答案 1 :(得分:0)

让我们假设您乘以一个小数字....例如说2。

因此[“ armeabi-v7a”:1,“ x86”:2]的apk版本代码将

当您将android:默认版本代码设置为1时:

  • armeabi-v7a:1 * 2 +1 = 3
  • x86:2 * 2 +1 = 5

假设您现在有另一个版本,并决定使用默认版本代码为2。因此,体系结构的版本代码为:

  • armeabi-v7a:1 * 2 + 2 = 4
  • x86:2 * 2 + 2 = 6

现在在下一发行版中,使用默认版本代码3时,您会注意到我们遇到了问题。这里是架构的版本代码:

  • armeabi-v7a:1 * 2 + 3 = 5 (具有第一个发行版的x86版本代码的冲突)
  • x86:2 * 2 + 3 = 7

PS:以上答案仅基于我的理解/解释,原始作者很可能会有完全不同的原因。