spec que name engine android cordova build google-play automated-deploy

que - ¿Por qué Cordova/Phonegap agrega 8 a mi código de versión de Android?



phonegap b (4)

Después de eliminar las modificaciones de versionCode de ./platforms/android/build.gradle, todavía se estaba agregando un "8" al código de versión en mi APK.

Se requirió una "limpieza de Córdoba" antes de que el APK recién generado tuviera el código de versión correcto.

Actualmente estoy trabajando en un proyecto de Cordova y tuve el problema de que 8 se adjuntó misteriosamente al versionCode de mi proyecto. Por ejemplo: mi código de versión original era 100, el nuevo código de versión es 1008

Seguí el problema a través de toda mi canalización de compilación y encontré el código responsable en el script de 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 } }

No estoy seguro de por qué cordova piensa que es correcto cambiar el código de mi versión, y además, no estoy seguro si este comportamiento es correcto ... ¿no debería agregar el número y no agregarlo?

¿Puedo eliminar la sección correspondiente en build.gradle o hay algún sentido oculto detrás de este comportamiento?


El script plataformas / android / build.gradle agregará 4, 2, 8 o 9 al archivo de versión dependiente de architecure - arm / x86 o la versión api de android.

Tuve una situación en la que mi proyecto tenía un "8" agregado al número de versión, y este se cargó en Play Store. Otras compilaciones parecían haber dejado caer el 8, lo que significaba que no podía cargar más actualizaciones: un comando cordova prepare recrea el archivo AndroidManifest.xml, anulando los cambios manuales a este.

El problema de la versión se puede solucionar creando un archivo de plataformas / android / gradle.properties con los contenidos cdvVersionCode=13008

Alternativamente, en mi caso, inserté un atributo android-versionCode en 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">

La versión deseada de Android, en mi caso 103008, se escribe correctamente en el archivo AndroidManifest.xml utilizado para la compilación.

¡Lo malo es tener que actualizar manualmente la versión de Android, al alza, puede subir el apk!


OK parece que este es un error importante no resuelto en Cordova Versión 5 en adelante. Aquí está el enlace al boleto.

No tuve ningún problema al eliminar el código ofensivo de mi build.gradle


Para aquellos que quieren mantener el final ''8'', he escrito un gancho after_prepare para hacerlo más fácil, no es necesario mantener el android-versionCode en config.xml mencionado manualmente por @ChilledFlame.

Nota: si no mantiene el final ''8'', cuando envíe su aplicación a la tienda de aplicaciones, su código de versión de Android es más pequeño que el anterior creado por Cordova 5, puede encontrar "problema de versión del código de versión".

crea un archivo en la carpeta hooks/after_prepare/ , agrega el siguiente código.

#!/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) });

o descarga desde este enlace: append_8_to_version_code.js