Gradle对我来说有点困惑,对任何新的Android开发人员来说也是如此。谁能解释一下Android Studio中的Gradle是什么,它的目的是什么?为什么Android Studio中包含它?
当前回答
我认为这背后的问题是为什么Android Studio / Gradle的体验如此糟糕。
典型的Clojure体验:
下载project.clj中列出的依赖项。 Leiningen通过Clojars和Maven获得依赖关系。 项目编译。
典型的Android Studio / Gradle体验:
“导入我的Eclipse项目”。 好的,项目导入。 Gradle正在做自己的事情…等待……等待……等待……Gradle已经完成了。 编译…不能编译,因为我不知道X是什么/找不到Y库。
我不确定这完全是Gradle的错。但是“从Eclipse项目导入”似乎很不靠谱。对于Gradle的所有所谓的复杂性和构建系统的优点,Android Studio似乎并没有很好地从Eclipse导入构建依赖项或构建过程。
它不会告诉你什么时候导入完整的依赖关系图失败了。Android Studio没有提供任何有用的帮助或提示来解决这个问题。它没有告诉您可以手动查看Eclipse文件夹中的哪个位置。它不会告诉你哪个库好像不见了。或者帮助您搜索Maven等。
在2016年,像Leiningen / Clojars, Node.js的npm, Python的pip, Debian的apkg(我相信其他语言和系统的许多类似的包管理器)都工作得很好……缺少依赖关系已成为过去。
Android除外。Android Studio现在是唯一一个让我感到依赖缺失的地方。
我倾向于说这是谷歌的错。当他们轻率地决定从Eclipse转向Android Studio / Gradle而没有产生一个强大的转换过程时,他们破坏了Android生态系统(以及数以千计的现有Android项目/在线教程)。那些在Eclipse中工作的项目的人并没有将它们适应Android Studio(可能是因为这对他们来说很痛苦)。试图在Android Studio中使用这些项目的人也遇到了同样的问题。
无论如何,如果Gradle是一个超级强大的构建系统,为什么我还在SDK管理器中管理大量其他依赖?为什么一个需要NDK的项目不能在它的Gradle文件中指定这一点,以便在需要时自动安装和构建?为什么NDK是特别的?目标平台也是如此?为什么我要显式地在IDE中安装它们,而不是只是检查我的项目,并在幕后为我排序?
其他回答
Android Studio构建系统基于Gradle,并且Android Gradle插件添加了几个特定于构建Android应用程序的特性。虽然Android插件通常是与Android Studio同步更新的,但插件(以及Gradle系统的其余部分)可以独立于Android Studio运行,并单独更新。
有关详情,请参阅:
gradle-plugin版本 gradle网站
Gradle是一种构建工具,用于构建程序的源代码。所以它是Android Studio的重要组成部分,需要在开始开发应用程序之前安装。
我们不需要单独安装它,因为当我们制作第一个项目时,Android Studio会帮我们安装。
定义:Gradle可以被描述为一种结构化的构建机制,它为开发人员提供了工具和灵活性来管理项目的资源,以创建更小的构建,针对特定配置的特定设备的特定需求
基本配置
minimumSdk maximumSdk targettedSdk versionCode versionName
库
我们可以根据需要添加Android库或任何其他第三方库。这很容易,以前是一个乏味的任务。如果库不适合现有项目,则会向开发人员显示一个日志,开发人员可以在其中找到适当的解决方案来对项目进行更改,以便添加库。这只是一种依赖。
生成不同的构建
将构建类型与构建风格相结合以获得各种构建变体
==================== ====================
| BuildTypes | | ProductFlavours |
-------------------- ====================== --------------------
| Debug,Production | || || | Paid,Free,Demo,Mock|
==================== || || ====================
|| ||
VV VV
=================================================================
| DebugPaid, DebugFree, DebugDemo, DebugMock |
| ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
=================================================================
减少尺寸
Gradle通过从集成库中删除未使用的资源和未使用的东西来帮助减小生成的构建的大小。
管理权限
我们可以根据需求在特定场景中添加特定的权限,从而为特定的构建指定特定的权限。
针对某些设备的构建
我们可以为包含特定密度和特定API级别的特定设备生成构建。这有助于根据不同类型设备的需求在应用商店中部署产品。
好的参考
Vogella Tutorials
我将以尽可能简单的方式用Java来解释它。
假设我们有一个简单的hello world项目(HelloWorld.java)。为了运行项目,我们需要编译它(HelloWorld.class)。然后我们将在JVM (java虚拟机)中运行它。
编译代码的过程可以使用自带javac.exe (Java编译器命令)的JDK (Java开发工具包)完成。它将Java源文件(. Java)编译为字节码类文件(.class)。
使用所有.java源文件的列表调用javac.exe。例如,对于单个源文件
javac HelloWorld.java
编译多个Java源文件
javac Program1.java Program2.java Program3.java
这并不是很有趣,因为一旦你开始做大项目,你可能会开始使用第三方提供的功能(jar文件)。例如 编译一个依赖于外部库的源文件:
javac -classpath mail.jar EmailSender.java
编译一个依赖于外部多个库的源文件:(其中Myprogram.java是依赖于多个库的源文件)
javac -cp lib1.jar;lib2.jar;lib3.jar MyProgram.java
请记住,有时源文件依赖于100和1000多个库,这使得手动编译成为一项真正的艰苦工作。为了解决这个问题,我们有构建工具,例如Gradle, Maven(使编译过程没有错误,并且可以轻松完成多次)
像Gradle这样的内置工具的其他用途是
测试源代码很容易 打包您的应用程序的格式,以便它可以 发布和部署很容易
在Android Studio中,Gradle是一个自定义构建工具,通过管理依赖关系和提供自定义构建逻辑来构建Android包(APK文件)。
APK文件(Android Application package)是一个特殊格式的ZIP文件,包含
字节码 资源(图像、UI、XML等) 清单文件
APK文件被签名并通过ADB (Android调试桥)推送到设备上执行。
推荐文章
- 如何/何时生成Gradle包装文件?
- 在Android Studio的模拟器上截图
- 如何在Android工作室的外部库中添加一个jar ?
- 构建被配置为优先选择设置存储库而不是项目存储库,但存储库“maven”是由构建文件“Build .gradle”添加的。
- “需要Gradle 2.10版本。”错误
- adb.exe在windows 10中的位置?
- 处理EditText中可绘制对象上的单击事件
- 在Android Studio 4.2中,Gradle任务不会显示在Gradle工具窗口中
- Android Studio -没有可调试的应用程序
- Android Studio Gradle已经处理模块
- 如何使用自定义字体在一个项目写在Android工作室
- Android Studio错误:“Manifest合并失败:针对Android 12的应用程序”
- 签名版本之间的差异- V1 (Jar签名)和V2(完整的APK签名),而生成一个签名的APK在安卓工作室?
- 无法找到或加载主类org.gradle.wrapper.GradleWrapperMain
- 原因:buildOutput。apkData不能为空