Ответ 1
O.K. похоже, что это серьезная неразрешенная ошибка в Кордове версии 5 и выше. Вот ссылка на билет.
У меня не возникло проблем при удалении кода-нарушителя из моего build.gradle
В настоящее время я работаю над проектом в Кордове, и проблема в том, что 8 был добавлен таинственным образом в версию Code моего проекта. Например: Мой исходный код версии был 100, новый код версии 1008
Я проследил проблему через весь мой конвейер сборки и нашел ответственный код в Gradle Build script.
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
}
}
Я не уверен, почему cordova считает правильным изменить мой код версии, и, кроме того, я не уверен, правильное ли это поведение... не следует добавить номер и не добавлять его?
Можно ли просто удалить соответствующий раздел в build.gradle или есть какой-то скрытый смысл этого поведения?
O.K. похоже, что это серьезная неразрешенная ошибка в Кордове версии 5 и выше. Вот ссылка на билет.
У меня не возникло проблем при удалении кода-нарушителя из моего build.gradle
Платформы\android\build.gradle script добавят 4, 2, 8 или 9 к файлу версии, зависящему от целевого architecure - arm/x86 или целевой версии api для Android.
У меня была ситуация, когда в моем проекте было добавлено "8" к номеру версии, и это было загружено в магазин Play. Дальнейшие сборки, похоже, снизили значение 8, а это значит, что я не смог загрузить дополнительные обновления. Команда cordova prepare
воссоздает файл AndroidManifest.xml, переопределяя его вручную.
Проблема с версией может быть решена путем создания файла платформы \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">
Желаемая версия Android в моем случае 103008 затем правильно записывается в файл AndroidManifest.xml, используемый для сборки.
Даунсайд должен вручную обновить версию Android, вверх, можно загрузить apk!
Для тех, кто хочет сохранить конец "8", я написал ссылку на after_prepare, чтобы упростить ее, не нужно поддерживать android-versionCode в config.xml вручную, указанную @ChilledFlame.
Примечание. Если вы не сохраняете конец "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)
});
или скачать по этой ссылке: append_8_to_version_code.js
После удаления модификаций VersionCode из. /platforms/android/build.gradle в моем APK все еще добавлялось "8" к версии Code.
"Кордовая чистая" требовалась до того, как вновь созданный APK будет иметь в нем правильный код версии.