如何獲得您的Android應用程序的構建/版本號?



Answers

如果您使用的是Gradle插件/ Android Studio, 則從版本0.7.0開始 ,可以在BuildConfig靜態獲取版本代碼和版本名稱。 確保你導入你的應用程序包 ,而不是另一個BuildConfig

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

沒有上下文對象需要!

另外請確保在build.gradle文件中指定它們而不是AndroidManifest.xml

defaultConfig {
    versionCode 1
    versionName "1.0"
}
Question

我需要弄清楚如何獲取或為我的Android應用程序構建編號。 我需要在UI中顯示內部版本號。

我必須使用AndroidManifest.xml做些什麼嗎?




內部片段使用示例。

        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



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



這是一個乾淨的解決方案 ,基於scottyab的解決方案(由Xavi編輯)。 它顯示瞭如何首先獲得上下文,如果沒有提供你的方法。 此外,它使用多行而不是每行調用多個方法。 這使得您必須調試應用程序時更容易。

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

現在,您已經收到了字符串myVersionName的版本名稱,您可以將其設置為一個TextView或任何你喜歡的..

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



一個非常簡單的方法是:

private String appVersion = BuildConfig.VERSION_NAME;



有些人不需要應用程序UI的BuildConfig信息,但是想要使用這些信息來設置一個CI作業配置,或者像我一樣。

只要您成功構建項目,就會在項目目錄下自動生成一個BuildConfig.java文件。

{WORKSPACE} /建立/生成/源極/ buildConfig / {調試|釋放} / {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";
}

通過python腳本或其他工具分割你所需要的信息。 這是一個例子:

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)

請原諒我有限的英語能力,但希望這有助於。




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

    }

  }
}



以下是獲取版本代碼的方法:

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



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



使用Gradle和BuildConfig

從BuildConfig獲取VERSION_NAME

BuildConfig.VERSION_NAME

是的,現在就這麼簡單

它是否為VERSION_NAME返回空字符串?

如果您正在為BuildConfig.VERSION_NAME獲取空字符串,請繼續閱讀。

我不斷收到BuildConfig.VERSION_NAME的空字符串,因為我沒有在我的成績構建文件(我從ANT遷移到Gradle)中設置versionName 。 所以,這裡是確保您通過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}"
  }

}

注:這是來自傑出的沃頓商學院

AndroidManifest.xml刪除versionNameversionCode

由於您現在已經在build.gradle文件中設置了versionNameversionCode ,所以您也可以將它們從AndroidManifest.xml文件中移除(如果它們在那裡)。




Related