Edited at

Gradleでアプリのバージョン名とバージョン番号を取得する

More than 5 years have passed since last update.


いままで

実行しているアプリのバージョン番号、バージョン名の取得といえばPackageManagerを使う方法が一般的でした。

PackageManagerを使うとNameNotFoundExceptionをthrowします。実行しているアプリなら通常必ず取れるであるので、不要なtry-catch文で囲まないといけません。

String versionName;

try {
versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (NameNotFoundException e) {
versionName = "unknown";
}


イマドキ

Gradleで生成されるBuildConfigを参照することで、定数の参照だけで済むようにできます。


やり方

今までAndroidManifestで定義されていた部分を消します。


AndroidManifest.xml

diff --git a/AndroidManifest.xml b/AndroidManifest.xml               

index ec5b988..600ab90 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.itochan.android"
- android:installLocation="auto"
- android:versionCode="10"
- android:versionName="2.0.0">
+ android:installLocation="auto">

そのかわり build.gradledefaultConfig ブロックの中で、バージョンを指定します。


build.gradle

android {

compileSdkVersion 20
buildToolsVersion '19.1.0'

defaultConfig {
minSdkVersion 10
targetSdkVersion 20
versionCode 10
versionName '2.0.0'
}
}


すると BuildConfig.java に定数が自動生成されます。


BuildConfig.java

/**

* Automatically generated file. DO NOT MODIFY
*/

package jp.itochan.android;

public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String PACKAGE_NAME = "jp.itochan.android";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 10;
public static final String VERSION_NAME = "2.0.0";
}


PackageManagerを使うとtry-catch文を必要としていたのを BuildConfig.VERSION_NAME を参照するだけでバージョン名が取れます。

String versionName = BuildConfig.VERSION_NAME;

同様にバージョン番号も BuildConfig.VERSION_CODE で取ることができます。