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

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

Я не уверен, почему Cordova считает правильным изменить код моей версии, и, кроме того, я не уверен, правильно ли это поведение... разве он не должен добавлять номер, а не добавлять его?

Могу ли я просто удалить соответствующий раздел в build.gradle или за этим поведением стоит какой-то скрытый смысл?


person Paul Weber    schedule 05.10.2015    source источник


Ответы (4)


ХОРОШО. похоже, что это серьезная нерешенная ошибка в Cordova версии 5 и выше. Вот ссылка на билет.

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

person Paul Weber    schedule 05.10.2015
comment
Это приятно. Я думал, что ошибся, это все еще в 6.0.0 - person Mathijs Segers; 21.03.2016
comment
Кажется, исправление было недавно объединено с cordova-android, но еще не выпущено (Кордова-андроид 5.1.1 не имеет исправления) - person jakub.g; 19.05.2016
comment
Кажется, это исправлено в Cordova 6.2.0. Однако теперь, когда дополнительная цифра больше не добавляется к коду версии, APK-файлы, которые я создаю с использованием этой версии Cordova, всегда имеют меньший код версии, чем предыдущие, и, следовательно, Google Play не принимает эти APK. - person Ehsan Khaveh; 12.07.2016
comment
Чтобы уточнить, это исправлено в Cordova-Android 5.2.0; версия Cordova CLI не имеет значения. - person JW.; 06.11.2016

Скрипт platform\android\build.gradle добавит 4, 2, 8 или 9 к файлу версии в зависимости от целевой архитектуры - 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">

Нужная версия андроида, в моем случае 103008, затем правильно записывается в файл AndroidManifest.xml, используемый для сборки.

Недостатком является необходимость вручную обновлять версию Android, с другой стороны, можно загрузить apk!

person ChilledFlame    schedule 01.09.2016
comment
Я предпочитаю устанавливать cdvVersionCode в gradle.properties, если нет автоматического способа. - person Amil Waduwawara; 17.09.2017

Для тех, кто хочет сохранить конец «8», я написал хук after_prepare, чтобы упростить его, не нужно поддерживать android-versionCode в config.xml, вручную упомянутый @ChilledFlame.

Примечание. Если вы не сохраните конец «8», когда вы отправляете свое приложение в магазин приложений, код вашей версии 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

person Leon    schedule 07.09.2016
comment
спасибо за крючок. Не подскажете, как добавить его в сборку? Я все еще сталкиваюсь с той же проблемой. Вы нашли какое-либо другое решение? - person krv; 13.10.2017
comment
создайте этот файл в своем проекте: hooks/after_prepare/append_8_to_version_code.js. @крв - person Leon; 13.10.2017
comment
Я не понял, что хотел удалить 8. Почему добавляется 8 и почему кто-то хочет сохранить его, для кого вы написали этот пост? - person krv; 14.10.2017
comment
@krv это для старых приложений, которые были размещены в магазине приложений с номером 8. Как я уже говорил, if you do not keep the end '8', when you submit your app to the appstore, your android version code is smaller then previous which built by Cordova 5, you may encounter "version code downgrade issue". - person Leon; 16.10.2017
comment
Да, спасибо. В настоящее время проблема с кодом версии решается путем добавления его в команду CLI сборки следующим образом: cordova build android -- --versionCode=007 - person krv; 16.10.2017
comment
Да, это решение предназначено только для тех, кто хочет оставить 8, чтобы решить проблему с загрузкой приложения. Кажется, вы столкнулись с другой проблемой. В любом случае, вы исправите это. - person Leon; 16.10.2017

После удаления модификаций versionCode из ./platforms/android/build.gradle «8» все еще добавлялось к versionCode в моем APK.

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

person J. McNerney    schedule 30.09.2016