Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio:将complex build.xml迁移到build.gradle_Android_Ant_Gradle_Android Studio_Android Gradle Plugin - Fatal编程技术网

Android Studio:将complex build.xml迁移到build.gradle

Android Studio:将complex build.xml迁移到build.gradle,android,ant,gradle,android-studio,android-gradle-plugin,Android,Ant,Gradle,Android Studio,Android Gradle Plugin,我已经成功地将我的项目从eclipse迁移到android studio,并生成了一个默认的build.gradle文件。该项目构建正确,我可以部署调试等 但真正的问题是构建发行版APK文件(从命令行),我曾经为其定制过ant构建(通过命令行调用,而不是从eclipse中调用) My custom build.xml通过以下方式从sdk文件夹导入了标准sdk build.xml文件: <import file="${sdk.dir}/tools/ant/build.xml" />

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

但真正的问题是构建发行版APK文件(从命令行),我曾经为其定制过ant构建(通过命令行调用,而不是从eclipse中调用)

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

  • 首先,我建议您将遗留项目导入android 演播室它将为您创建适当的build.gradle脚本
  • 然后,您可以通过在以下位置执行
    gradlew tasks
    来列出任务列表: 项目的根
  • 要依赖于某些任务,可以使用另一个任务的命令,例如
    init.dependsOn

只是记录在案:我放弃了使用以前的ant构建的想法,并完全迁移到了gradle。我需要做的大部分工作都可以通过目录结构来实现。你可以在我的另一个问题中找到关于我是如何做到这一点的详细信息:

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


如果有人有问题,我很乐意尽力回答。

谢谢您的评论。我已经将我的项目导入android studio。Android Studio创建了一个build.gradle文件,其中只包含几行代码。gradlew tasks命令确实很有帮助,我将尝试一下!我还将研究init.dependsOn,如果这让我走得更远(或者理想情况下直接达到我的目标),我将很高兴接受这个答案——干杯!另外,我添加了我的项目已经导入并正确构建的信息,这与我在构建发布版apks时希望的方式不同:)一个后续问题:现在我列出了任务(这样我可以看到哪些任务可用,比如“init”),我想做一些类似的事情:init.dependsOn“ant任务一”“ant任务二”“ant任务三”。。。这意味着在应该执行init之前,我首先要运行它的所有依赖项,但我上面的语法是错误的。我也不知道应该把这些东西放在什么地方。它应该进入android{…}还是其他地方?对不起,所有的问题,这个gradle的东西真的和ant不同:/@Zainodis我没有在Android Studio中大量使用ant。只需分享一个简单的hello world片段供您参考<代码>任务sayHello非常感谢你的代码片段和它不应该进入android模块的提示,这已经很有帮助了:)!听起来很痛苦。对我来说,创建一个干净的项目并在所有类中复制意大利面,然后通过dependencies块添加外部库更快,但我的应用程序并不庞大。基本上,您有两个build.gradle文件。一个用于整个项目,另一个用于“模块”,它本质上是项目中的一个项目,因此您可以创建多个“模块”,以防您需要自己编译外部库。您可以将一个模块添加到另一个模块,方法是将其作为插件添加到封装模块的build.gradle中。希望这至少能给你一些谷歌的东西!我想我应该提到,我已经将我的项目导入到android studio中,它可以很好地进行调试:)。但是我需要为发布apk做一些事情,比如重命名文件等等。所以这是我目前陷入困境的一点,因为我以前在ant中做过这件事。我确信它在官方的无数页面中的某个地方,因为我以前读过它。虽然不能给你一个确切的页面,但是有几个PDF详细介绍了如何做所有这些事情。不过,出于安全原因,我认为您对可能发生的事情的自由有点有限。@G_V我应该提到,我没有发布到appstore。这似乎真的是一个gradle迁移问题,因为我所描述的所有这些事情都与ant完美配合,现在我只需要让它们与gradle配合:)
<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
<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>