Почему Cordova / Phonegap добавляет 8 в мой код версии Android?

В настоящее время я работаю над проектом в Кордове, и проблема в том, что 8 был добавлен таинственным образом в версию Code моего проекта. Например: Мой исходный код версии был 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 или есть какой-то скрытый смысл этого поведения?

Solutions Collecting From Web of "Почему Cordova / Phonegap добавляет 8 в мой код версии Android?"

OK кажется, что это серьезная неразрешенная ошибка в Кордове версии 5 и выше. Вот ссылка на билет.

У меня не было проблем при удалении нарушившего кода из моего build.gradle

Скрипт platform \ android \ build.gradle добавит 4, 2, 8 или 9 к файлу версии, зависящему от целевого architecure – arm / x86 или целевой версии api для Android.

У меня была ситуация, когда в моем проекте было добавлено «8» к номеру версии, и это было загружено в магазин Play. Дальнейшие сборки, похоже, снизили число 8, что означало, что я не смог загрузить дополнительные обновления. cordova prepare воссоздает файл AndroidManifest.xml, переопределяя его вручную.

Проблема с версией может быть решена путем создания файла platform \ 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, используемый для сборки.

Downside приходится вручную обновлять версию 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».

«Кордова чистая» требовалась до того, как у вновь созданного APK был бы правильный код версии.