Как узнать номер сборки / версии вашего Android-приложения? - PullRequest
1155 голосов
/ 06 января 2011

Мне нужно выяснить, как получить или сделать номер сборки для моего приложения Android. Мне нужен номер сборки для отображения в пользовательском интерфейсе.

Должен ли я что-то делать с AndroidManifest.xml?

Ответы [ 27 ]

1944 голосов
/ 06 июля 2011

Использование:

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

И вы можете получить код версии, используя этот

int verCode = pInfo.versionCode;
1702 голосов
/ 14 января 2014

Если вы используете плагин Gradle / Android Studio, начиная с версии 0.7.0 , код версии и название версии доступны статически в BuildConfig. Убедитесь, что вы импортируете пакет своего приложения , а не другой BuildConfig:

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

Объект Context не требуется!

Также обязательно укажите их в файле build.gradle вместо AndroidManifest.xml.

defaultConfig {
    versionCode 1
    versionName "1.0"
}
421 голосов
/ 26 апреля 2011

Немного короче версия, если вы просто хотите название версии.

String versionName = context.getPackageManager()
    .getPackageInfo(context.getPackageName(), 0).versionName;
159 голосов
/ 08 февраля 2011

Вам нужно две части: андроид: VersionCode Android: versionName

versionCode - это число, и каждая версия приложения, которую вы отправляете в Маркет, должна иметь большее число, чем последняя.

VersionName - это строка, которая может быть любой, какой вы хотите. Здесь вы определяете свое приложение как «1.0», «2.5» или «2 Alpha EXTREME!» или что угодно.

Пример:

Котлин:

val manager = this.packageManager
val info = manager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
toast("PackageName = " + info.packageName + "\nVersionCode = "
            + info.versionCode + "\nVersionName = "
            + info.versionName + "\nPermissions = " + info.permissions)

Java:

PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
Toast.makeText(this,
     "PackageName = " + info.packageName + "\nVersionCode = "
       + info.versionCode + "\nVersionName = "
       + info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();
137 голосов
/ 05 февраля 2015

Использование Gradle и BuildConfig

Получение VERSION_NAME из BuildConfig

BuildConfig.VERSION_NAME

Да, теперь это так просто.

Возвращается ли пустая строка для VERSION_NAME?

Если вы получаете пустую строку для BuildConfig.VERSION_NAME, тогда читайте дальше.

Я продолжал получать пустую строку для BuildConfig.VERSION_NAME, потому что я не устанавливалversionName в моем файле сборки Grade (я мигрировал из ANT в Gradle).Итак, вот инструкции по настройке VERSION_NAME с помощью 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}"
  }

}

Примечание: это отмастерская Джейк Уортон .

Удаление versionName и versionCode из AndroidManifest.xml

А так как вы установили versionName и versionCode в файле build.gradle теперь вы также можете удалить их из файла AndroidManifest.xml, если они там есть.

52 голосов
/ 21 августа 2013

Вот чистое решение , основанное на решении Скоттиаба (под редакцией Хави). Сначала показано, как получить контекст, если он не предоставлен вашим методом. Кроме того, он использует несколько строк вместо вызова нескольких методов на строку. Это облегчает отладку приложения.

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

Теперь, когда вы получили имя версии в String myVersionName, вы можете установить его в TextView или как угодно.

// set version name to a TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);
30 голосов
/ 25 июля 2018

Использовать класс BuildConfig

String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;

build.gradle (приложение)

 defaultConfig {
    applicationId "com.myapp"
    minSdkVersion 19
    targetSdkVersion 27
    versionCode 17
    versionName "1.0"
   }
23 голосов
/ 13 марта 2012

Если вы используете PhoneGap, создайте собственный плагин PhoneGap:

Создайте новый класс в пакете вашего приложения:

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

В файле plugins.xml добавьте следующую строку:

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

В событие deviceready добавьте следующий код:

var PackageManagerPlugin = function() {

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

Затем вы можете получить атрибут versionName, выполнив:

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

Получено из здесь и здесь .

12 голосов
/ 25 сентября 2016

Для пользователей xamarin используйте этот код, чтобы получить имя и код версии

1) Название версии:

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

2) Код версии:

public string getVersionCode(){
      return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionCode;
}
10 голосов
/ 26 мая 2016

Если вы хотите использовать его в XML, добавьте строку ниже в свой файл Gradle:

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

А затем используйте его на своем xml следующим образом:

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