最近,我开始了解Gradle作为构建系统的力量,作为Android开发人员,我想深入了解它。
一篇文章说:
"您可以使用Gradle wrapper命令行工具执行所有可用于Android项目的构建任务。它可以作为Windows的批处理文件(gradlew.bat)和Linux和Mac的shell脚本(gradlew.sh)使用,可从您使用Android Studio创建的每个项目的根目录中访问。"
要使用包装器运行任务,请使用以下命令之一:
在Windows上:
gradlew任务名称
现在我有一些疑问,如下:
什么是Gradle Wrapper和gradlew.bat?
如果我已经安装了Android Studio,并且正在使用gradle来构建我的应用程序(因此gradle已安装在我的系统中),那么在这种情况下,我仍然需要从命令行安装gradle来进行构建,就像我写任何建议时一样像gradle,gradlew在我的命令行上一样,我收到错误消息,说gradlew不被识别为内部或外部命令(其他命令则是相同的错误)。我可能在错误的路径上使用它,请帮助我在使用gradle相关命令的那条路径上使用我?
如果需要下载并安装它,如何以及在哪里可以找到该文件?和其他过程?
我为此使用Windows计算机。
-
如何/何时生成Gradle包装器文件的可能重复项?
Gradle包装器是Gradle构建系统的可选部分。它包含四个文件,您可以将它们检入版本控制系统。 * nix启动脚本/gradlew,/gradlew.bat Windows启动脚本,/gradle/wrapper/gradle-wrapper.jar(包含包装程序的类文件)由启动脚本启动,而/gradle/wrapper/gradle-wrapper.properties包含包装程序的某些配置,例如用于构建项目的Gradle版本。
我认为,每个Gradle项目,即使是最小的项目,都应使用Gradle包装器。
Gradle包装器确保您的构建始终以相同的Gradle版本运行,无论是谁执行该构建以及在何处安装或不安装该Gradle,只要一个人使用Gradle包装器来构建项目即可。这意味着您可以针对该Gradle版本设计构建,并确保该构建不会失败,仅因为有人使用了不同版本的Gradle,这也是构建可复制性中的重要一步。
另外,希望构建您的项目的人只需要安装Java就可以了。他不需要安装任何Gradle版本。实际上,任何已经安装的Gradle版本都会被忽略。 Gradle包装器检查~/.gradle/中是否已经存在构建所需的版本,因为任何项目的某些Gradle包装器都已将其放置在那里。如果已经存在,则使用它,否则将自动下载。
如果在命令行上键入gradlew且未找到命令,则意味着您没有将根项目路径放置到PATH环境变量中(我也不建议这样做),而您当前不在根目录中项目目录。要运行Gradle构建,您必须在项目中的任何位置,然后调用Gradle或Gradle包装器。但是,与路径上没有的任何可执行文件一样,您必须提供其路径。因此,如果您位于根项目目录中,则只需执行gradlew。如果您在/foo/bar/中,则需要调用../../gradlew。
Gradle Wrapper文件由隐式可用的Gradle任务wrapper生成,然后检入相关项目的VCS。如果该项目不存在这四个文件,则该文件不使用Gradle包装器,您应该向该项目发布改进请求以添加它。
如果某些项目未使用Gradle包装器,而是使用Gradle进行构建,则可以安装Gradle并使用gradle而不是gradlew,或者甚至可以调用磁盘上可用的任何其他项目的Gradle包装器。然后,将使用包装器或Gradle安装所使用的Gradle版本运行该构建,因此可能无法按预期方式运行,这就是为什么每个项目都使用Gradle时,实际上每个项目都应使用包装器的原因。
-
我没有真正使用Gradle的专用术语。如果您不理解我的回答,我会很乐于解释或重写,但您需要告诉我您不了解的内容,因为我无法猜测您没有了解的内容。
评论后编辑
Gradle是一个构建系统。
这个gradle-wrapper是构建Android项目的主要界面。它是Gradle-build-system的一部分,对gradle是否已安装进行了一些主要检查。
gradlew.bat-它是Windows上使用的批处理文件。您甚至可以使用记事本打开它以查看其中的说明。批处理文件就像写在要执行的文件中的"命令"。您可以使用它(在Windows中)执行构建命令。它还会检查gradle是否已安装。如果不是,它会下载并安装它。
示例:在Windows上构建android应用:
-
打开命令提示符
-
导航到项目的根目录
-
执行gradlew.bat assembleDebug
它启动包装器,检查是否在其中安装了Gradle并
执行所有"特定于等级"的命令以构建您的项目。
您需要安装Gradle吗?
其实没有此gradlew脚本的工作就是进行检查。如果gradle尚未存在,它将自动下载并用于以后的所有构建。
-
每当我编写gradlew或gradle或任何与gradle相关的命令时,都会出错。参见编辑后的帖子。
-
我在哪里可以得到这个包装纸?
-
你在用什么? Windows?还是linxu / mac?
-
我正在使用Windows
-
请参阅编辑后的ans的示例部分。
-
我进入了我的一个项目的路径,然后键入gradlew,现在它下载了一些内容。我不知道下载了什么,因为我读到,如果只有您尚未安装gradle,那么只有此命令才能为您安装。现在我已经安装了android studio,意味着安装了gradle,那么为什么要下载呢?
-
Gradle未随Android Studio一起安装。 Gradle是一个不同的系统。或即使已安装,也可能无法访问。 gradle-wrapper(gradlew)负责下载和安装Gradle(如果尚未安装)。 Gradle可能还会下载项目依赖项。
-
这个答案是完全错误的。 Gradle包装器是Gradle构建系统的一部分,也不是特定于Android的。这也并不能使构建变得容易,除非您不需要安装Gradle,然后您的构建就可以使用为该构建设计的确切Gradle版本运行。您编写的"指令"与不使用包装程序相同。 gradlew.bat不是包装器的接口,而是包装器的一部分。而且包装器也不关心常规安装的Gradle版本,只是忽略了它们。
gradlew.bat是Gradle包装器(在这种情况下为Windows)。 Gradle Wrapper是一个很小的实用程序,它将确保已安装Gradle(或在必要时安装),以便您始终可以构建项目。 Gradle本身允许您管理依赖关系并为项目构建配置。
如果您已经安装了Android Studio,那么您已经安装了Gradle,并且一切顺利。 (从技术上讲,每个项目都有自己的包装程序来处理安装/使用Gradle)
正如我上面提到的,您很好。
最后,Gradle是您用于构建项目的命令行工具,您可以很好地直接使用它(尽管不必这样做),因为它正是Android Studio用来构建项目的工具。
-
每当我编写gradlew或gradle或任何与gradle相关的命令时,都会出错。参见编辑后的帖子。
-
gradlew是项目的根目录,因此您需要在该文件夹中运行它。
-
这个答案是完全错误的。 gradlew.bat不是包装器,它是包装器的四个文件之一。包装器不关心常规安装的Gradle版本,但始终仅使用包装器管理的Gradle版本。
-
好的,是的,我想您可以说包装器是4个文件,其中2个是相同的(仅适用于不同的OS),另外两个是前两个使用的。我同意蝙蝠(或sh)的事实文件是您使用包装器的方式,我不确定做出这种区分是否会对Abhishek有所帮助。我不确定这是否意味着我"完全错误"。
-
好吧,这不是答案中唯一的错误,并且通过告诉人们启动脚本是包装程序,它们可能倾向于仅签入那些单独无用的文件。我几天前终于见过这样的项目。 ;-)
-
我认为这不是举行Gradle讲座的地方。从字面上看,答案中的所有信息都在Android文档和Gradles自己的文档上。 OP似乎没有做任何研究。就像您在回复他时所说的那样,他应该提出一些具体的问题,而不仅仅是"帮助我理解Gradle"。无论如何,尽管我澄清了第二点是否可以使您满意(尽管我对此表示怀疑),但我仍然坚持他的问题(即与Android Studio有关的Gralde(w))的回答。
-
他没有和AS一起真正询问Gradle。他刚刚提到他已经安装了AS来询问是否足以安装包装程序。问题是关于在命令行上使用包装程序。 :-)
-
我猜这些标签,提到了Android的开发,报价以及关于Gradle AS是否附带AS的第二个问题,那么……好吧,我的错。