Q:

¿Obtener versión de aplicación Android?

Yo tengo el nombre de mi aplicación en strings.xml de la carpeta res/values:
<string name="app_name">Liturgia+</string>

Yo quisiera cambiar ese valor, agregando la versión actual de la app. Suponiendo que la versión actual es 1.3, quisiera algo así:
Liturgia+ (v. 1.3)

Mi pregunta es si sería posible obtener de forma automática el valor actual de la versión dentro de un recurso xml, de modo que el valor se actualice sólo al cambiar la versión.

A:

Dentro de tu build.gradle puedes definir el versionName, el cual es un String que indica la versión:
android {
        ...
        versionCode 1
        versionName "(v. 1.3)"
        ...
    }

estos valores también los puedes definir dentro de tu archivo AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jorgesys.ussd"
    android:versionCode="1"
    android:versionName="(v. 1.3)">

solo recuerda que la configuración del build.gradle siempre sobreescribe la del archivo AndroidManifest.xml
Dado lo anterior, puedes obtener el valor de versionName de esta forma:
public String getVersionName(Context ctx){
    try {
    return ctx.getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

otra forma es simplemente (requiere que el proyecto este construido):
public String getVersionName(){
     return BuildConfig.VERSION_NAME;
 }

El valor tipo String  de  versionName lo puedes concatenar al nombre de tu aplicación.

Incluso puedes definir como  versionName el valor Liturgia+ (v. 1.3) , ejemplo:
android {
        ...
        versionCode 1
        versionName "Liturgia+ (v. 1.3)"
        ...
    }

