How can you get the Manifest Version number from the App's (Layout) XML variables? How can you get the Manifest Version number from the App's (Layout) XML variables? android android

How can you get the Manifest Version number from the App's (Layout) XML variables?


I believe that was already answered here.

String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

OR

int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;


There is not a way to directly get the version out, but there are two work-arounds that could be done.

  1. The version could be stored in a resource string, and placed into the manifest by:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.somepackage"     android:versionName="@string/version" android:versionCode="20">
  2. One could create a custom view, and place it into the XML. The view would use this to assign the name:

    context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;

Either of these solutions would allow for placing the version name in XML. Unfortunately there isn't a nice simple solution, like android.R.string.version or something like that.


You can use the versionName in XML resources, such as activity layouts. First create a string resource in the app/build.gradle with the following snippet in the android node:

applicationVariants.all { variant ->    variant.resValue "string", "versionName", variant.versionName}

So the whole build.gradle file contents may look like this:

apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion '24.0.0 rc3'    defaultConfig {        applicationId 'com.example.myapplication'        minSdkVersion 15        targetSdkVersion 23        versionCode 17        versionName '0.2.3'        jackOptions {            enabled true        }    }    applicationVariants.all { variant ->        variant.resValue "string", "versionName", variant.versionName    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    productFlavors {    }    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }} dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.3.0'    compile 'com.android.support:design:23.3.0'    compile 'com.android.support:support-v4:23.3.0'}

Then you can use @string/versionName in the XML. Android Studio will mark it red, but the app will compile without issues. For example, this may be used like this in app/src/main/res/xml/preferences.xml:

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    <PreferenceCategory        android:title="About"        android:key="pref_key_about">        <Preference            android:key="pref_about_build"            android:title="Build version"            android:summary="@string/versionName" />    </PreferenceCategory></PreferenceScreen>