我正在使用Maven(3.x)在Hudson中构建一个Android应用程序。我使用过滤/配置文件来做strings.xml文件的文本替换作为构建的一部分。
因此在strings.xml中,我将有以下条目:
<string name="app_name">${app_name}</string>
在pom.xml文件中,我有个人资料条目:
<profiles>
<profile>
<id>local</id>
<properties>
<app_env>local</app_env>
<app_name>Acme-loc</app_name>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<app_env>dev</app_env>
<app_name>Acme-dev</app_name>
</properties>
</profile>
....
当我查看* .apk时,strings.xml文件被正确替换。但是,当安装在设备中时,我看到$ {app_name}让我相信在编译app之后发生了替换。我可以指定替换发生的构建步骤吗?
答案 0 :(得分:4)
在标准的maven构建中,资源过滤发生在process-resources之前,它发生在package之前。如果没有关于如何设置资源过滤以及如何构建软件包的详细信息,很难说更多。
编辑:看起来你可能正在使用android插件的generate-sources目标生成R.java文件,对吗?这很可能与生成源阶段有关。在进入later in the build的进程资源阶段之前,您的strings.xml不会被过滤。您需要确保在资源过滤发生后,android目标运行,并且它指向输出strings.xml文件,而不是源文件。
答案 1 :(得分:3)
有一个示例说明如何将Maven资源过滤应用于Maven-Android-Plugin samples中的Android资源文件,以及关于它的简短discussion。
具体来看样本中的Morseflash app pom.xml。
关键点是: -
initialize
阶段运行资源过滤,将输出放入/target/filtered-res
<resourceDirectory>${project.build.directory}/filtered-res</resourceDirectory>