2015-04-08 15 views
12

mi piacerebbe avere un file di layout che fa riferimento l'attributo versionName nel mio file Gradle:Riferimento build.gradle attributo versionName nel layout xml

... 
defaultConfig { 
    applicationId "se.test.myapp" 
    minSdkVersion 14 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 
} 
.... 

Qualcosa di simile

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/versionName" 
    /> 

C'è un modo pulito per questo, senza dover impostare il layout nel mio codice?

risposta

25

Secondo http://tools.android.com/tech-docs/new-build-system è possibile creare le risorse direttamente dal Gradle, in modo da mettere

android { 
... 
    defaultConfig { 
     applicationId "se.test.myapp" 
     minSdkVersion 14 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    ... 
    applicationVariants.all { variant ->  
     variant.resValue "string", "versionName", variant.versionName 
    } 
    ... 
} 

nella tua build.gradle farà il trucco

Esso crea file di risorse generated.xml durante la compilazione della cartella generated/res che è incluso insieme alle risorse fornite da te nella cartella dei valori. Quindi puoi usare android:text="@string/versionName" per fare riferimento a questo valore. Sfortunatamente, a volte l'IDE non è in grado di risolvere questo riferimento, quindi sembrerà un errore nella tua risorsa di layout (mentre è un'istruzione valida e verrà risolta in fase di runtime).

È possibile eliminare l'errore facendo clic all'interno di "@ string/versionName", quindi Alt + Invio, nel menu selezionare "Crea valore stringa risorsa" versionName ", quindi" Elimina tag ".

+0

Grazie per questo! Potresti spiegare in modo più dettagliato su come applicare questo e come funziona? Immagino che crei una variabile stringa per me, ma come faccio a farla riferimento nel mio elemento TextView? – Marcus

+6

Crea il file di risorse 'generate.xml' durante la compilazione nella cartella' generate/res' che è inclusa insieme alle risorse fornite dall'utente nella cartella 'values'. Quindi puoi usare 'android: text =" @ string/versionName "' per fare riferimento a questo valore.Sfortunatamente, a volte l'IDE non può risolvere questo riferimento, quindi sembrerà un errore nella tua risorsa di layout (mentre è un'istruzione valida e verrà risolta in runtime). – OleGG

+0

Ho notato l'errore, ma come hai detto, è stato risolto in fase di esecuzione. Risposta molto bella, funziona come un fascino! Apprezzato. – Marcus

0

Credo che si possa impostare anche VersionName nel manifest di Android con una risorsa stringa. Come questo:

AndroidManifest.xml

android:versionName="@string/versionName" 

vostro layout xml

android:text="@string/versionName" 

Ma io non so come compatibile con questo obiettivo è quello Gradle.

+0

Questo sembra non funzionare: -/ – scorpiodawg

2

Modifica: non utilizzare Jack solo per questo. Come da the official announcementJack è deprecato (per tutto tranne le funzionalità di Java 8).

ho usato una risorsa di stringa:

<resources> 
    <string name="app_ver" translatable="false">1.0.2</string> 
    ... 
</resources> 

nel build.gradle dell'app:

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 

    defaultConfig { 
     ... 
     versionName "@string/app_ver" 
     jackOptions { 
      enabled true   
     } 
    } 
... 
} 

E in questo modo:

<Preference 
    android:title="Version" 
    android:summary="@string/app_ver"/> 

This progetto in GitHub contiene una versione di lavoro di questo.

Problemi correlati