2016-05-12 22 views
12

Nel nostro progetto Android vogliamo che il nome file del nostro APK contenga informazioni come la data, il nome del ramo git e l'hash del commit breve.Android + Gradle: il posto migliore per impostare archivi dinamici NomeBase

Abbiamo impostazione di questo come parte della nostra defaultConfig

android { 
    defaultConfig { 
     setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")  
    } 
} 

Questo funziona la maggior parte del tempo, ma la nostra generazione a volte non riesce con errori che punta al valore di essere stantio (ad esempio dopo il passaggio rami). Forzare Gradle Sync in Android Studio di solito lo risolve.

Quindi c'è un modo migliore e più affidabile per assicurarsi che la proprietà rimanga aggiornata e imponga una sincronizzazione gradle, se necessario?

+0

Alla fine ho spostato completamente questo gradle e lo faccio dopo la compilazione. Mi piacerebbe una risposta adeguata a questo se –

risposta

0

Se si verifica un errore durante il processo di compilazione, viene visualizzata la finestra Messaggi per descrivere il problema. Gradle può raccomandare alcune opzioni della riga di comando per aiutarti a risolvere il problema, come --stacktrace o --debug. Per utilizzare le opzioni della riga di comando con il processo di compilazione:

  1. Aprire la finestra delle impostazioni o Preferenze: In Windows o Linux, selezionare File> Impostazioni dal menu principale.
  2. Passare a Build, Execution, Deployment> Compiler.
  3. Nel campo di testo accanto a Opzioni della riga di comando, immettere le opzioni della riga di comando.
  4. Fare clic su OK per salvare e uscire.

Gradle applicherà queste opzioni della riga di comando la prossima volta che proverai a creare la tua app.

Ho preso le informazioni dalla pagina this.

+0

che non risolve il problema. So qual è il problema - Gradle non rileva correttamente l'ambiente è cambiato (ramo, data, roba). –

+0

Non sono sicuro se esiste un modo per rilevare automaticamente la modifica e forzare la gradle per la risincronizzazione. Se trovo il modo di farlo, ti farò sapere. –

2

tenta di chiamare clean.execute() prima

android { ... } 

è il compito più economico 'sync' mi viene in mente :)

clean.execute() 
    android { 
     defaultConfig { 
      setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")  
     } 
    } 
+0

haha, grezzo, ma credo che potrebbe "funzionare". Tuttavia, mi piacerebbe qualcosa che è più di una "soluzione" di hacking –

0

ho avuto lo stesso problema, non erano sempre attuale con la costruire.

ho risolto utilizzando:

project.ext.set("archivesBaseName", "myAppName"); 

sotto il blocco defaultconfig, e ho smesso di avere il problema.

Non sono sicuro che funzioni per il ramo, il numero di build o la data, ma vale la pena dargli un colpo. Ecco le mie configurazioni, incluso il blocco predefinitoConfig. Per il mio caso stavo usando solo una versione codificata e il numero di build (lo chiamo versionCode perché l'ho impostato nel manifest in modo dinamico). Ma forse puoi adattarlo alle tue esigenze:

defaultConfig { 
    minSdkVersion 15 
    targetSdkVersion 22 

    versionCode System.getenv("BUILD_NUMBER") as Integer ?: 0 

    versionName "6.2.5." + versionCode 

} 
project.ext.set("archivesBaseName", "myAppname" + defaultConfig.versionName); 
+1

non funzionerà !! 'project.ext.set' rimane memorizzato nella cache fino a quando non si sincronizza il file gradle! se lancerà casualmente '.apk non esiste sul disco' – miv