2011-02-08 12 views
9

Ho un'applicazione caricata in repo Subversion/SVN. È possibile utilizzare lo script per modificare in qualche modo il codice di versione dell'applicazione memorizzato in AndroidManifest? Intendo durante/dopo il checkout/l'aggiornamento?Come automatizzare l'incremento del codice di versione in AndroidManifest?

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="mypackage" 
      android:versionCode="100000" 
      android:versionName="1.0"> 

risposta

4

SVN ha keyword substitution che può essere utilizzato per mettere il numero di revisione in un file. Tuttavia, questo comporterà la revisione quando l'ultimo file manifest è stato modificato l'ultima volta, che non è quello che desideri.

Il modo migliore per ottenere ciò che si desidera è chiamare lo svnversion dallo script di build e incorporare l'output nel file manifest da lì. È possibile avere un file manifest.template sotto controllo di versione che può essere utilizzato dallo script di build per generare il file manifest reale. Inserisci una parola segnaposto nel modello e sostituiscila con il numero di revisione ottenuto con svnversion.

modifica: in Eclipse probabilmente use an Ant script, and invoke it before the normal build. L'esempio collegato genera un file di classe con il numero di revisione, ma è anche possibile generare un file manifest in modo molto simile.

+0

Tutte le idee su come si potrebbe fare questo se stavano usando Eclipse? – Felix

+0

Sarei anche lieto di sapere come farlo usando Intellij IDEA – barmaley

+0

@barmaley: IDEA ha un supporto simile per l'esecuzione degli script delle formiche, vedi [Integrazione Intellij And e Maven] (http: //www.jetbrains.com/idea/features/ant_maven.html) –

0

È possibile farlo in fase di compilazione utilizzando il target Ant per xpath fornito dagli script di build Android predefiniti per ottenere il valore corrente, quindi utilizzare Ant replace.

+0

Per favore dammi qualche link – barmaley

4

Ho fatto questo aggiungendo un target di build aggiuntivo, quindi il codice di versione viene incrementato quando si crea il progetto, non quando si esegue il commit su SVN. Queste sono le istruzioni per farlo funzionare in IntelliJ IDEA.

In primo luogo, aggiungere un nuovo file nella root del vostro progetto chiamato svn-revision.build.xml con il seguente contenuto:

<project default="svn-revision"> 
    <target name="svn-revision"> 
     <exec executable="sh" outputproperty="revision"> 
      <arg value="-c" /> 
      <arg value="svnversion | sed -e 's/^[^:]*://;s/[A-Za-z]//'" /> 
     </exec> 
     <echo>Revision (app): ${revision}</echo> 
     <replaceregexp file="AndroidManifest.xml" match='android:versionCode="([^".]+)(\.[^"]*)?"' replace='android:versionCode="${revision}"' /> 
    </target> 
</project> 

Poi nel menu andare a View > Tools > Ant Build, quindi premere il piccolo pulsante + nella finestra e aggiungere il file appena creato. Facendo clic sul pulsante verde "Esegui" nella finestra Ant Build verrà eseguito immediatamente lo script. Per fare in modo che lo script venga eseguito ogni volta che si crea, sarà necessario impostare il target "svn-revision" come target predefinito.

0

L'approccio SVN va bene, ma non è necessariamente adatto a tutti. Io preferisco avere controllo su App versionName e versionCode incremento così ho fatto la mia Java semplice app per fare che

Caratteristiche:

  • versionName si suppone che sia major.minor.point (come consigliato dal Android doc)
  • versionName può essere conservata, reimpostare 1.0.0, o incrementato (una singola parte di esso e finali part (s) è/sono impostati a 0)
  • versionCode sarà sostituito da Unix Time

Disponibile qui: android manifest build number

Problemi correlati