Comment obtenir le numéro de build / version de votre application Android?


Answers

Si vous utilisez le plugin Gradle / Android Studio, à partir de la version 0.7.0 , le code de version et le nom de version sont disponibles de manière statique dans BuildConfig . Assurez-vous d'importer le package de votre application , et non un autre BuildConfig :

import com.yourpackage.BuildConfig;
...
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;

Aucun objet de contexte nécessaire!

Assurez-vous également de les spécifier dans votre fichier build.gradle au lieu du fichier AndroidManifest.xml .

defaultConfig {
    versionCode 1
    versionName "1.0"
}
Question

J'ai besoin de comprendre comment obtenir ou faire un numéro de build pour mon application Android. J'ai besoin du numéro de build à afficher dans l'interface utilisateur.

Dois-je faire quelque chose avec AndroidManifest.xml ?




Un moyen très simple est:

private String appVersion = BuildConfig.VERSION_NAME;



 package com.sqisland.android.versionview;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textViewversionName = (TextView) findViewById(R.id.text);

    try {
        PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        textViewversionName.setText(packageInfo.versionName);

    }
    catch (PackageManager.NameNotFoundException e) {

    }

  }
}



Voici une solution propre , basée sur la solution de scottyab (éditée par Xavi). Il montre comment obtenir le contexte en premier, s'il n'est pas fourni par votre méthode. En outre, il utilise plusieurs lignes au lieu d'appeler plusieurs méthodes par ligne. Cela rend plus facile lorsque vous devez déboguer votre application.

Context context = getApplicationContext(); // or activity.getApplicationContext()
PackageManager packageManager = context.getPackageManager();
String packageName = context.getPackageName();

String myVersionName = "not available"; // initialize String

try {
    myVersionName = packageManager.getPackageInfo(packageName, 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

Maintenant que vous avez reçu le nom de la version dans String myVersionName , vous pouvez le définir comme TextView ou comme vous voulez.

// set version name to a TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);



Exemple d'utilisation de fragment à l'intérieur.

        import android.content.pm.PackageManager;
        .......

        private String VersionName;
        private String VersionCode;
        .......


        Context context = getActivity().getApplicationContext();

        /*Getting Application Version Name and Code*/
        try
        {

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

             /*I find usefull to convert vervion code into String, so it's ready for TextViev/server side checks*/ 

             VersionCode = Integer.toString(context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode);
        } catch (PackageManager.NameNotFoundException e)
        {
             e.printStackTrace();
        }

// DO SOMETHING USEFULL WITH THAT



Pour les utilisateurs de xamarin, utilisez ce code pour obtenir le nom et le code de la version

1) Nom de la version:

public string getVersionName(){
      return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionName;
}

2) Code de version:

public string getVersionCode(){
      return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionCode;
}



Utilisation de Gradle et BuildConfig

Obtenir la VERSION_NAME à partir de BuildConfig

BuildConfig.VERSION_NAME

Oui, c'est aussi simple maintenant.

Renvoie-t-il une chaîne vide pour VERSION_NAME?

Si vous obtenez une chaîne vide pour BuildConfig.VERSION_NAME lisez la suite.

J'ai continué à obtenir une chaîne vide pour BuildConfig.VERSION_NAME car je ne définissais pas le nom de versionName dans mon fichier de construction Grade (j'ai migré de ANT vers Gradle). Donc, voici les instructions pour vous assurer que vous définissez votre VERSION_NAME via Gradle.

build.gradle

def versionMajor = 3
def versionMinor = 0
def versionPatch = 0
def versionBuild = 0 // bump for dogfood builds, public betas, etc.

android {

  defaultConfig {
    versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild

    versionName "${versionMajor}.${versionMinor}.${versionPatch}"
  }

}

Note: Ceci est du maître Jake Wharton .

Suppression de AndroidManifest.xml et de AndroidManifest.xml partir de AndroidManifest.xml

Et puisque vous avez défini les paramètres versionName et build.gradle dans le fichier build.gradle maintenant, vous pouvez également les supprimer de votre fichier AndroidManifest.xml , s'ils s'y trouvent.




private String GetAppVersion(){
        try {
            PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
            return _info.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return "";
        }
    }

    private int GetVersionCode(){
        try {
            PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
            return _info.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return -1;
        }
    }



Quelqu'un qui n'a pas besoin d'informations BuildConfig pour l'interface utilisateur de l'application souhaite toutefois utiliser ces informations pour définir une configuration de travail CI ou d'autres, comme moi.

Il existe un fichier généré automatiquement, BuildConfig.java, dans votre répertoire de projet, à condition que vous ayez réussi votre projet.

{ESPACE DE TRAVAIL} / build / generated / source / buildConfig / {debug | version} / {PACKAGE} /BuildConfig.java

/**
* Automatically generated file. DO NOT MODIFY
*/
package com.XXX.Project;

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.XXX.Project";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "";
    public static final int VERSION_CODE = 1;
    public static final String VERSION_NAME = "1.0.0";
}

Diviser les informations dont vous avez besoin par script Python ou d'autres outils. Voici un exemple:

import subprocess
#find your BuildConfig.java
_BuildConfig = subprocess.check_output('find {WORKSPACE} -name BuildConfig.java', shell=True).rstrip()
#get the version name
_Android_version = subprocess.check_output('grep -n "VERSION_NAME" '+_BuildConfig, shell=True).split('"')[1]
print('Android version :’+_Android_version)

S'il vous plaît excusez mes capacités limitées en anglais, mais j'espère que cela vous aidera.




Voici la méthode pour obtenir le code de version:

public String getAppVersion() {
    String versionCode = "1.0";
    try {
        versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return versionCode;
}