使用人行横道为 32 位和 64 位平台构建多个 APK 时,APK 版本代码顺序不正确

Incorrect APKs versionCode order when building multiple APKs for both 32bit and 64 bit platforms with crosswalk

我需要为 32 位(armeabi-v7a 和 x86)和 64 位(arm64-v8a 和 x86_64)平台构建 ionic/cordova 应用程序。我使用命令 ionic build android --releaseionic build android --release --xwalk64bit 构建了四个单独的 APK 一切顺利,除了版本代码(版本设置为 0.0.11)有点偏离 - 见下文

问题是 x86 和 x86_64 的版本代码必须高于 ARM apk。这是必需的,因为 x86 设备能够处理 ARM 库,但没有 ARM 设备能够处理 x86 库。所以我们一定要保持x86 APK的版本码高于ARM apk的版本码,正确的APK才会去正确的设备。

这是我正在寻找的(以及我最终设法创建的)- 见下文

问题是versionCode由build.gradle设置并由crosswalk mobile-xwalk.gradle[=33=修改] 使用我上面描述的构建方法给出了错误的版本。我尝试在 config.xml 中使用 android-versionCode 参数并使用 cdvVersionCode for build.gradle(参见 http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html#configuring-gradle)但运气不好。

我最终通过手动更改 mobile-xwalk.gradle 来为 64 位 apk 设置正确的版本代码来解决问题(如我的第二个屏幕截图所示)。这对我来说似乎不是最佳解决方案

问题 - 有没有更好的方法来解决这个问题?

cordova-plugin-crosswalk-webview 似乎有错误。 此代码部分来自 platforms/android/build.gradle(用于构建 32 位):

productFlavors {
        armv7 {
            versionCode defaultConfig.versionCode*10 + 2
            ndk {
                abiFilters "armeabi-v7a", ""
            }
        }
        x86 {
            versionCode defaultConfig.versionCode*10 + 4
            ndk {
                abiFilters "x86", ""
            }
        }
        all {
            ndk {
                abiFilters "all", ""
            }
        }
    }

这里是 versionCode*10 就像看到的那样......这段代码部分来自 platforms/android/cordova-plugin-crosswalk-webview/YOUR_APP_SUFFIX-xwalk.gradle(用于构建 64 位):

productFlavors {
            x86_64 {
                versionCode defaultConfig.versionCode + 6
                ndk {
                   abiFilters "x86_64", ""
                }
            }
            arm64 {
                versionCode defaultConfig.versionCode + 9
                ndk {
                    abiFilters "arm64-v8a", ""
                }
            }
        }

这里只是 versionCode。所以我通常将第二个文件更改为 versionCode*10 来解决 PlayMarket 问题