あなたのAndroidアプリケーションのビルド/バージョン番号を取得するには?



Answers

バージョン0.7.0のGradleプラグイン/ Android Studioを使用している場合、バージョンコードとバージョン名はBuildConfig静的に使用できます。 別のBuildConfigではなく、 アプリケーションのパッケージをインポートするようにしてください

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

必要なコンテキストオブジェクトがありません!

また、 AndroidManifest.xml代わりにbuild.gradleファイルでそれらを指定してください。

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



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

    }

  }
}



このコードは上記のように部分的に述べられていますが、ここでは再びすべてが含まれています。 "NameNotFoundException"がスローされる可能性があるため、try / catchブロックが必要です。

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

私はこれが道路の下の誰かのものを簡素化することを願っています。 :)




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

herehereから派生しhere here




あなたが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" />



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



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



try catch

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



GradleとBuildConfigの使用

BuildConfigからVERSION_NAMEを取得する

BuildConfig.VERSION_NAME

うん、それは今簡単だ。

VERSION_NAMEの空の文字列を返しますか?

BuildConfig.VERSION_NAME空の文字列を取得している場合は、読み込みます。

私はGradeビルドファイル(私はANTからGradleに移行)でversionNameを設定していなかったので、 BuildConfig.VERSION_NAME空の文字列がBuildConfig.VERSION_NAMEた。 そこで、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}"
  }

}

注:これは傑作Jake Whartonからのものです。

AndroidManifest.xmlからversionNameversionCodeを削除する

また、 build.gradleファイルにversionNameversionCode設定しているので、 AndroidManifest.xmlファイルがある場合は、それをAndroidManifest.xmlファイルから削除することもできます。




scottyab(Xavi編集)のソリューションに基づく、 きれいなソリューションです。 それはあなたのメソッドによって提供されていない場合、まずコンテキストを取得する方法を示します。 さらに、1行に複数のメソッドを呼び出す代わりに、複数の行を使用します。 これにより、アプリケーションのデバッグが容易になります。

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



Links