2

我正在使用 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 编译之后发生的。我可以指定替换发生的构建步骤吗?

4

2 回答 2

4

在标准的 maven 构建中,资源过滤发生在 process-resources,它在 compile 之前,在 package 之前。如果没有更多关于如何设置资源过滤以及如何构建包的详细信息,很难说更多。

编辑:看起来您可能正在使用 android 插件的generate-sources目标生成 R.java 文件,对吧?这很可能与生成源阶段有关。您的 strings.xml 直到 process-resources 阶段才会被过滤,该阶段稍后在 build 中出现。您需要确保 android 目标在资源过滤发生运行,并且它指向输出 strings.xml 文件,而不是源文件。

于 2011-07-19T13:07:34.003 回答
3

在Maven-Android-Plugin 示例中有一个如何将 Maven 资源过滤应用于 Android 资源文件的示例,并对其进行了简要讨论

具体看看示例中的 Morseflash 应用程序 pom.xml。

关键点是:-

  • 在阶段运行资源过滤initialize,将输出放入/target/filtered-res
  • 配置 maven-android-plugin 然后从过滤的资源目录中获取它的资源,例如:

<resourceDirectory>${project.build.directory}/filtered-res</resourceDirectory>

于 2011-08-24T10:15:47.840 回答