我需要为 32 位(armeabi-v7a 和 x86)和 64 位(arm64-v8a 和 x86_64)平台构建 ionic/cordova 应用程序。我使用命令 ionic build android --release
和 ionic build android --release --xwalk64bit
构建了四个单独的 APK
一切顺利,除了 versionCode(版本设置为 0.0.11)有点偏离 - 见下文
问题是 x86 和 x86_64 必须具有比 ARM apk 更高的 versionCode。这是必需的,因为 x86 设备能够处理 ARM 库,但没有能够处理 x86 库的 ARM 设备。所以我们必须保持x86 APK的版本号高于ARM apk的版本号,正确的APK会去正确的设备。
这是我正在寻找的(以及我最终设法创建的)-见下文
问题是 versionCode 由 build.gradle 设置并由 crosswalk mobile-xwalk.gradle 修改,它使用我上面描述的构建方法给出了错误的版本。我尝试在 config.xml 中使用 android-versionCode 参数设置 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 中似乎有一个错误。
此代码部分来自平台/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 如所见...这个代码部分来自平台/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 问题