![](/img/trans.png)
[英]How to check cordova android version of a cordova/phonegap project?
[英]Why does Cordova/Phonegap append 8 to my Android Version Code?
我目前正在研究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
}
}
我不确定为什么科尔多瓦认为更改我的版本代码是正确的,此外,我不确定这种行为是否正确...不应该加上数字而不是附加数字吗?
我可以只删除build.gradle中的相应部分,还是在这种行为背后隐藏一些隐喻?
好的,这似乎是Cordova版本5及更高版本中的一个主要未解决的错误。 这是票证的链接。
从build.gradle删除有问题的代码时,我没有问题
platform \\ android \\ build.gradle脚本会将4、2、8或9添加到版本文件中,具体取决于目标architecure-arm / x86或android的目标api版本。
我遇到的情况是,我的项目在版本号后附加了“ 8”,并将其上载到Play商店。 进一步的构建似乎已经放弃了8,这意味着我无法上传进一步的更新cordova prepare
命令重新创建了AndroidManifest.xml文件,覆盖了对此的手动更改。
可以通过创建内容为cdvVersionCode=13008
的platform \\ android \\ gradle.properties文件来解决版本问题
另外,就我而言,我在config.xml中插入了android-versionCode属性:
<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">
然后将所需的Android版本(在我的情况下为103008)正确写入用于构建的AndroidManifest.xml文件。
缺点是必须手动更新android版本,优点是可以上传apk!
对于那些想要保留结尾“ 8”的用户,我编写了一个after_prepare钩子使其变得容易,而无需维护@ChilledFlame手动提到的config.xml中的android-versionCode。
注意:如果不保留结尾“ 8”,则在将应用程序提交到应用商店时,您的android版本代码比Cordova 5构建的Android版本代码要小,您可能会遇到“版本代码降级问题”。
在文件夹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)
});
或从以下链接下载: append_8_to_version_code.js
从./platforms/android/build.gradle删除versionCode修改后,APK中的versionCode仍附加了“ 8”。
在新生成的APK中包含正确的versionCode之前,需要“ cordova clean”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.