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


Answers

Si está utilizando el complemento 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úrese de importar el paquete de su aplicación , y 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 archivo build.gradle lugar de AndroidManifest.xml .

defaultConfig {
    versionCode 1
    versionName "1.0"
}
Question

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 ?




Alguien que no necesita información de BuildConfig para la interfaz de usuario de la aplicación, sin embargo, quiere usar esta información para establecer una configuración de trabajo de CI u otros, como yo.

Hay un archivo generado automáticamente, BuildConfig.java, debajo del directorio de su proyecto, siempre que construya su proyecto con éxito.

{WORKSPACE} / build / generated / source / buildConfig / {debug | release} / {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";
}

Divida la información que necesita mediante la secuencia de comandos python u otras herramientas. Aquí hay un ejemplo:

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)

Disculpe mi capacidad limitada de inglés, pero espero que esto ayude.




Aquí hay una solución limpia , basada 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 , puede configurarlo en un TextView o lo que quiera.

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



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



Ejemplo para el uso interno de Fragmentos.

        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



Una forma muy simple es:

private String appVersion = BuildConfig.VERSION_NAME;



Para usuarios de xamarin, utiliza este código para obtener el nombre y el código de la versión

1) Nombre de la versión:

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

2) Código de versión:

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



 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) {

    }

  }
}



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 está obteniendo una cadena vacía para BuildConfig.VERSION_NAME , BuildConfig.VERSION_NAME leyendo.

Seguí obteniendo 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 asegurarte de que estás configurando tu VERSION_NAME 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 del magistral Jake Wharton .

Eliminando versionName y versionCode de AndroidManifest.xml

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




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



Links