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


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?


954
2018-01-06 14:43


origine


Réponses:


Utilisation:

try {
    PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
    String version = pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

Et vous pouvez obtenir le code de version en utilisant cette

int verCode = pInfo.versionCode;

1777
2017-07-06 08:54



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 statiquement dans BuildConfig. Assurez-vous d'importer le package de votre applicationet pas 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 build.gradle fichier au lieu de AndroidManifest.xml.

defaultConfig {
    versionCode 1
    versionName "1.0"
}

1445
2018-01-14 16:45



Version légèrement plus courte si vous voulez juste le nom de la version.

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

402
2018-04-26 10:22



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 alors lisez la suite.

J'ai continué à obtenir une chaîne vide pour BuildConfig.VERSION_NAME parce que je ne mettais pas le versionName dans mon fichier de construction de grade (j'ai migré d'ANT à 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.

Enlever versionName et versionCode de AndroidManifest.xml

Et puisque vous avez mis le versionName et versionCode dans le build.gradle fichier maintenant, vous pouvez également les supprimer de votre AndroidManifest.xml fichier, s'ils sont là.


125
2018-02-05 19:13



Il y a deux parties dont vous avez besoin: android: versionCode Android: versionName

versionCode est un nombre, et chaque version de l'application que vous soumettez au marché doit avoir un nombre plus élevé que le dernier.

VersionName est une chaîne, et peut être tout ce que vous voulez qu'il soit. C'est ici que vous définissez votre application comme "1.0" ou "2.5" ou "2 Alpha EXTREME!" ou peu importe.

Exemple:

Pour y accéder en code, faites quelque chose comme:

PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
Toast.makeText(this,
     "PackageName = " + info.packageName + "\nVersionCode = "
       + info.versionCode + "\nVersionName = "
       + info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();

122
2018-02-08 04:31



BuildConfig.VERSION_NAME //version name from your build file
BuildConfig.VERSION_CODE //version code from your build file

Je ne vois pas le besoin de l'obtenir du gestionnaire de paquets


55
2018-01-29 04:05



Voici une solution propre, basé sur la solution de scottyab (édité 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 la chaîne myVersionName, vous pouvez le définir sur un TextView ou ce que vous voulez ..

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

50
2017-08-21 08:54



Si vous utilisez PhoneGap, créez un plugin PhoneGap personnalisé:

Créez une nouvelle classe dans le package de votre application:

package com.Demo; //replace with your package name

import org.json.JSONArray;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import com.phonegap.api.PluginResult.Status;

public class PackageManagerPlugin extends Plugin {

    public final String ACTION_GET_VERSION_NAME = "GetVersionName";

    @Override
    public PluginResult execute(String action, JSONArray args, String callbackId) {
        PluginResult result = new PluginResult(Status.INVALID_ACTION);
        PackageManager packageManager = this.ctx.getPackageManager();

        if(action.equals(ACTION_GET_VERSION_NAME)) {
            try {
                PackageInfo packageInfo = packageManager.getPackageInfo(
                                              this.ctx.getPackageName(), 0);
                result = new PluginResult(Status.OK, packageInfo.versionName);
            }
            catch (NameNotFoundException nnfe) {
                result = new PluginResult(Status.ERROR, nnfe.getMessage());
            }
        }

        return result;
    }
}

Dans le fichier plugins.xml, ajoutez la ligne suivante:

<plugin name="PackageManagerPlugin" value="com.Demo.PackageManagerPlugin" />

Dans ton Evénement deviceready, ajoutez le code suivant:

var PackageManagerPlugin = function() {

};
PackageManagerPlugin.prototype.getVersionName = function(successCallback, failureCallback) {
    return PhoneGap.exec(successCallback, failureCallback, 'PackageManagerPlugin', 'GetVersionName', []);
};
PhoneGap.addConstructor(function() {
    PhoneGap.addPlugin('packageManager', new PackageManagerPlugin());
});

Ensuite, vous pouvez obtenir l'attribut versionName en faisant:

window.plugins.packageManager.getVersionName(
    function(versionName) {
        //do something with versionName
    },
    function(errorMessage) {
        //do something with errorMessage
    }
);

Dérivé de ici et ici.


23
2018-03-12 21:50



Un moyen très simple est:

private String appVersion = BuildConfig.VERSION_NAME;

20
2018-01-20 13:55



Toujours le faire avec try catch bloc:

String versionName = "Version not found";

try {
    versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
    Log.i(TAG, "Version Name: " + versionName);
} catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    Log.e(TAG, "Exception Version Name: " + e.getLocalizedMessage());
}

8
2018-05-28 06:43



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;
}

8
2018-06-30 07:04