2015-02-13 3 views
21

Ho bisogno di scrivere uno script gradle per la versione automatica dell'applicazione su ogni commit. Devo includere anche l'hash di commit come riferimento nell'applicazione per i tester.Scrittura gradle to autoversion e include l'hash di commit in Android

Sono confuso su come funziona il controllo automatico delle versioni. Qualcuno può spiegare il processo di autoversion?

grazie

risposta

62

ho incontrato un problema simile, ma non ha voluto modificare il versionName per includere il git hash. Volevamo tenerlo come qualcosa come 1.2.2, ma ho ancora la possibilità di visualizzare l'hash git nell'interfaccia utente.

Ho modificato il codice da the other answer here per utilizzare l'attività buildConfigField per generare un valore BuildConfig.GitHash a cui è possibile fare riferimento nel codice Java.

Aggiungere questo sopra la sezione android di file di build.gradle del vostro modulo:

def getGitHash = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'rev-parse', '--short', 'HEAD' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

quindi aggiungere la seguente riga alla sezione defaultConfig della sezione android del build.gradle, vale a dire al di sotto versionName:

buildConfigField "String", "GitHash", "\"${getGitHash()}\"" 

Questo genera la seguente riga nel file BuildConfig.java generato automaticamente:

// Fields from default config. 
public static final String GitHash = "e61af97"; 

Ora è possibile ottenere l'hash git nel codice Java con BuildConfig.GitHash.

+0

HI, sto ricevendo questo errore: errore CreateProcess = 2, Il sistema non riesce a trovare il file specificato, qualsiasi lead il mio co-debase è su GitLabs – Haroon

+0

@Haroon: Controlla che il percorso di git sia nella variabile di ambiente PATH . Controlla questo aprendo un nuovo prompt dei comandi/terminale e digitando "git --version" – Paul

+0

Grazie a @Paul esattamente quello che hai scritto ho fatto, ho appena reso disponibile la git alla variabile di ambiente – Haroon

6

Una soluzione ideale potrebbe essere afferrando la versione dal git status del progetto. In questo modo il controllo delle versioni non si basa sul fatto che si ricordi di aumentare una variabile o di modificare qualsiasi testo nei file gradle o config.

È possibile trovare un esempio descrittivo http://ryanharter.com/blog/2013/07/30/automatic-versioning-with-git-and-gradle/

L'idea è sempre il git informazioni con la funzione getVersionName, e l'uso che la funzione nello script Gradle.

Un altro approccio (basato anche a ottenere le informazioni sulla versione da Git) potrebbe essere questa, come plugin Gradle: https://github.com/GeoNet/gradle-build-version-plugin

+2

Benvenuti in StackOverflow. Grazie per la tua risposta! Questo è un buon inizio, ma se hai incluso anche un po 'più di informazioni da quei link nel corpo della tua risposta (se è possibile distillare qui le informazioni chiave), renderebbe la tua risposta ancora migliore.Ricorda, se tutte le informazioni sono nel link ma non qui, se il link cambia la tua risposta perde il suo valore. –

4

Se si desidera aggiungere impegnarsi id dopo versionName, sembra 1111-abcdefg

aggiungere qui sotto nella tua app/build.gradle sopra la sezione Android (non il build.gradle radice)

def getVersionName = { -> 
def stdout = new ByteArrayOutputStream() 
exec { 
commandLine 'git', 'rev-parse', '--short' , 'HEAD' 
standardOutput = stdout 
} 
return stdout.toString().trim() 
} 

aggiungere di seguito in Android {{defaultconfig QUI}}

versionNameSuffix '-'+getVersionName() 
0

vale la pena anche guardando grgit - Groovy/Gradle Git, che può aiutare a semplificare l'estrazione di informazioni, tra cui Git comm it-hashes, in uno script Gradle.

Problemi correlati