いままで
実行しているアプリのバージョン番号、バージョン名の取得といえば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.gradle
の defaultConfig
ブロックの中で、バージョンを指定します。
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
で取ることができます。