私の(Android以外のテスト)テストでは、src / main / resourcesにあるcommon.propertiesというリソースをAndroidプロジェクトに配置して、そこからMavenプロジェクトのバージョンを読み取りました。
@Test
public void testReadVersion() throws IOException {
Properties props = new Properties();
props.load(FileUtils.openInputStream(FileUtils.toFile(this.getClass().getResource("/common.properties"))));
String version = props.getProperty("version");
assertNotNull(version);
assertTrue(!"".equals(version));
}
これは機能します。しかし、本番コードで同じリソースにアクセスしようとすると、リソースにアクセスするときに常にNullPointerExceptionsが発生します。
Properties props = new Properties();
final StringBuilder versionBuilder = new StringBuilder();
try {
props.load(FileUtils.openInputStream(FileUtils.toFile(this.getClass().getResource("/common.properties"))));
versionBuilder.append(props.getProperty("version"));
}
catch (IOException e) {
// will be ignored.
}
デバッグしました。リソースが見つからないため、nullです。これをどのように解決すればよいですか?ファイルをres/rawに置いて読むと
props.load(getResources().openRawResource(R.raw.common));
ファイルアクセスは機能しますが、ファイルの内容から値を変換できません:version =${project.version}。結果は、バージョン1.0などではなく、値文字列自体${project.version}になります。私のオプションは何ですか?
[更新]
以下で受け入れられた解決策は、私の最新のプロジェクトでは機能しなくなりました。値の代わりに常に${project.version}を取得します。なぜそうなのかわからない。AssetManagerを使用したソリューションでさえ私には機能しません。あまり不便ではない良い回避策を見つけました。android:versionName(AndroidManifest)の情報を取得して表示します。
String versionName = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
TextView version = (TextView)findViewById(R.id.version);
version.setText(" " + versionName);