Comment faire en sorte que Cordova 3.4.0 définisse le nom/code de la version Android lors de la construction ?

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

  •  20-12-2019
  •  | 
  •  

Question

J'utilise actuellement Cordova 3.4.0 et la CLI pour créer mon projet afin de cibler Android à l'aide de la commande :

cordova build android

OU

cordova build android --release

Mon config.xml contient les éléments suivants :

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

Le fichier AndroidManifest.xml résultant dans monapplication/plateformes/android n'est pas mis à jour avec la version et le code de version spécifiés dans config.xml.Il reste par défaut :

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

Est-ce un bug ?Ou existe-t-il un autre moyen de spécifier le code version et le nom version pour Android dans le fichier config.xml ?Peut-être même, existe-t-il un hook que je peux utiliser pour mettre à jour AndroidManifest.xml avec la version correcte avant la construction ?

Je préférerais ne pas avoir à mettre à jour cela manuellement à chaque fois que je souhaite qu'il change comme :

  1. C'est sujet aux erreurs et fastidieux
  2. Ce ne sera pas une chose évidente à changer pour les développeurs peu familiers
  3. Aucun des dossiers de la plateforme n'est stocké dans le contrôle de code source

Pour ces raisons, j'aimerais que les numéros de version soient définis dans le config.xml.Des idées?

Merci

Était-ce utile?

La solution

Enfin avec Cordova 3.5.0-0.2.4 J'ai ajouté cet attribut au <widget> nœud config.xml

 android-versionCode="10"

et le AndroidManifest.xml a été correctement mis à jour pour

 android:versionCode="10" 

Autres conseils

Après la réponse de MichaeloryL Il y a quelque chose que j'ai mis en œuvre à l'aide de Cordoue 3.4 et à l'aide de l'outil Bash Xmlstarlet

Fondamentalement, il copie la valeur de l'attribut VersionCode à partir de config.xml dans AndroidManifest.xml

au lieu d'exécuter ceci:

cordova build android --release

Run [devrait devenir 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 cette façon, lorsque je passe à la suite de Cordoue 3.5, je peux réutiliser la "Cordova" habituelle Android --Release '

VersionName ne devrait pas être un problème ici, car il est copié à partir de config.xml au fichier AndroidManifest.xml dans les plates-formes / Android (au moins sur Cordova 3.4.0). Cette partie que je n'avais eu aucun problème avec.

Obtenir que la version est incrémentée, cependant, était toute une tâche. Une série de tâches, en fait, que j'ai ajouté à Gruntfile.js.

Ceci est le string-remplacer Tâche . " grogny string-remplacer: la versionCode " incrémentera la versionCode stockée dans Package.json. " grunt string-remplacer: androidversionCode " prendra cette valeur et le mettre dans le fichier plateformes / androïde / androidmanifest.xml:

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

Ça nécessite ce à appeler à partir du fichier gruntfile.js avant utilisation, bien sûr (ainsi que NPM Install GRunT-String-Remplacement):

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

Vous devrez ajouter une ligne telle que ci-après à votre fichier package.json pour tout ce travail:

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

Il sera incrémenté par le String-remplacer: la tâche ci-dessus. Je mets la ligne dans Package.json après la ligne qui commence par "Version":

un tour important pour que cela fonctionne est de vous assurer que, au lieu d'appeler "Cordoua Construire Android", vous appelez "Cordova préparer Android", puis "GRUNT Remplacer-String: AndroidVersionCode", et Puis "Cordoue compile Android". Construire n'est qu'un raccourci pour appeler "préparer" puis "compiler", et entre ces deux tâches est lorsque vous devez modifier le fichier androidmanifest.xml pour empêcher son écrasement, il semble.

Mon processus de construction est beaucoup plus compliqué car je incrémente la valeur de la version dans package.json avec grunt-bosse pour grognement, puis injectant cela dans config.xml en utilisant xmlpoke pour GRUNT et ma page à propos de string-remplacer . J'utilise grognate-shell pour appeler tout le Cordova Construire des étapes pour que tout copié sur l'endroit où il se passe et s'exécute dans le bon ordre.

laissez-moi savoir si cela aide.

J'ai corrigé ce problème à l'aide du plug-in Cordova-Custom-Config, puis dans Config.XML à l'intérieur de la

<platform name="android">

mettre

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

Modifier la valeur au code de version recherché ...

Cela a parfaitement fonctionné pour moi.

Modifier le code de version dans AndroidManifest.xml (/platforms/andrroid/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">

Modifier le code de version ici non dans la mise à jour de config.xml. Elle est à jour lorsque vous prenez une version de version, elle générera un nouveau code de version pour vous.

Au cas où quelqu'un trébuche toujours sur celui-ci: Il est toujours vrai sur la dernière version de Cordova actuellement <6.4.0) . Si vous n'avez pas de Jenkins ou d'un autre processus pour le faire pour vous, vous pouvez mettre le code de version dans sa propre ligne

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

puis exécutez ceci pour le haut 'IT (E.G. Utilisez-le dans votre libération):

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, sale mais fonctionne :)

Vous n'avez pas besoin de changer AndroidManifest.xml car il est généré par Cordova lui-même afin que tous vos changements de manifeste soient retournés par Cordova

et tout cela est responsable est Build.Gradle situé dans le dossier de la plateforme

Fichier -> Plate-forme / Build.Gradle

Rechercher

si (minsdkversion>= 20) {defaultconfig.versionCode += 9} else Si (MINSDKVersion= 14) {Defaultconfig.versionCode += 8}

Comme votre code de version est mis à jour à partir d'sieur, vous pouvez le modifier ou le code dur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top