Pau*_*ber 35 android build automated-deploy google-play cordova
我目前正在研究一个Cordova项目,并且遇到了一个问题,即8个神秘地附加到我的项目的versionCode中.例如:我的原始版本代码为100,新版本代码为1008
我通过整个构建管道跟踪问题,并在Gradle Build脚本中找到了负责任的代码.
if (Boolean.valueOf(cdvBuildMultipleApks)) {
productFlavors {
armv7 {
versionCode cdvVersionCode ?: defaultConfig.versionCode + 2
ndk {
abiFilters "armeabi-v7a", ""
}
}
x86 {
versionCode cdvVersionCode ?: defaultConfig.versionCode + 4
ndk {
abiFilters "x86", ""
}
}
all {
ndk {
abiFilters "all", ""
}
}
}
} else if (!cdvVersionCode) {
def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion")
// Vary versionCode by the two most common API levels:
// 14 is ICS, which is the lowest API level for many apps.
// 20 is Lollipop, which is the lowest API level for the updatable system webview.
if (minSdkVersion >= 20) {
defaultConfig.versionCode += 9
} else if (minSdkVersion >= 14) {
defaultConfig.versionCode += 8
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么cordova认为更改我的版本代码是正确的,此外,我不确定这种行为是否正确...它不应该添加数字而不是追加它吗?
我可以删除build.gradle中的相应部分,或者这种行为背后是否有隐藏的意义?
小智 7
平台\ android\build.gradle脚本将添加4,2,8或9到版本文件依赖于目标architecure - arm/x86或android的目标api版本.
我有一个情况,我的项目的版本号附加了"8",并上传到Play商店.进一步构建似乎已经放弃了8,这意味着我无法上传更多更新 - 一个cordova prepare命令重新创建AndroidManifest.xml文件,覆盖对此的手动更改.
可以通过创建包含内容的platforms\android\gradle.properties文件来解决版本问题 cdvVersionCode=13008
或者,在我的例子中,我将一个android-versionCode属性插入到config.xml中:
<widget xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps" id="uk.co.my.app" android-versionCode="103008" version="1.3.0" xmlns="http://www.w3.org/ns/widgets" defaultlocale="en-GB">
Run Code Online (Sandbox Code Playgroud)
然后将所需的Android版本(在我的情况下为103008)正确写入用于构建的AndroidManifest.xml文件.
下行是不得不手动更新Android版本,上行,可以上传apk!
对于那些想要保持结束'8'的人,我已经写了一个after_prepare钩子来使它变得简单,不需要在@ChilledFlame手动提到的config.xml中维护android-versionCode.
注意:如果您没有保留结束'8',当您将应用程序提交到appstore时,您的Android版本代码比之前由Cordova 5构建的版本小,您可能会遇到"版本代码降级问题".
在文件夹下创建一个文件hooks/after_prepare/,添加以下代码.
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var xml2js = require('xml2js');
function xmlFileToJs(filename, cb) {
var filepath = path.normalize(path.join(__dirname, filename));
fs.readFile(filepath, 'utf8', function (err, xmlStr) {
if (err) throw (err);
xml2js.parseString(xmlStr, {}, cb);
});
}
function jsToXmlFile(filename, obj, cb) {
var filepath = path.normalize(path.join(__dirname, filename));
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
fs.writeFile(filepath, xml, cb);
}
var androidManifestRPath = '../../platforms/android/AndroidManifest.xml';
xmlFileToJs(androidManifestRPath, function(error, data) {
var config = data;
config.manifest.$['android:versionCode'] += '8';
jsToXmlFile(androidManifestRPath, config)
});
Run Code Online (Sandbox Code Playgroud)
或者从以下链接下载: append_8_to_version_code.js
| 归档时间: |
|
| 查看次数: |
4127 次 |
| 最近记录: |