Android Studio:将复杂的 build.xml 迁移到 build.gradle

Android Studio: Migrate complex build.xml to build.gradle

我已经成功地将我的项目从 eclipse 迁移到 android studio,并生成了一个默认的 build.gradle 文件。项目构建正确,我可以部署调试等。

虽然真正的问题是构建发布 APK 文件(从命令行),我曾经有一个自定义的 ant-build(通过命令行调用,而不是在 eclipse 之外)。

我的自定义 build.xml 通过以下方式从 SDK 文件夹导入标准 sdk build.xml 文件:

<import file="${sdk.dir}/tools/ant/build.xml" />

所以我在 build.xml 中所要做的就是覆盖目标或通过 "depends" 连接到它们。

覆盖示例:

<target name="-set-release-mode" depends="-set-mode-check">
    <!--Here I rename my output apk files to something like: myapp-versionFromAndroidManifest.apk -->
</target

以及添加依赖的例子:

<target name="-pre-build" depends="clean">
    <!-- my custom code where I copy resource files, process command line arguments   
     use xpath to extract things like the version from the AndroidManifest.xml and 
     write them into custom xml files etc... -->
</target

总的来说,使用 ant 整个事情真的很简单。但是现在,当谈到迁移到 gradle 时,我完全不知所措,如何完成我以前在 ant 中所做的同样的事情,具体来说:

  1. 对于 build.xml,我在我的 ant 构建中导入了一个默认 build.xml - 某处是否存在标准 build.gradle 文件,以便我可以查看定义的任务?
  2. 是否可以覆盖 gradle 任务,如果可以:如何覆盖?
  3. 我很确定来自 ant 的 depends="..." 可以在 gradle 中模仿,但我不知道如何模仿,而且这也需要回答问题 1。

我在谷歌上搜索了很多教程,还有迁移教程,例如(遗憾的是没有解决我的问题):

http://keepsafe-engineering.tumblr.com/post/87818767721/migrating-android-app-from-ant-to-gradle

http://ryanharter.com/blog/2013/07/17/migrating-android-projects-to-gradle/

我还从 gradle 文档中阅读了这一章,但根本没有帮助,因为它没有回答问题 1、2 或 3:

http://www.gradle.org/docs/current/userguide/ant.html

下面给出了一些有趣的提示:

http://toastdroid.com/2014/03/28/customizing-your-build-with-gradle/

我还尝试简单地将默认 build.xml 从 sdk 文件夹复制到我自己的 build.xml 中,然后简单地在 gradle 中导入该 ant 构建文件并执行启动的 ant 任务构建的:

<target name="release"
            depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
            description="Builds the application in release mode.">
</target>

但我开始 运行 问题表明这不再是一个选项,因为默认 build.xml 开始抛出错误,这似乎与 SDK 版本有关。由于新的 android studio 项目结构,我不得不在原始 sdk build.xml 上乱搞很多东西,所以文件不在预期的位置等等...

  • 首先,我建议您将遗留项目导入 android 工作室。它将为您创建适当的 build.gradle 脚本。
  • 然后,您可以通过执行 gradlew tasks 来列出任务列表 你项目的根目录。
  • 依赖一些任务,可以使用init.dependsOn anotherTask.
  • 等命令

仅作记录:我放弃了使用我以前的 ant-build 的想法并完全迁移到 gradle。我需要做的大部分事情都可以通过目录结构来实现。您可以在我的其他问题中找到有关我如何做到这一点的详细信息:

现在第二部分是调用我的 java 代码,它做了一些我真的不想迁移到 groovy/gradle 的事情。因此,我想出了如何从 gradle 脚本执行我的 java class(尽管我实际上必须从中制作一个 jar 文件):

如果有人有任何问题,我很乐意尽力解答。