当前位置: 首页 > 知识库问答 >
问题:

在Android gradle构建中,在构建期间更改strings.xml的内容

伊温书
2023-03-14

例如。

<string name="button_label">OK, do it</string>

可以更改为

<string name="button_label">OK, do it now!</string>

...什么的。

    null

共有1个答案

周鸿云
2023-03-14

下面是一个通过外部属性文件修改字符串的解决方案。我不确定这是否完全符合你的要求,但它应该会让你有一个开始。

我在构建中做了类似的事情--我在doFirst()中有一些定制的gradle任务,使用这种类型的替换。这里的regex可能需要一些改进,输入格式可能会根据您的需求而改变,但在一些本地测试中,这似乎对我有用。

ext.updateStrings = {
println("Changing strings!")
Properties props = new Properties()
props.load(new FileInputStream(file('cms.properties')))
def stringsFile = file("src/main/res/values/strings.xml")
def stringsText = stringsFile.getText()
for (p in props) {
    def pattern = Pattern.compile(String.format("%s\">.*<", p.key));
    def match = pattern.matcher(stringsText);
    match.find();
    println("found key " + p.key + ", replacing string with " + p.value)
    stringsText = match.replaceAll(String.format("%s\">%s<", p.key, p.value))
    stringsFile.write(stringsText)
    }
}

我将外部属性/函数保存在一个单独的文件中(例如common.gradle)。在build.gradle中,您可以添加一个自定义任务,如下所示:

apply from: "common.gradle"
task updateStringsXml() {
    doFirst {
        updateStrings()
    }
}
 类似资料:
  • 我目前使用的是带有hibernate3-maven-plugin的Hibernate 3.6.9。我使用目标hbm2ddl来生成一个sql模式文件。 该插件不支持Hibernate 4.1.2。如何生成架构文件?

  • 如果是的话,别人如何为自己的网站做SEO?。 有没有办法解决这个问题?

  • 我正在构建一个Quarkus应用程序,它使用mongoDB更改流功能与反应客户端。 如果我从Intellij本地启动应用程序,一切正常,但当我构建本机应用程序并在docker映像中运行时,我收到了这个错误 我使用这个命令来构建本机应用程序,因为我需要在windows上本地构建它,并在heroku上delpoy它: 这是我初始化变更流并启动集合监视的类和方法 这就是听众方法 我不理解这个错误,查看m

  • 问题内容: 在将Jenkins更新到2.156版(从1.6版开始)之后,我们的一些构建作业在完成后以及移至构建后动作之前会卡住。作业本身在5分钟内完成(与之前相同),然后挂起5-10分钟再继续。 我设法将其缩小为: 可以在此处找到引用的代码(自2.141版本开始提供)。 threadDump#1,threadDump#2 我们可以做些什么吗? 问题答案: 2.141引入了2分钟的进程终止等待时间(

  • 在Jenkins作业期间,我可以更改所有连续步骤的工作目录吗? 我工作的第一步是检查一个git项目。不幸的是,这个项目混合了多种技术;它不是java/maven项目(所以“mvn-f subdir/pom.xml”的技巧不适用),也不是gradle项目。所以我想切换到签出项目的子目录并开始运行Jenkins插件,比如调用shell脚本,比如运行tox来测试python代码,比如运行docker来构

  • 问题内容: 我在Objective-C中使用和获取应用程序的构建日期和时间。我找不到在Swift中获取此信息的方法。可能吗? 问题答案: 您可以使用,和。 原始答案: 在您的项目中创建一个新的Objective-C文件,当Xcode询问时,对创建桥接标头说是。 在这个新的Objective-C文件中,添加以下文件: 并在实现这些功能中: 现在转到桥接头并导入我们创建的。 现在回到您的任何Swift