2016-08-10 26 views
3

ログイン画面にバージョン名を表示するだけですが、常にnullが返されます。次のように私は私のアプリのGradleのビルドで私のversionNameを定義しました:Android BuildConfig.VERSION_NAMEがnullを返しますか?

defaultConfig { 
    applicationId "com.maplesyrupindustries.j.airportmeet" 
    minSdkVersion 19 
    targetSdkVersion 24 
    versionCode 7 
    versionName "1.0.6" 
    multiDexEnabled true 
} 

をそして私は自分のログインののonCreateでそれを呼び出しています:

String build = BuildConfig.VERSION_NAME; 
    Log.e(TAG, BuildConfig.VERSION_NAME); 
    tvVersion.setText("Alpha " + build); 

しかし、ビルド文字列は常に空です。何がありますか?あなたがコンパイルされるまで、これがBuildConfig.java値が含まれるファイルは、doesn't存在するため、

public final class BuildConfig { 
    public static final boolean DEBUG = Boolean.parseBoolean("true"); 
    public static final String APPLICATION_ID = "com.mypackage.myapp"; 
    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

Gradleのバージョンは何ですか? > 0.7? –

+0

バージョンは2.10です – SpecialSnowflake

+2

あなたの質問に 'defaultConfig'がアプリケーションモジュール、ライブラリモジュールなどから表示されていますか?コードで生成された 'BuildConfig'クラス(あなたのモジュールの' build/generated/... ')を見ると、どうなっていますか?あなたは正しい 'BuildConfig'をインポートしていて、他の' BuildConfig'を誤ってインポートしていませんか? – CommonsWare

答えて

1

BuildConfig.VERSION_NAMEのような他の値のようにnullを返します使用して、この

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
String version = pInfo.versionName;//Version Name 
int verCode = pInfo.versionCode;//Version Code 
+0

これは別の解決策だと思いますが、なぜBuildConfig.VERSION_NAMEがnullであるのか不思議です。 – SpecialSnowflake

+0

Gradle plugin/Android Studioを使用している場合、バージョンコードとバージョン名は静的にBuildConfigで(コードのように)利用できます。そうでなければ、私のコードのようにこの方法で使用できます。 –

0

を試してみてくださいプロプライエクト、実際にはBuildConfig.javaというファイルがフォルダ\build内に作成されます。具体的には、\build\generated\source\buildConfig\debug\....

使用を取得するためのより良いオプションと同様に

この方法:

public String getVersionName(Context ctx){ 
    try { 
    return ctx.getPackageManager().getPackageInfo(getPackageName(), 0).versionName; 
    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
     return ""; 
    } 
} 
関連する問題