1

我正在使用 Ant 构建我的 Android 应用程序,并且想在构建时在我的 strings.xml 中设置一个值。例如,我可以使用

<string name="app_name">MyApp-DEBUG</string>

使用调试版本,或者我可以使用

<string name="app_name">MyApp<string>

用于发布版本。这可能吗?

4

2 回答 2

2

Ant 中有两个任务可以提供帮助:

首先是<replace>。你给它一个包含可以被替换的参数的文件名,你给<replace>任务这些参数的值。它在文件中替换它们。我不喜欢这个任务,因为它用于替换受版本控制的东西,如果你不小心,你最终可能会毫无意义地更改文件。

设置.xml
<settings>
     <properties>
          <property name="server" value="@SERVER@"/>
     </properties>'
</settings>
替换任务
 <replace file="settings.xml">
    <replacetoken token="@SERVER@"  value="google.com"/>
 </replace>

我见过很多版本控制存储库,其中替换文件的修订版 #3 是使用替换参数意外签入文件(直到下一个版本没有更改参数时才意识到这一点)。然后版本 #4 是版本 #2 的副本,它具有替换参数。紧随其后的是错误的版本#5,然后是版本#6,它恢复了文件,等等。

我的首选方法是将文件复制到另一个目录,并在复制时使用<filterset>/<filter>标记更改文件:

 <copy todir="${target.dir}"
    file="settings.xml">
    <filterset>
        <filter token="SERVER" value="google"/>
    </filterset>
  </copy>

两者都可以使用属性文件而不是指定单个标记。该<copy>/<filterset>对可以获取一文件并一次替换一堆令牌。(注意不要将二进制文件传递给它!)。

于 2012-08-23T03:10:26.393 回答
0

试试这个代码,它对我有用

<target name="app-name-debug">
    <replaceregexp file="res/values/strings.xml" match='name="app_name"(.*)'
        replace='name="app_name"&gt;MyApp-DEBUG&lt;\/string&gt;'/>
</target>
<target name="app-name-release">
    <replaceregexp file="res/values/strings.xml" match='name="app_name"(.*)'
        replace='name="app_name"&gt;MyApp&lt;\/string&gt;'/>
</target>
于 2018-03-06T07:22:08.773 回答