如何在构建时设置strings.xml值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在构建时设置strings.xml值?相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

答案

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

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

settings.xml
<settings>
     <properties>
          <property name="server" value="@SERVER@"/>
     </properties>'
</settings>
Replace Task
 <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>对可以获取文件的文件集,并立即替换一堆令牌。 (小心不要将它传递给二进制文件!)。

另一答案

尝试这个代码,它适合我

<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>

以上是关于如何在构建时设置strings.xml值?的主要内容,如果未能解决你的问题,请参考以下文章

将 strings.xml 资源值分配给 MainActivity 中的字符串失败

片段中ListView的setOnItemClickListener

片段中 ListView 的 setOnItemClickListener

使用strings.xml和翻译

为啥源码中的strings.xml中有msgid属性

如何在 Fragment 之间传递值