Wie kann ich Cordova 3.4.0 dazu bringen, den Namen/Code der Android-Version beim Build festzulegen?

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

  •  20-12-2019
  •  | 
  •  

Frage

Ich verwende derzeit Cordova 3.4.0 und die CLI, um mein Projekt mit dem folgenden Befehl für Android zu erstellen:

cordova build android

ODER

cordova build android --release

In meiner config.xml ist Folgendes angegeben:

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

Die resultierende AndroidManifest.xml in myapp/platforms/android wird nicht mit der in config.xml angegebenen Version und dem Versionscode aktualisiert.Es bleibt die Standardeinstellung:

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

Ist das ein Fehler?Oder gibt es eine andere Möglichkeit, den Versionscode und den Versionsnamen für Android in der config.xml anzugeben?Gibt es vielleicht sogar einen Hook, mit dem ich AndroidManifest.xml vor dem Build mit der richtigen Version aktualisieren kann?

Ich möchte dies lieber nicht jedes Mal manuell aktualisieren müssen, wenn ich möchte, dass es sich wie folgt ändert:

  1. Es ist fehleranfällig und fummelig
  2. Für unbekannte Entwickler wird es keine offensichtliche Sache sein, etwas zu ändern
  3. Keiner der Plattformordner wird in der Quellcodeverwaltung gespeichert

Aus diesen Gründen möchte ich, dass die Versionsnummern in der config.xml festgelegt werden.Irgendwelche Ideen?

Danke

War es hilfreich?

Lösung

Endlich mit Cordova 3.5.0-0.2.4 Ich habe dieses Attribut zum hinzugefügt <widget> Knoten config.xml

 android-versionCode="10"

und das AndroidManifest.xml wurde ordnungsgemäß aktualisiert

 android:versionCode="10" 

Andere Tipps

Nach der Antwort von Michaeloryl gibt es etwas, das ich mit CORDOVA 3.4 implementiert habe und das Bash-Tool Xmlstarlet

Grundsätzlich kopiert er den Wert des Versioncode-Attributs von config.xml in androidmanifest.xml

Anstatt dies zu leiten:

generasacodicetagpre.

run [sollte ein Skript werden]:

generasacodicetagpre.

Auf diese Weise kann ich, wenn ich auf Cordova 3.5 aktualisiere, den üblichen "Cordova Build Android - Release" wiederverwenden kann

VersionName sollte hier nicht ein Problem sein, da er von config.xml in die androidmanifest.xml-Datei in Plattformen / Android kopiert wird (zumindest auf CORDOVA 3.4.0). Dieser Teil hatte ich kein Problem mit.

Erzielung von Versionscode inkrementiert, war jedoch eine recht Aufgabe. Eine Reihe von Aufgaben, eigentlich, dass ich zu Grunt's Gruntfile.js hinzugefügt habe.

Dies ist der string-ersetzen Aufgabe . " grunce string-ersetzen: versioncode " wird der in package.json gespeicherte Versioncode inkrementiert. " grunze string-ersetzen: androidversioncode " wird diesen Wert annehmen und in die Plattformen / Android / androidmanifest.xml-Datei legen:

generasacodicetagpre.

Es ist erforderlich, dass diese vor der Verwendung von der GruntFile.js-Datei aufgerufen wird. Natürlich (sowie npm install grunt-string-ersetzen):

generasacodicetagpre.

Sie müssen eine Zeile hinzufügen, z. B. das Folgende Ihrer paket.json-Datei hierfür, damit alles funktioniert:

generasacodicetagpre.

Es wird durch die string-ersetze inkrementiert: VersionCode oben. Ich lege die Zeile in paket.json nach der Zeile, die mit "Version" beginnt:

ein wichtiger Trick , um diese zur Arbeit zu bringen Dann "Cordova Compile Android". Build ist nur eine Verknüpfung zum Anrufen von "Bereiten" und dann "Compile", und zwischen diesen beiden Aufgaben ist es, wenn Sie die Datei androidmanifest.xml ändern müssen, um zu verhindern, dass es nicht überschrieben wird, erscheint es.

Mein Build-Prozess ist viel komplizierter, weil ich tatsächlich den Versionswert in package.json mit Grunt-Bump für Grunzen und dann injizieren Sie das in config.xml mit xmlpoke für Grunzen und meine Über Seite mit string-ersetzen . Ich verwende grunt-shell , um alle Cordova tatsächlich anzurufen Bauen Sie die Schritte auf, um alles zu bekommen, was in der richtigen Reihenfolge kopiert wird und in der richtigen Reihenfolge ausgeführt wird.

lass es mich wissen, wenn das hilft.

Ich habe dieses Problem mit Currova-Custom-Config-Plugin behoben, dann in config.xml in der

generasacodicetagpre.

Put

generasacodicetagpre.

Ändern Sie den Wert in den gewünschten Versionscode ...

es funktionierte perfekt für mich.

Versionscode bearbeiten in androidmanifest.xml (/platforms/android/androidmanifest.xml)

generasacodicetagpre.

Ändern Sie den Versionscode hier nicht in der config.xml IT-Aktualisierung. Wenn Sie einen Release-Build annehmen, wird er für Sie neue Versionscode generieren.

falls jemand immer noch stolpert: Es stimmt immer noch auf der aktuell neuesten Cordova-Version (6.4.0) . Wenn Sie keine Jenkins oder einen anderen Prozess haben, um dies für Sie zu tun, können Sie den Versionscode in eigener Zeile setzen

generasacodicetagpre.

und führen Sie diese dann auf up 'aus (z. B. Verwendung in Ihrem Release-Skript):

generasacodicetagpre.

yah, schmutzig, aber arbeitet :)

Sie müssen nicht, dass AndroidManifest.xml wechseln müssen, da es von Cordova selbst generiert wird, sodass alle Ihre Änderungen in der Manifest von CordOVA

zurückgekehrt werden.

und alles ist verantwortlich ist eröffnet. Gradle befindet sich im Plattformordner

Datei -> Plattform / Build.gradle

Suche nach

wenn (minsdkversion>= 20) {defaultconfig.versioncode += 9} else, wenn (minsdkversion= 14) {defaultconfig.versioncode += 8}

Wenn Ihr Versionscode von hier aktualisiert wird, können Sie ihn oder einen harten Code ändern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top