Wie bekomme ich die Build- / Versionsnummer deiner Android-Anwendung?

Ich muss herausfinden, wie zu bekommen oder machen Sie eine Build-Nummer für meine Android-Anwendung. Ich brauche die Build-Nummer, um in der Benutzeroberfläche anzuzeigen.

Muss ich etwas mit AndroidManifest.xml ?

  • Aktivitäten aus Bibliotheksprojekten verwenden
  • Wie lösche ich Zeilen in SQLite mit mehreren wo args?
  • In Vorlieben, wähle meinen Klang wie mit RingtonePreference
  • Lesen von sqlite-Datei aus dem Asset-Ordner
  • Android IPC und ContentProvider Unterschiede
  • Kompilieren mit Proguard gibt SimException: "local variable type mismatch"
  • Wie bekomme ich Dateinamen aus Datei Pfad in Android
  • Android App stürzt mit SIGABRT Signal 6 nur während Eclipse Debugging
  • GetImageResource () Android. Ist das möglich?
  • Fragen jedes Smartphone (Iphone, Android) Entwickler sollte in der Lage sein zu beantworten?
  • Wie bekomme ich das Bildformat der Bilder aus der Galerie
  • Android-Taste "Go" -Taste zu "Suche"
  • 20 Solutions collect form web for “Wie bekomme ich die Build- / Versionsnummer deiner Android-Anwendung?”

    Benutzen:

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

    Und Sie können den Versionscode erhalten, indem Sie diesen verwenden

      int verCode = pInfo.versionCode; 

    Wenn Sie das Gradle Plugin / Android Studio verwenden, ab Version 0.7.0 sind Versionscode und Versionsname statisch in BuildConfig verfügbar. BuildConfig Sie sicher, dass Sie das Paket Ihrer App importieren und nicht eine andere BuildConfig :

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

    Kein Kontextobjekt benötigt!

    build.gradle auch darauf, sie in Ihrer build.gradle Datei anstelle der AndroidManifest.xml .

     defaultConfig { versionCode 1 versionName "1.0" } 

    Etwas kürzere Version, wenn man nur den Versionsnamen wünscht.

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

    Verwenden von Gradle und BuildConfig

    Die VERSION_NAME von BuildConfig erhalten

     BuildConfig.VERSION_NAME 

    Ja, das ist jetzt so einfach.

    Gibt es eine leere Zeichenfolge für VERSION_NAME?

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

    Ich bekam immer eine leere Zeichenfolge für BuildConfig.VERSION_NAME weil ich nicht die versionName in meiner Grade-Build-Datei (ich migrierte von ANT zu Gradle). Also, hier sind Anleitungen dafür, dass du deine 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: Das ist vom meisterhaften Jake Wharton .

    Entfernen von versionName und AndroidManifest.xml von AndroidManifest.xml

    Und da du den versionName und den versionName in der Datei build.gradle jetzt eingestellt hast, kannst du sie auch aus deiner AndroidManifest.xml Datei entfernen, wenn sie da sind.

    Es gibt zwei Teile, die du brauchst: android: versionCode android: versionName

    VersionCode ist eine Nummer, und jede Version der App, die Sie dem Markt unterbreiten, muss eine höhere Nummer als die letzte haben.

    VersionName ist ein String und kann alles sein, was du willst. Hier definieren Sie Ihre App als "1.0" oder "2.5" oder "2 Alpha EXTREME!" oder Wasauchimmer.

    Beispiel:

    Um in Code zuzugreifen, mach mal was:

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

    Hier ist eine saubere Lösung , basierend auf der Lösung von Scottyab (herausgegeben von Xavi). Es zeigt, wie man den Kontext zuerst erhält, wenn es nicht von Ihrer Methode bereitgestellt wird. Außerdem verwendet es mehrere Zeilen, anstatt mehrere Methoden pro Zeile aufzurufen. Dies 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 was auch immer Sie mögen.

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

    Wenn Sie PhoneGap verwenden, dann erstellen Sie ein benutzerdefiniertes PhoneGap Plugin:

    Erstellen Sie eine neue Klasse im Paket Ihrer App:

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

    Fügen Sie in der Plugins.xml die folgende Zeile hinzu:

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

    Fügen Sie in Ihrem deviceready-Ereignis den folgenden Code hinzu:

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

    Dann können Sie das versionName-Attribut erhalten, indem Sie:

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

    Abgeleitet von hier und hier .

    Ein ganz einfacher Weg ist:

     private String appVersion = BuildConfig.VERSION_NAME; 

    Immer mit try catch block:

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

    Ich habe LÖSCHEN, indem ich die Präferenzklasse verwende.

     package com.example.android; import android.content.Context; import android.preference.Preference; import android.util.AttributeSet; public class VersionPreference extends Preference { public VersionPreference(Context context, AttributeSet attrs) { super(context, attrs); String versionName; final PackageManager packageManager = context.getPackageManager(); if (packageManager != null) { try { PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); versionName = packageInfo.versionName; } catch (PackageManager.NameNotFoundException e) { versionName = null; } setSummary(versionName); } } } 

    Hier ist die Methode, um den Versionscode zu bekommen:

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

    Wenn Sie es auf xml verwenden möchten, dann fügen Sie unten Zeile auf Ihre Gradle-Datei:

     applicationVariants.all { variant -> variant.resValue "string", "versionName", variant.versionName } 

    Und dann benutze es auf deinem xml wie folgt:

     <TextView android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/versionName" /> 

    Für xamarin Benutzer, verwenden Sie diesen Code, um Versionsname und Code zu erhalten

    1) VersionName

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

    2) VersionCode

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

    Dieser Code wurde oben in Stücke erwähnt, aber hier ist es wieder alles enthalten. Du brauchst einen try / catch Block, weil er eine "NameNotFoundException" werfen kann.

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

    Ich hoffe, das vereinfacht die Dinge für jemanden auf der Straße. 🙂

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

    Jemand, der keine BuildConfig-Info für die Benutzeroberfläche benötigt, möchte jedoch diese Informationen für die Einstellung einer CI-Job-Konfiguration oder andere, wie mich verwenden.

    Es gibt eine automatisch generierte Datei, BuildConfig.java, unter deinem Projektverzeichnis, solange du dein Projekt erfolgreich bildest.

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

    Split Informationen, die Sie benötigen, um python Skript oder andere Werkzeuge. 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 begrenzte englische Fähigkeit, aber hoffe das hilft.

    Zuerst:

     import android.content.pm.PackageManager.NameNotFoundException; 

    Und benutze folgendes:

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

    Probier diese:

     try { device_version = getPackageManager().getPackageInfo("com.google.android.gms", 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } 
     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; } } 

    Beispiel für innere Fragmentnutzung.

      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 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.