【问题标题】:How does gradle execute an ant build filegradle如何执行ant构建文件
【发布时间】:2014-11-20 12:22:26
【问题描述】:

我一直在让自己发疯,试图将我的 custom_rules.xml 重建为 gradle 中的某些东西,但事实证明这非常困难。所以我的下一步是尝试将我在 gradle 中不能做的最后几件事作为 build.xml 导入。

但是这似乎没有做任何事情。当我尝试使用 ant.importBuild 'build.xml' 我的脚本没有得到任何反馈或回声。我已经阅读了很多 gradles 文档,尤其是关于 ant 的文档,对于我的一生,我无法弄清楚一旦导入构建我应该做什么。脚本是如何执行的?

这是我的 build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
<target name="postPackage" >
<property name="config_path" location="${cert.dir}" />
<property name="out.pre.widevine.signed.file" location="release-pre-widevine-sign.apk" />
<property name="out.widevine.signed.file" location="release-widevine-signed.apk" />
<echo>sign with widevine certificate</echo>
<touch file="res/raw/wv.properties"/>
<copy file="${out.packaged.file}" tofile="${out.pre.widevine.signed.file}"/>
<java jar="apksigtool.jar" failonerror="true" fork="true">
    <arg value="${out.packaged.file}"/>
    <arg value="private_key.der" />
    <arg value="my.crt" />
</java>
<copy file="${out.packaged.file}" tofile="${out.widevine.signed.file}"/>
</target>
</project>

【问题讨论】:

    标签: android ant gradle build-process


    【解决方案1】:

    我能够通过在方法中使用以下 sn-p 来完成此操作

        ant.importBuild 'build.xml'
        postPackage.doFirst{println("Im starting")}
        postPackage.execute()
    

    【讨论】:

    • 这绝对不是你想要的。
    • @PeterNiederwieser 好的,请以实际工作代码作为示例提出更好的方法。
    • 正如我所说,您首先必须细化这个问题:Ant 代码究竟做了什么,它应该在什么时候执行,您究竟试图在 Gradle 方面解决什么问题等。
    • 我的最终解决方案在这里stackoverflow.com/questions/26048396/…
    【解决方案2】:

    ant.importBuild 将为 Ant 构建中找到的每个 Ant 目标创建一个同名的 Gradle 任务。然后,您可以从命令行调用这些任务和/或使其他任务依赖于它们。更多信息请参阅Gradle User Guide 中的“16.2. 导入 Ant 构建”,

    【讨论】:

    • 感谢您的回复 :) 我在 android studio 工作,我花在命令行上的时间越少,就意味着有更多的时间做其他事情。因此,如果我理解正确,当我导入构建文件时,所有目标都成为任务?我仍在学习 build.gradle 生命周期,所以请您解释一下我应该在何时何地实现目标/任务依赖项。我已经阅读了很多文档,但它给我留下的问题比刚开始时要多得多。
    • 这是一个新问题,当前问题没有足够的信息来回答这个问题。编辑问题或创建一个新问题。
    • RFM 响应的用处有限。
    【解决方案3】:

    嗯,我认为这个 Kotlin 对我有用;

      val t : Task = tasks.named("war").get()
      t.actions.forEach { a -> a.execute(t) }
    

    【讨论】:

    • 请注意,这是我之前的回答,似乎不起作用 gradle.run { tasks.getByName("war") }
    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2011-12-11
    • 2017-01-07
    • 2018-04-06
    相关资源
    最近更新 更多