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 中所做的同样的事情,具体来说:
- 对于 build.xml,我在我的 ant 构建中导入了一个默认 build.xml - 某处是否存在标准 build.gradle 文件,以便我可以查看定义的任务?
- 是否可以覆盖 gradle 任务,如果可以:如何覆盖?
- 我很确定来自 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 文件):
如果有人有任何问题,我很乐意尽力解答。
我已经成功地将我的项目从 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 中所做的同样的事情,具体来说:
- 对于 build.xml,我在我的 ant 构建中导入了一个默认 build.xml - 某处是否存在标准 build.gradle 文件,以便我可以查看定义的任务?
- 是否可以覆盖 gradle 任务,如果可以:如何覆盖?
- 我很确定来自 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 文件):
如果有人有任何问题,我很乐意尽力解答。