2012-03-15 14 views
8

android:versionNameを外部リソースファイルに格納された文字列リソースへの参照として、Androidマニフェストに設定しようとしています。文字リソースへの参照としてandroid:versionNameを設定すると、エミュレータでNullPointerExceptionが発生します

以下

は私のAndroidManifest.xmlからの抜粋です:

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.toycorporation" 
    android:versionCode="@integer/version_code" 
    android:versionName="@string/version_name" 
> 

と私のプロジェクトのres/values disrectoryの下にあるbuild.xmlファイルの内容:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item type="string" name="build_date">03/15/2012</item> 
    <item type="integer" name="version_code">315281</item> 
    <item type="string" name="version_name">3.15.28.1</item>     
</resources> 

後、私は、バージョン番号を取得しようアプリケーションの[バージョン情報]画面に表示します。

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),0); 
Log.d("PackageInfo", "Version name: " + String.valueOf(packageInfo.versionName)); 

問題の説明:私は、アプリケーションを構築し、自動的に私のHTCのデバイスにインストールする場合は

すべてが完璧に動作します。バージョン名は参照で渡され、About画面ではバージョン名の値がlogcatに記録されます。 しかし、アプリケーションをビルドしてエミュレータで起動しようとすると、バージョン名の代わりにnullが得られます。

EclipseとIDEAを使用してエミュレータにアプリケーションをビルドしてインストールしようとしました。 問題はIDEに関連していないようです。

UPDATE:

1つの追加のものが登場しversionNameversionCodeのような使用では動作しません。アプリケーションをGoogle Playにデプロイすることはできません。次のエラーが表示されます:「:versionCodeアンドロイド」属性:ERROR取得:

ファイルが無効である 属性が

+0

' 3.15.28.1'を使用していますか? –

+1

いいえ、そうではありません。私は 'strings.xml'に単純な文字列リソースを追加しようとしましたが、@Espiandevがアドバイスしたように、' AndroidManifest.xml'でそれを参照しています。まだ運がありません。 –

+0

重複するhttp://stackoverflow.com/questions/6018079/reference-an-integer-resource-for-android-manifest-versioncode –

答えて

2

が、私はこのアプローチの問題のミックスがあると思い整数値ではありません/どのようにそれを使用しています。

1. APKをコンパイルしてアンドロイドマーケットにアップロードし、正しいバージョン番号と名前が使用されている場合は、android:versionCode = "@ integer/version_code"のリソース参照を使用することができます。android:バージョン名= "@文字列/バージョン名"

あなたができないなら、あなたはレニングスを使用すべきではありません。

2.)このアプローチをとる場合、getResources()。getString(R.string.version_name)を使用してpackageinfoから取得するのはどうしてですか?

このアプローチの利点は、ビルドボックスでリソースファイルを取り替えること以外にはほとんどありません。その場合は、後者の方法で画面を表示する必要があります。

+3

マニフェストファイルで参照を使用する唯一の目的は、すべてのビルド関連の値を移動することですバージョン名、バージョンコード、ビルド日付)をXMLファイルに区切り、ビルドスクリプトがこれらの値を単一の場所で簡単に変更できるようにします。 –

2

マニフェストのversionNameは、versionCodeではなくstringリソースへの参照として設定できます。

0

これは動作するはずです。 dimensions.xmlに以下を追加します。

<resources> 
    <item name="version_number" format="float" type="dimen">2.8</item> 
    <item name="version_code" format="integer" type="dimen">8</item> 
</resources> 

マニフェストに以下を追加します。

android:versionCode="@dimen/version_code" 
    android:versionName="@dimen/version_number" 
関連する問題