VersionName jest przydatną informacją, którą twórcy często umieszczają w jakimś miejscu swojej aplikacji. Wartość ta znajduje się w pliku build.gradle na poziomie modułu aplikacji, w sekcji defaultConfig:
defaultConfig {
applicationId "tutorial.android.com.pl.tutorial"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Co zrobić aby móc wyświetlać tą wartość w aplikacji? Możemy dodać w pliku strings.xml, ale nie jest to dobre rozwiązanie. Za każdym razem gdy wersja ulegnie zmianie musielibyśmy poprawiać tą wartość w dwóch miejscach. Nie jest to dobra praktyka. Zmiana powinna być w jednym miejscu, dzięki temu nie zdarzy się pomyłka. Aby tego dokonać możemy użyć:
// dodajemy do instniejącego tagu android
android {
//...
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
//...
}
Po zbudowaniu aplikacji (w tym przypadku została zbudowana wersja release i debug) powstanie nowy resource typu string i nazwie versionName którego będziemy mogli używać w naszym layoucie:
Jednak Android Studio podświetli tą wartość na czerwono:
IDE niestety nie radzi sobie tak wygenerowanymi stringami i jest to jedynie problem z Android Studio. Sama aplikacja po zbudowaniu uruchomi nam się bezproblemowo. Żeby ten string nie podświetlał się na czerwono możemy zmusić AS, aby go ignorował poprzez dodanie suppress AndroidDomInspection:
<!--suppress AndroidDomInspection -->
<TextView
android:id="@+id/versionName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/versionName" />