Wie erhalte ich die Build- / Versionsnummer Ihrer Android-Anwendung?



Answers

Wenn Sie das Gradle-Plugin / Android Studio verwenden ( ab Version 0.7.0) , sind Versionscode und Versionsname in BuildConfig statisch BuildConfig . BuildConfig Sie sicher, dass Sie das Paket Ihrer App und nicht ein anderes BuildConfig :

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

Kein Kontextobjekt benötigt!

build.gradle Sie build.gradle sicher, dass Sie sie in Ihrer build.gradle Datei anstelle von AndroidManifest.xml .

defaultConfig {
    versionCode 1
    versionName "1.0"
}
Question

Ich muss herausfinden, wie man eine Build-Nummer für meine Android-Anwendung erhält oder erstellt. Ich brauche die Build-Nummer, um sie in der Benutzeroberfläche anzuzeigen.

Muss ich etwas mit AndroidManifest.xml ?




Beispiel für die Verwendung von Fragmenten

        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



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



Jemand, der BuildConfig-Informationen für die Benutzerschnittstelle der Anwendung nicht benötigt, möchte diese Informationen jedoch zum Einstellen einer CI-Jobkonfiguration oder anderer, wie mir, verwenden.

Es gibt eine automatisch generierte Datei, BuildConfig.java, in Ihrem Projektverzeichnis, solange Sie Ihr Projekt erfolgreich erstellen.

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

Teilen Sie Informationen, die Sie von Python-Skript oder anderen Tools benötigen. Hier ist ein Beispiel:

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)

Bitte entschuldigen Sie meine begrenzten Englischkenntnisse, aber ich hoffe, das hilft.




Ein sehr einfacher Weg ist:

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

    }

  }
}



Verwenden Sie für xamarin-Benutzer diesen Code, um Versionsname und Code zu erhalten

1) Versionsname:

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

2) Versionscode:

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



Hier ist die Methode zum Abrufen des Versionscodes:

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



Gradle und BuildConfig verwenden

Abrufen der VERSION_NAME von BuildConfig

BuildConfig.VERSION_NAME

Ja, das ist jetzt so einfach.

Gibt es einen leeren String für VERSION_NAME zurück?

Wenn Sie eine leere Zeichenfolge für BuildConfig.VERSION_NAME lesen Sie weiter.

Ich habe immer eine leere Zeichenfolge für BuildConfig.VERSION_NAME weil ich den versionName in meiner Grade-Build-Datei (von ANT auf Gradle migriert) gesetzt habe. Hier finden Sie Anweisungen, um sicherzustellen, dass Sie VERSION_NAME über Gradle VERSION_NAME .

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

}

Anmerkung: Dies ist von dem meisterhaften Jake Wharton .

Entfernen von versionName und AndroidManifest.xml aus AndroidManifest.xml

Und da Sie jetzt versionName und versionName in der build.gradle Datei festgelegt haben, können Sie diese auch aus Ihrer AndroidManifest.xml Datei entfernen, sofern sie vorhanden sind.




Hier ist eine saubere Lösung , basierend auf der Lösung von scottyab (herausgegeben von Xavi). Es zeigt, wie Sie den Kontext zuerst erhalten, wenn er nicht von Ihrer Methode bereitgestellt wird. Außerdem verwendet es mehrere Zeilen, anstatt mehrere Methoden pro Zeile aufzurufen. Das macht es einfacher, wenn Sie Ihre Anwendung debuggen müssen.

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

Nun, da Sie den Versionsnamen im String myVersionName , können Sie ihn auf einen TextView oder wie auch immer Sie wollen einstellen.

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



Links