2010-01-29 12 views
9

Il mio codice è memorizzato in controllo versione SVN. Uso Eclipse per creare la mia applicazione Android.incorpora dettagli di versione in Android APK

Nella mia domanda, ho un about-box. Voglio mostrare la corretta revisione del controllo sorgente/tag/qualsiasi cosa in questo.

C'è un modo di automatizzare questo in modo che la mia stringa di versione nel about-box abbia sempre ragione, o è qualcosa che devo modificare a mano ogni volta che commetto?

Thx per le prime risposte su $ parole chiave $.

L'impostazione della proprietà SVN svn:keywords-Rev fa espandere una private String m_svn_rev = "$Rev:$" ogni volta che invio di file che.

SVN è un sistema di controllo versione per file.

Ciò che porta invece a chiedermi se posso in qualche modo pre-elaborare alcuni file nel buildy Android per iniettare l'output di svnversion?

risposta

1

solo consiglio generico, non si menziona il sistema di controllo versione.

incorpora l'intestazione appropriata (qualcosa come $ Versione: $) nel testo per la casella about. Quando esegui il commit, la nuova versione # verrà archiviata e al momento della creazione verrà mostrato il valore.

[modifica]
1. creare la casella about come origine separata, selezionarla solo quando si incrementa la versione.
2. incastonato la propria versione in un file di intestazione (e non dimenticate di cambiarlo) quindi utilizzare tale stringa di versione nella vostra su Box (come extern string * per esempio)
[/ modifica]

+0

Penso che volevi aggiungere questo link, http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.keywords.html – basszero

+0

no, non l'ho :) l'OP potrebbe avere però. – KevinDTimm

7

Una possibile approccio. Nei tuoi AndroidManifest.xml aggiungere metadati alle vostre attività per mantenere la revisione o qualsiasi altra cosa che si desidera utilizzare

<activity android:name="SampleActivity"> 
    <meta-data android:value="$Rev: 164 $" android:name="com.example.version" /> 
</activity> 

poi nella vostra attività

try { 
    final ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA); 
    final String version = (String)ai.metaData.get("com.example.version"); 
    System.out.println("version: " + version); 
} catch (NameNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Si consiglia inoltre di impostare android:versionName="$Rev$" nel vostro manifesto.

per automatizzare il processo di incrementare il numero di versione in android:versionCode e commettendo il AndroidManifest.xml ci sono varie opzioni, edificio con maven o ant potrebbe essere alternative, ma facciamolo con Eclipse e ADT.

primo luogo, aggiungere un costruttore al progetto (Il mio progetto -> Proprietà -> Costruttori)

alt text

questo costruttore dovrebbe richiamare il android-increment-manifest-version utilizzando del AndroidManifest.xml come argomento

progetto alt text

lo script di Android-increment-manifest-versione è qualcosa come

#! /bin/bash 
# android-increment-manifest-version: 
# increment the version number found in the AndroidManifest.xml file 
# (android:versionCode="n") in place and commit it to subversion. 
# 
# Copyright (C) 2010 Diego Torres Milano - http://dtmilano.blogspot.com 

usage() { 
    echo "usage: $PROGNAME AndroidManifest.xml" >&2 
    exit 1 
} 

PROGNAME=$(basename $0) 

if [ "$#" -ne 1 ] 
then 
    usage 
fi 

MANIFEST="$1" 

perl -npi -e 's/^(.*android:versionCode=")(\d+)(".*)$/"$1" . ($2+1) . "$3"/e;' $MANIFEST 
svn ci -m "Version incremented" $MANIFEST 
+0

Yeap, sto facendo qualcosa del genere, ma è per-file quindi non viene aggiornato ogni volta che invio altri file :( – Will

+0

Che cosa stai usando come sistema di compilazione? Se usi maven o formica, puoi lo script in modo tale che lo faccia ogni volta che costruisci .. –

+0

Ciao ho provato ad usare il tuo script per impostare il valore del tag android: versionName alla versione attuale. Quindi ho impostato android: versionName = "$ Rev $" e nel tuo script ho cambiato (. * android: versionCode = ") in (. * android: versionName =") ma ogni volta il risultato è solo "$ Rev $". Hai qualche suggerimento? – RoflcoptrException

0

Questa potrebbe essere una tangente, ma utilizzo il tag $ Cruse Control per sfogliare la versione sul mio schermo. Ogni volta che controllo qualcosa, CC fa un aggiornamento e sputa una build. Uno dei passaggi nel mio script formica inietta il valore $ label dal sistema di controllo automatico della velocità in un valore all'interno di strings.xml. Questo mi dà un nuovo numero di versione con ogni commit. Posso controllare i log CC e abbinare un numero di build a un numero di revisione SVN.

Probabilmente più lavoro di quello che sei interessato a fare per qualcosa di così semplice. Scommetterei anche che qualsiasi altro sistema di build là fuori avrà una caratteristica simile.

1

Dall'idea di dtmilano.blogspot.com ... ma utilizzando solo la revisione SVN: solo

#! /bin/bash 
# The first argument is full path of AndroidManifest.xml file 
usage() { 
    echo "usage: $PROGNAME AndroidManifest.xml" >&2 
    exit 1 
} 

if [ "$#" -ne 1 ] 
then 
    usage 
fi 

PROGNAME=$(basename $0) 
MANIFEST="$1" 
SVNREVISION=$(svn info | sed -n '5p' | sed -e 's/.*[^0-9]\([0-9]*\).*/\1/g') 

if [ -f $MANIFEST ]; then 
    sed "s/android:versionCode=\"[0-9]*\"/android:versionCode=\"${SVNREVISION}\"/" $MANIFEST > $MANIFEST.tmp 
    mv $FULLPATH.tmp $MANIFEST 
    echo "The android:versionCode properties of file ${MANIFEST} is ${SVNREVISION}"; 
fi; 
#svn commit -m "Update version in $MANIFEST" $MANIFEST 

La versione numero di cambiamento quando SVN cambiamento di revisione, cioè solo quando si svn exec commettere.

Se lo si desidera, è possibile aggiungere un controllo per la revisione modificata, in caso affermativo eseguire il sed per modificare il file. È anche possibile modificare Revisione sull'ultima revisione SVN sul server.

+0

Potresti trovare 'svnversion' utile qui; restituisce solo il numero di build corrente, più un numero che rappresenta le modifiche locali. –

Problemi correlati