Pregunta ¿Cómo obtener el número de compilación / versión de su aplicación Android?


Necesito averiguar cómo obtener o crear un número de compilación para mi aplicación Android. Necesito el número de compilación para mostrar en la interfaz de usuario.

¿Tengo que hacer algo con AndroidManifest.xml?


954
2018-01-06 14:43


origen


Respuestas:


Utilizar:

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

Y puedes obtener el código de la versión usando esto

int verCode = pInfo.versionCode;

1777
2017-07-06 08:54



Si está utilizando el plugin Gradle / Android Studio, a partir de la versión 0.7.0, el código de versión y el nombre de la versión están disponibles estáticamente en BuildConfig. Asegúrate de importar el paquete de tu aplicacióny no otro BuildConfig:

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

¡No se necesita un objeto de contexto!

También asegúrese de especificarlos en su build.gradle archivo en lugar de AndroidManifest.xml.

defaultConfig {
    versionCode 1
    versionName "1.0"
}

1445
2018-01-14 16:45



Versión un poco más corta si solo quieres el nombre de la versión.

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

402
2018-04-26 10:22



Usando Gradle y BuildConfig

Obteniendo VERSION_NAME de BuildConfig

BuildConfig.VERSION_NAME

Sí, es así de fácil ahora.

¿Devuelve una cadena vacía para VERSION_NAME?

Si obtiene una cadena vacía para BuildConfig.VERSION_NAME luego sigue leyendo

Seguí recibiendo una cadena vacía para BuildConfig.VERSION_NAME porque no estaba configurando el versionName en mi archivo de compilación de Grade (migré de ANT a Gradle). Por lo tanto, aquí hay instrucciones para asegurarse de que está configurando su VERSION_NAME a través de 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}"
  }

}

Nota: Esto es de lo magistral Jake Wharton.

Eliminando versionName y versionCode de AndroidManifest.xml

Y desde que has establecido el versionName y versionCode en el build.gradle archivo ahora, también puede eliminarlos de su AndroidManifest.xml archivo, si están allí.


125
2018-02-05 19:13



Hay dos partes que necesitas: android: versionCode android: versionName

versionCode es un número, y cada versión de la aplicación que envíe al Market necesita tener un número más alto que el último.

VersionName es una cadena, y puede ser lo que quieras que sea. ¡Aquí es donde defines tu aplicación como "1.0" o "2.5" o "2 Alpha EXTREME"! o lo que sea.

Ejemplo:

Para acceder al código, haz algo como:

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

No veo la necesidad de obtenerlo del administrador de paquetes


55
2018-01-29 04:05



Aquí hay un solución limpia, basado en la solución de scottyab (editado por Xavi). Muestra cómo obtener el contexto primero, si su método no lo proporciona. Además, utiliza múltiples líneas en lugar de llamar a múltiples métodos por línea. Esto hace que sea más fácil cuando tiene que depurar su aplicación.

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

Ahora que recibió el nombre de la versión en el String myVersionName, puedes configurarlo en un TextView o lo que quieras ...

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

50
2017-08-21 08:54



Si usa PhoneGap, cree un plugin PhoneGap personalizado:

Crea una nueva clase en el paquete de tu aplicación:

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

En plugins.xml, agregue la siguiente línea:

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

En tus evento deviceready, agrega el siguiente código:

var PackageManagerPlugin = function() {

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

Luego, puede obtener el atributo versionName haciendo:

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

Derivado de aquí y aquí.


23
2018-03-12 21:50



Una forma muy simple es:

private String appVersion = BuildConfig.VERSION_NAME;

20
2018-01-20 13:55



Siempre hazlo con try catch bloquear:

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



Aquí está el método para obtener el código de la versión:

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