¿Cómo obtener Córdoba 3.4.0 para configurar el nombre / código de la versión de Android en la construcción?

StackOverflow https://stackoverflow.com//questions/23001780

  •  20-12-2019
  •  | 
  •  

Pregunta

Actualmente estoy usando Córdoba 3.4.0 y el CLI para construir mi proyecto para apuntar a Android utilizando el comando:

cordova build android

o

cordova build android --release

MI CONFIG.XML tiene el siguiente especificado:

<widget id="com.example.myapp" 
        version="0.0.3" 
        versionCode="2" 
        ...
        >
</widget>

El Androidmanifest.xml resultante en MyApp / Plataformas / Android no se actualiza con la versión y el código de versión especificado en CONFIG.XML. Se mantiene como predeterminado:

<manifest 
        android:versionCode="1" 
        android:versionName="1.0"
        ...
</manifest>

es este un error? ¿O hay alguna otra forma en que debería especificar el código de versiones y la versión de Versicora para Android en la configuración config.xml? Incluso tal vez, ¿hay un gancho que pueda usar para actualizar androidmanifest.xml con la versión correcta antes de crear?

Preferiría no tener que actualizar esto manualmente cada vez que quiero que cambie como:

  1. es un error propenso y fiddly
  2. no será algo obvio para cambiar para desarrolladores desconocidos
  3. Ninguna de las carpetas de la plataforma se almacenan en el control de origen
  4. Por estas razones, me gustaría que los números de versión se configuren en la Config.xml. ¿Alguna idea?

    gracias

¿Fue útil?

Solución

Por fin con Cordova 3.5.0-0.2.4, agregué este atributo al nodo <widget> nodo config.xml

 android-versionCode="10"

y el AndroidManifest.xml se actualizó correctamente a

 android:versionCode="10" 

Otros consejos

Siguiendo la respuesta de Michaeloryl Hay algo que implementé usando Córdova 3.4 y usando la herramienta Bash Xmlstarlet

Básicamente copia el valor del atributo de código de versiones de CONFIG.XML en AndroidManifest.xml

en lugar de ejecutar esto:

cordova build android --release

RUN [debe convertirse en un script]:

cordova prepare android
# grab version code from config.xml
VERSION_CODE=$(xmlstarlet sel -t -v "//@versionCode" "config.xml")
# write correct version code in manifest
xmlstarlet ed -L -u "/manifest/@android:versionCode" -v "$VERSION_CODE" "platform/android/AndroidManifest.xml"
cordova compile android --release

De esta manera, cuando actualizo a Córdoba 3.5, puedo reutilizar el habitual 'Córdova construir Android --Release'

VersionName no debe ser un problema aquí, ya que se copia de CONFIG.XML en el archivo AndroidManifest.xml en plataformas / Android (al menos en Córxtava 3.4.0). Esa parte no tenía ningún problema con.

Conseguir el código de versiones incrementado, sin embargo, fue toda una tarea. Una serie de tareas, en realidad, que agregué a Grunt's GruntFile.js.

Este es el string-reemplazar tarea . " Grunt String-Reemplazar: VersionCode " incrementará el código de versión almacenado en Package.json. " Grunt String-Reemplazar: AndroidVesionCode " Tomará ese valor y lo colocará en la plataforma / Android / AndroidManifest.xml Archivo:

    // STRING-REPLACE
    'string-replace': {
        versionCode: { // update the version code stored in package.json
            options: {
                replacements: [
                    {
                        pattern: /['"]androidVersionCode['"]:.*?['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            return '"androidVersionCode": "' + (parseInt(p1) + 1) + '"';
                        }
                    }
                ]
            },
            files: {
                'package.json': 'package.json'
            }
        },

        androidVersionCode: { // update the version code stored in AndroidManifest.xml
            options: {
                replacements: [
                    {
                        pattern: /android:versionCode=['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            var pkg = grunt.file.readJSON('package.json');
                            grunt.log.writeln("pkg.androidVersionCode: " + pkg.androidVersionCode);
                            grunt.log.writeln('Returning: ' + 'android:versionCode="' + pkg.androidVersionCode + '"');
                            return 'android:versionCode="' + pkg.androidVersionCode + '"';
                        }
                    }
                ]
            },
            files: {
                'platforms/android/AndroidManifest.xml': 'platforms/android/AndroidManifest.xml'
            }
        }
    }

Se requiere que esto se llame desde el archivo gruntfile.js antes de usar, por supuesto (así como la instalación de NPM, reemplazo de gruñidos):

grunt.loadNpmTasks('grunt-string-replace');

Deberá agregar una línea , como lo siguiente a su archivo Package.json para todo esto para trabajar:

"androidVersionCode": "13", // or whatever value is current for you

Se incrementará por la tarea STRING-SHIRT: versionCode arriba. Puse la línea en Package.json después de la línea que comienza con "Versión":

Un truco importante para que esto funcione es asegurarse de que en lugar de llamar "Córdova construir Android", llame "Córdova Prepare Android", luego "Grunt Reemplazo-String-String-String-String: AndroidVessiode", y Entonces "Córdova Compile Android". La construcción es solo un acceso directo para llamar "preparar" y luego "compilar", y entre esas dos tareas es cuando tiene que modificar el archivo androidmanifest.xml para evitar que se sobrescribe, parece.

Mi proceso de compilación es mucho más complicado porque en realidad estoy incrementando el valor de la versión en Package.json con grunt-bump para gruñir y luego inyectar eso en config.xml usando xmlpoke para grunt y my acerca de la página usando cadena-reemplazo . Yo uso grunt-shell para llamar a todos los córodos Construye pasos para que todo se copie a donde va y se ejecute en el orden correcto.

Déjame saber si esto ayuda.

Fije este problema utilizando el complemento Córdova-personalizado, luego en CONFIG.XML dentro del

<platform name="android">

PUT

<preference name="android-manifest/@android:versionCode" value="108" />

Cambiar el valor al código de la versión deseada ...

me funcionó perfectamente.

Editar código de versión en androidmanifest.xml (/platforms/Android/AndroidManifest.xml)

<manifest android:hardwareAccelerated="true" android:versionCode="2"android:versionName="0.0.2" package="com.ionicframework.zinescreen841178"   xmlns:android="http://schemas.android.com/apk/res/android">

Cambie el código de la versión aquí no en la configuración de CONFIG.XML no se actualiza. Entonces, cuando realice una versión de liberación, generará un nuevo código de versión para usted.

En caso de que alguien siga tropezando sobre este: Todavía es cierto en la última versión de la última versión de Córdova (6.4.0) . Si no tiene algunos Jenkins u otro proceso para hacerlo por usted, puede poner el código de versión en su propia línea

<widget id="com.example.yourapp" 
    android-versionCode="1112" 
    version="1.1.3" 
    xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

y luego ejecute esto para arriba (por ejemplo, use en su script de liberación):

VersionCode=`cat config.xml | grep android-versionCode | sed -e 's/.*android-versionCode=\"\(.*\)\"/\1/'`
VersionCode=$((VersionCode+1))
sed -i "s/.*android-versionCode=\"\(.*\)\"/    android-versionCode=\"$VersionCode\"/" config.xml

yah, sucio pero funciona :)

No tiene la necesidad de cambiar Androidmanifest.xml, ya que es generado por Cordova, por lo que cada vez que se revertido por el manifiesto por CORDOVA

y todo lo responsable es Build.Grade ubicado en la carpeta de la plataforma

Archivo -> Plataforma / Build.Grade

Buscar

IF (MINSDKVERSION>= 20) {DEFAULTONFIG.VERSIONCODE += 9} OF (MINSDKVERSION= 14) {DEFAULTCONFIG.VERSIONCODE += 8}

A medida que su código de versión se actualiza desde aquí, puede cambiarlo o código duro

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top