Come ottenere Cordova 3.4.0 per impostare il nome / codice di versione Android su Build?

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

  •  20-12-2019
  •  | 
  •  

Domanda

Attualmente sto usando Cordova 3.4.0 e il CLI per creare il mio progetto per indirizzare Android utilizzando il comando:

cordova build android
.

o

cordova build android --release
.

My Config.xml ha il seguente specificato:

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

Il risultato AndroidManifest.xml in MyApp / Platforms / Android non viene aggiornato con la versione e il codice versione specificato in Config.xml. Rimane come predefinito:

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

è questo un bug? O c'è qualche altro modo dovrei specificare il versioncode e il nome del nome per Android in Config.xml? Anche forse, c'è un gancio che posso usare per aggiornare AndroidManifest.xml con la versione corretta prima della build?

Preferirei non dover aggiornarlo manualmente ogni volta che voglio cambiare come:

    .
  1. Errore è inclinato e vibrante
  2. Non sarà una cosa ovvia da cambiare per gli sviluppatori sconosciuti
  3. Nessuna delle cartelle della piattaforma sono memorizzate nel controllo sorgente
  4. Per questi motivi vorrei che i numeri di versione siano impostati nel config.xml. Qualche idea?

    Grazie

È stato utile?

Soluzione

Alla fine con Cordova 3.5.0-0.2.4 ho aggiunto questo attributo al nodo <widget> config.xml

 android-versionCode="10"
.

e il AndroidManifest.xml è stato correttamente aggiornato a

 android:versionCode="10" 
.

Altri suggerimenti

Seguendo la risposta di Michaeloryl c'è qualcosa che ho implementato utilizzando Cordova 3.4 e utilizzando lo strumento Bash XMLStarlet

Fondamentalmente copia il valore dell'attributo VersionCode da Config.xml in AndroidManifest.xml

Invece di eseguire questo:

cordova build android --release
.

Run [dovrebbe diventare uno 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
.

In questo modo quando quando aggiornerò a Cordova 3.5, posso riutilizzare il consueto 'Cordova Build Android --RELEASS'

VersionName non dovrebbe essere un problema qui, in quanto viene copiato da Config.xml al file AndroidManifest.xml in piattaforme / Android (almeno su Cordova 3.4.0). Quella parte non ho avuto problemi con.

Ottenere il versioncode incrementato, tuttavia, è stato un compito piuttosto compito. Una serie di compiti, in realtà, che ho aggiunto a Gruntfile.js Grunt.

Questo è il String-String-Sostituisci Attività . " Grunt String-Sostituisci: VersionCode " incrementerà il versioncode memorizzato in confezione.json. " Grunt String-Sostituisci: AndroidversionCode " prenderà quel valore e lo inserirà nella piattaforma / Android / AndroidManifest.xml File:

    // 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'
            }
        }
    }
.

Richiede questo da definire dal file Gruntfile.js prima dell'uso, ovviamente (così come NPM Install Grient-String-Sostituisci):

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

Dovrai aggiungere una riga come il seguente al tuo pacchetto.json file per questo tutto da lavorare:

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

Verrà incrementato dal String-Sostituisci: VersionCode Attività sopra. Ho messo la linea in confezione.json dopo la linea che inizia con "Versione":

Un trucco importante per ottenere questo al lavoro è assicurarsi che invece di chiamare "Cordova Build Android" chiami "Cordova preparare Android", quindi "Grunt Sostituisc-string: AndroidVersionCode", e Quindi "Cordova Compile Android". Build è solo una scorciatoia per chiamare "preparare" e quindi "compilare", e tra questi due compiti è quando è necessario modificare il file AndroidManifest.xml per evitare che venga sovrascritto, sembra.

Il mio processo di costruzione è molto più complicato perché in realtà sto incrementando il valore della versione in package.json con grunt-bump per grugnito e quindi iniettandolo in config.xml usando xmlPoke per grugnito e la mia pagina in merito usando string-sostituisci . Io uso grug-shell per chiamare effettivamente tutto il Cordova Costruisci i passaggi per ottenere tutto copiato su dove va e correre nell'ordine giusto.

Fammi sapere se questo aiuta.

Ho risolto questo problema utilizzando il plug-in CORDOVA-Custom-Config, quindi in Config.xml all'interno del

<platform name="android">
.

PUT

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

Cambia il valore del codice della versione desiderato ...

ha funzionato perfettamente per me.

Modifica codice versione in 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">
.

Modifica il codice della versione qui non nel config.xml Non si aggiorna. Quando si effettua una versione di rilascio genererà un nuovo codice di versione per te.

Nel caso in cui qualcuno stia ancora inciampando su questo: È ancora vero sull'attualmente Ultima versione Cordova (6.4.0) . Se non hai dei jenkins o altro processo per farlo per te, puoi inserire il codice della versione nella propria riga

<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">
.

e quindi eseguirlo fino a "IT (ad esempio Utilizzo nel tuo rilascio-script):

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, sporco ma funziona :)

Non è necessario modificare AndroidManifest.xml come è generato da Cordova stesso in modo che tutte le tue modifiche nel manifest siano revocato da Cordova

E tutto ciò è responsabile è build.gradle situato nella cartella della piattaforma

File -> Piattaforma / Build.Gradle

Ricerca di

if (minsdkversion>= 20) {defaultconfig.versioncode += 9} Else se (minsdkversion= 14) {defaultconfig.versioncode += 8}

Come il codice della versione viene aggiornato da qui puoi cambiarlo o il codice rigido

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top