ChatGPT解决这个技术问题 Extra ChatGPT

What is Gradle in Android Studio?

Gradle is a bit confusing to me, and also for any new Android developer. Can anyone explain what Gradle in Android Studio is and what its purpose is? Why is it included in Android Studio?

To answer why you would want a build tool such as Gradle, check out this post from Jeff Atwood.
When someone asks a question on here that yes, does have a lot of links in Google about it, what they are really asking is for someone to answer the question with plain language and to put it in context, such as why do we need it, who will use it most, do we need to know it to build Android apps in Android Studio, etc. Because most often the links you find about it on Google are in "tech-speak" and for a beginner this is confusing.
@NoniA. Exactly my thoughts. I am still a little confused, is gradle just the background process that compiles the code I have written? Also, after looking at lots of other answers, they mention dependencies. What are those? THanks so much!
Gradle is the most annoying part of being an Android developer. When it asks you to upgrade your project to the latest version of gradle, think twice about it. Also make sure you have a backup first. In my experience almost every time I upgrade to a newer version it causes hours of searching the web trying to find out why it broke my project. Not fun!

P
Peter Mortensen

Short Answer

Gradle is a build system.

Long Answer

Before Android Studio you were using Eclipse for your development purposes, and, chances are, you didn't know how to build your Android APK without Eclipse.

You can do this on the command line, but you have to learn what each tool (dx and AAPT) does in the SDK. Eclipse saved us all from these low-level, but important, fundamental details by giving us their own build system.

Now, have you ever wondered why the res folder is in the same directory as your src folder?

This is where the build system enters the picture. The build system automatically takes all the source files (.java or .xml), then applies the appropriate tool (e.g., takes .java class files and converts them to .dex files), and groups all of them into one compressed file - our beloved APK.

This build system uses some conventions: an example of one is to specify the directory containing the source files (in Eclipse it is \src folder) or resources files (in Eclipse it is \res folder).

Now, in order to automate all these tasks, there has to be a script; you can write your own build system using shell scripting in Linux or batch files syntax in Windows. Got it?

Gradle is another build system that takes the best features from other build systems and combines them into one. It is improved based off of their shortcomings. It is a JVM-based build system. That means you can write your own script in Java, which Android Studio makes use of.

One cool thing about Gradle is that it is a plugin-based system. This means if you have your own programming language and you want to automate the task of building some package (output like a JAR file for Java) from sources, then you can write a complete plugin in Java or Groovy (or Kotlin, see here), and distribute it to the rest of the world.

Why did Google use it?

Google saw one of the most advanced build systems on the market and realized that you could write scripts of your own with little-to-no learning curve, and without learning Groovy or any other new language. So they wrote the Android plugin for Gradle.

You must have seen build.gradle file(s) in your project. That is where you can write scripts to automate your tasks. The code you saw in these files is Groovy code. If you write System.out.println("Hello Gradle!"); then it will print on your console.

What can you do in a build script?

A simple example is that you have to copy some files from one directory to another before the actual build process happens. A Gradle build script can do this.


I have to say that Gradle was giving me issues when taking an AndroidStudio project from one location to another. Mismatches of versions, missing modules, whatnot... it was giving me hard time. I ended up re-creating the project skeleton and cutting/pasting the parts of code that were from the old project to the new one. And this is under Windows for both sources and destination. I am going to move it now under a Linux-based lab.
What I don't understand is why gradle tries to connect to Internet for every single project that I make or even every single time I want to compile
I thought IntelliJ already knew how to build Android projects without the need for another build system.
Another key advantage of gradle over the pre Android studio build system(s) is dependency management. Previously to use an Android library in a project, one would have to download the source code, add it to your project and compile it with your project. Instead, with gradle one can add a single line to the build.gradle and gradle will then download the compiled library from a public repository and add it to your project. Some examples: blog.teamtreehouse.com/android-libraries-use-every-project This also works for standard Java jar files instead of putting them in the lib directory.
Gradle is a terrible build system. In using Android Studio I want it to take care of the build. I don't understand why adding some classes forces Gradle to do a sync before it can be useful. Working with Visual Studio by comparison is awesome (or even X-Code) - no crappy extras needed. The IDE builds the project and solution without the need to tinker around in random files for settings that the Android build process needs at times or through updates of old projects. Gradle is the worst part of the Android experience.
P
Peter Mortensen

It's the new build tool that Google wants to use for Android. It's being used due to it being more extensible, and useful than Ant. It is meant to enhance developer experience.

You can view a talk by Xavier Ducrohet from the Android Developer Team at Google I/O here.

There is also another talk on Android Studio by Xavier and Tor Norbye, also during Google I/O here.


I thought IntelliJ already knew how to build Android projects without the need for another build system.
So is gradle just the background process that compiles the code I have written? Also, after looking at lots of other answers, they mention dependencies. What are those? THanks so much daniel!
@user5562706 It doesn't compile the code, but it's responsible for calling the executable that does compile your code. After compiling your code, it can then run another task to package it up, another to copy it to a directory of your choosing, then maybe another to upload it to a server somewhere... It's those sorts of tasks Gradle, or any build system, will do.
k
kenju

Gradle is a build system running on Android Studio.

In other languages for example:

Ant and Maven of Java

Rake of Ruby

A-A-P of C

NAnt of .NET

Make in Linux


When you said Gradle is similar to make, I just got its concept
PHING of PHP
One of the fastest ways I've found to learn what an unknown tool does and where it falls in the pipeline, is to type into Google the name of the tool and "vs". The results will usually show "X vs Y" where Y is some other tool you might be more familiar with.
webpack for javascript
Linux is not a programming language. It is mostly used for C. Perhaps "Make of C on Linux"?
P
Peter Mortensen

Here is a detailed explanation of what Gradle is and how to use it in Android Studio.

Exploring the Gradle Files

Whenever you create a project in Android Studio, the build system automatically generates all the necessary Gradle build files.

Gradle Build Files

Gradle build files use a domain-specific language or DSL to define custom build logic and to interact with the Android-specific elements of the Android plugin for Gradle. Android Studio projects consists of one or more modules, which are components that you can build, test, and debug independently. Each module has its own build file, so every Android Studio project contains two kinds of Gradle build files. Top-Level Build File: This is where you'll find the configuration options that are common to all the modules that make up your project. Module-Level Build File: Each module has its own Gradle build file that contains module-specific build settings. You'll spend most of your time editing module-level build file(s) rather than your project's top-level build file.

To take a look at these build.gradle files, open Android Studio's Project panel (by selecting the Project tab) and expand the Gradle Scripts folder. The first two items in the Gradle Scripts folder are the project-level and module-level Gradle build files

Top-Level Gradle Build File

Every Android Studio project contains a single, top-level Gradle build file. This build.gradle file is the first item that appears in the Gradle Scripts folder and is clearly marked Project.

Most of the time, you won't need to make any changes to this file, but it's still useful to understand its contents and the role it plays within your project.

Module-Level Gradle Build Files

In addition to the project-level Gradle build file, each module has a Gradle build file of its own. Below is an annotated version of a basic, module-level Gradle build file.

Other Gradle Files

In addition to the build.gradle files, your Gradle Scripts folder contains some other Gradle files. Most of the time you won't have to manually edit these files as they'll update automatically when you make any relevant changes to your project. However, it's a good idea to understand the role these files play within your project.

gradle-wrapper.properties (Gradle Version)

This file allows other people to build your code, even if they don't have Gradle installed on their machine. This file checks whether the correct version of Gradle is installed and downloads the necessary version if necessary.

settings.gradle

This file references all the modules that make up your project.

gradle.properties (Project Properties)

This file contains configuration information for your entire project. It's empty by default, but you can apply a wide range of properties to your project by adding them to this file.

local.properties (SDK Location)

This file tells the Android Gradle plugin where it can find your Android SDK installation.

Note: local.properties contains information that's specific to the local installation of the Android SDK. This means that you shouldn't keep this file under source control.

Suggested reading - Tutsplus Tutorial

I got a clear understanding of Gradle from this.


Note that link-only answers are discouraged, SO answers should be the end-point of a search for a solution (vs. yet another stopover of references, which tend to get stale over time). Please consider adding a stand-alone synopsis here, keeping the link as a reference.
h
hichris123

Gradle is one type of build tool that builds the source code of the program. So it's an important part of Android Studio, and needs to be installed before starting developing your application.

We do not have to install it separately, because the Android Studio does it for us, when we make our first project.


What do you mean by building the source code of the program? Isn't that the job of a developer?
This answer is completely wrong in the way it is worded. Gradle is the packaging tool that comes bundled with Android Studio, so what it takes care of is building the apk. The source code is always being built by the compiler and nothing else.
Yet from another question it sounds like Gradle won't work properly without a reliable internet conneciton, does this mean I have to throw away Android Studio until that is fixed?
@committedandroider: the job of a developer is to write the source code, not build it. In system developement we use the word "Build" to mean the process of packaging the compiled source code into a final product (a package or an executable)
@MestreLion lol I was pretty confused back then because people used 'building' in reference to writing source code for their projects- i built this chat server, this app to...
P
Peter Mortensen

Definition: Gradle can be described as a structured building mechanism where it provides a developer with the tools and flexibility to manage the resources of a project to create builds that are smaller in size, targeting specific requirements for certain devices of certain configurations

Basic configurations

minimumSdk maximumSdk targettedSdk versionCode versionName

Libraries

We can add Android libraries or any other third-party libraries in addition as per requirements. It is easy and was a tedious task earlier. If the library does not fit for the existing project, the developer is shown a log where the person can find an appropriate solution to make changes to the project so that the library can be added. It's just one line of dependency.

Generating varieties of builds

Combining build types with build flavours to get varieties of build variants

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

Reducing size

Gradle helps in reducing the size of the generated build by removing the unused resources also unused things from integrated libraries.

Managing permissions

We can specify certain permissions for certain builds by adding certain permissions in certain scenarios based on requirements.

Builds for certain devices

We can manage generating build for certain devices that include certain densities and certain API levels. This helps in product deployments in the app store according to requirements across multiple types of devices.

Good reference

Vogella Tutorials


C
Community

You can find everything you need to know about Gradle here: Gradle Plugin User Guide

Goals of the new Build System The goals of the new build system are: Make it easy to reuse code and resources Make it easy to create several variants of an application, either for multi-apk distribution or for different flavors of an application Make it easy to configure, extend and customize the build process Good IDE integration Why Gradle? Gradle is an advanced build system as well as an advanced build toolkit allowing to create custom build logic through plugins. Here are some of its features that made us choose Gradle: Domain Specific Language (DSL) to describe and manipulate the build logic Build files are Groovy based and allow mixing of declarative elements through the DSL and using code to manipulate the DSL elements to provide custom logic. Built-in dependency management through Maven and/or Ivy. Very flexible. Allows using best practices but doesn’t force its own way of doing things. Plugins can expose their own DSL and their own API for build files to use. Good Tooling API allowing IDE integration


Re "everything you need": No, it is missing information about DX (and D8 for that matter).
P
Peter Mortensen

Gradle is a build system. Build systems are software tools designed to automate the process of program compilation. Build systems come in various forms, and are used for a variety of software build tasks. While their primary goal is to efficiently create executables.

Another related term is build automation which is the process of automating the creation of a software build and the associated processes including: compiling computer source code into binary code, packaging binary code, and running automated tests.

Few similar build system for other languages are (see complete list here):

Apache Ant and Apache Maven - Java sbt - for Scala (Play Framework, etc.) A-A-P - Python-based build tool Rake (Apache Builder) - Ruby Leiningen for Clojure


P
Peter Mortensen

At the risk of being discursive I think behind this is the question of why the Android Studio / Gradle experience is so bad.

Typical Clojure experience:

download project with dependencies listed in project.clj.

Leiningen gets the dependencies thanks to Clojars and Maven.

Project compiles.

Typical Android Studio / Gradle experience:

"Import my Eclipse project".

OK, project imported.

Gradle is doing its thing ... wait ... wait ... wait ... Gradle has finished.

Compile ... can't compile, because I don't know what an X is / can't find Y library.

I'm not sure this is Gradle's fault exactly. But the "import from Eclipse project" seems pretty flaky. For all of Gradle's alleged sophistication and the virtues of a build system, Android Studio just doesn't seem to import the build dependencies or build process from Eclipse very well.

It doesn't tell you when it's failed to import a complete dependency graph. The Android Studio gives no useful help or tips as to how to solve the problem. It doesn't tell you where you can manually look in the Eclipse folders. It doesn't tell you which library seems to be missing. Or help you search Maven, etc. for them.

In 2016 things like Leiningen / Clojars, or Node.js's npm, or Python's pip, or the Debian apkg (and I'm sure many similar package managers for other languages and systems) all work beautifully ... missing dependencies are thing of the past.

Except with Android. Android Studio is now the only place where I still seem to experience missing-dependency hell.

I'm inclined to say this is Google's fault. They broke the Android ecosystem (and thousands of existing Android projects / online tutorials) when they cavalierly decided to shift from Eclipse to Android Studio / Gradle without producing a robust conversion process. People whose projects work in Eclipse aren't adapting them to Android Studio (presumably because it's a pain for them). And people trying to use those projects in Android Studio are hitting the same issues.

And anyway, if Gradle is this super-powerful build system, why am I still managing a whole lot of other dependencies in the SDK Manager? Why can't a project that needs, say, the NDK specify this in its Gradle file so that it gets automatically installed and built-against when needed? Why is NDK special? Similarly for target platforms? Why am I installing them explicitly in the IDE rather than just checking my project against them and having this all sorted for me behind the scenes?


I fully agree that Gradle is a terrible build system. It is the component that makes Android Studio far worse than X-Code or Visual Studio. I realise these must "build" the system behind the scenes but I'm not really required to know/care/tinker with their internals. Gradle on the other hand seems to break with every Android Studio update and bogs down the system even just adding a class. No other IDE does that.
P
Peter Mortensen

Gradle is an advanced build system as well as an advanced build toolkit allowing to create custom build logic through plugins!

Advantages:

DSL - Domain-specific language, based on Groovy

DAG - Directed acyclic graph

Incremental builds

Extensible domain model

Gradle is always up to date

Before a task is being execute, Gradle takes a snapshot of its task’s input and output.

In case the snapshot has changed or it doesn’t exists, Gradle will re-execute this task.

Manifest entries

Through the DSL it is possible to configure the following manifest entries:

Build variant

By default, the Android plugin automatically sets up the project to build both a debug and a release version of the application.

Dependencies

Local Dependencies:

If you have binary archives in your local filesystem that a module depends on, such as JAR files, you can declare these dependencies in the build file for that module.

Remote Dependencies:

First the repository must be added to the list, and then the dependency must be declared in a way that Maven or Ivy declare their artifacts.


P
Peter Mortensen

Gradle is to the Groovy JVM language what Ant is to Java. Basically, it's Groovy's build tool. Unlike Ant, it's based on the full Groovy language. You can, for example, write Groovy script code in the Gradle script to do something rather than relying on a domain-specific language.

I don't know IntelliJ IDEA's specific integration, but imagine you could "extend" Groovy such that you could write specific "build" language primitives and they just became part of the Groovy language. (Groovy's metaprogramming is a whole discussion unto itself.) IntelliJ and Google could use Gradle to build a very high-level build language, yet, it's a language build on an expandable, open standard.


it's not "Groovys build tool" - it's a multi purpose build tool whose DSL is build on top of groovy
P
Peter Mortensen

Gradle is an advanced build toolkit for Android that manages dependencies and allows you to define custom build logic. Features are like

Customize, configure, and extend the build process.

Create multiple APK files for your app with different features using the same project.

Reuse code and resources.

Reference


P
Peter Mortensen

Gradle is an automated build toolkit that can integrate into lots of different environments, not only for Android projects.

Here are few things that you can do with Gradle.

Minimal configuration required for new projects because Gradle has default configurations for your Android Studio projects.

Dependency declaration. You can declare dependency JAR files or library files that is hosted on the local or remote server.

Gradle automatically generates a test directory and a test APK file from your project's source.

If you add all the necessary information, such as keyPassword and keyAlias, to your Gradle build file, you can use Gradle to generate signed APK files.

Gradle can generate multiple APK files with different packages and build configurations from a single module.


P
Peter Mortensen

In Android Studio, Gradle is a custom build tool used to build Android packages (APK files) by managing dependencies and providing custom build logic.

APK file (Android Application package) is a specially formatted ZIP file which contains

Byte code

Resources (images, UI, XML, etc.)

Manifest file

An APK file gets signed and pushed to the device using ADB (Android Debug Bridge) where it gets executed.


P
Peter Mortensen

Gradle is a build tool custom and is used for building APK files. It is also known as an application package kit.


What do you mean by "build tool custom"? Please respond by editing (changing) your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today).
D
Dale

Gradle is what makes it possible to automate the building of complex Android projects that involve 10s of thousands of lines of code from multiple sources, projects, libraries, etc. It can conditionally generate multiple optimized APKs based on a plethora of configuration specifications - if you are interested, the other answers provide more details of this aspect of Gradle.

However, if you're new to Android development, Gradle in 99% of cases is what stops your project from building. It is an inscrutable, complex system that effectively obfuscates the Android build process and essentially renders it unavailable to inexperienced developers, ie in order to build a simple entry-level Android App the unsuspecting newbie might need to study and understand many things that they didn't bargain for such as:

Android APK structure and ecosystem

Android Studio

Java Classpaths and dependencies

Groovy

Gradle build scripts

Many other complex and interesting technologies

All these things are interesting and useful for Android developers to know, but they are far from easy and present a formidable barrier to entry. I suspect that what inspired the OP to ask this question is the feeling of frustration that inevitably hits the neophyte developer after spending way too long trying to get a simple app to build and being continually thwarted by Gradle. The problem is perversely exacerbated by the overwhelming quantity of highly technical documentation that is available for all these technologies. Also for a large amount of development needs, Gradle is overkill.

An alternative is to write a shell script that builds your project by automating the tools available in the Android SDK. The virtues of this approach are many, for starters, it's probably the best way to study and understand the build process and the Android ecosystem, and it allows you to completely control how your app is built. However, this approach is more suitable for deeply irredeemable tech-heads than it is to inexperienced noobs trying out android.

What is conspicuous by its absence (please inform me if there is such a thing) is an entry-level, lightweight IDE with a reduced feature set that simultaneously simplifies the build process while not obscuring it (so not Netbeans or Eclipse) it could possibly still use Gradle (what was wrong with Ant). It should make it easy to generate APKs that conform to a few common configurations and use a project structure that can evolve to a full Android Studio project should you decide to take it that way.


P
Peter Mortensen

By @Brian Gardner:

Gradle is an extensive build tool and dependency manager for programming projects. It has a domain-specific language based on Groovy. Gradle also provides build-by-convention support for many types of projects including Java, Android and Scala.

Feature of Gradle:

Dependency Management Using Ant from Gradle Gradle Plugins Java Plugin Android Plugin Multi-Project Builds


What does "Brian Gardner" refer to?
S
S.Voulgaris

In plain terms, Gradle is a tool provided by Android Studio in order to implement two important processes:

Build our projects Package AndroidManifest.xml,res folder,and binary code into a specially formatted zip file called APK


R
Raviraj

Gradle is an easily customizable build system that supports building by a convention model. Gradle is written in Java, but the build language is Groovy DSL (domain spec language). Gradle not only supports multi-project builds, but it also supports dependencies like Ivy and Maven. Gradle also can support building non-Java projects.

https://medium.com/@ravirajdesai501/what-is-gradle-442458dd7ec1


c
c z

Gradle is like a version of make that puts features before usability, which is why you and 433k readers can't even work out that it's a build system.


t
thepunitsingh

The Android Studio build system is based on Gradle, and the Android Gradle plugin adds several features that are specific to building Android apps. Although the Android plugin is typically updated in lock-step with Android Studio, the plugin (and the rest of the Gradle system) can run independent of Android Studio and be updated separately.

For more details you can refer:

https://developer.android.com/studio/releases/gradle-plugin?gclid=Cj0KCQiAlZH_BRCgARIsAAZHSBndmJC_myjKnuCBZbe7u9nyzMjbFGES2SVvedq4nxyqdqJnqq0xxlAaAvGMEALw_wcB&gclsrc=aw.ds https://gradle.org/


H
Himesh Perera

Short and simple answer for that,

Gradle is a build system, which is responsible for code compilation, testing, deployment and conversion of the code into . dex files and hence running the app on the device. As Android Studio comes with Gradle system pre-installed, there is no need to install additional runtime softwares to build our project.


y
yoAlex5

Gradle and Android

Gradle is an open-source build automation tool. Gradle supports Java and Kotlin for Android

source files -> build tools -> output file(.apk, .jar, .aar ...)

You can use more low level build tools like javac, DX, D8[About], aapt[About], sign tools ...

Gradle is more hight level tool which do all this stuff under the hood. It has next advantages:

dependency manager[About]

uses Domain Specific Language(DSL) on Groovy or Kotlin to expose current settings or to customize/extends the build process. For example you are able to write some tasks and share them through any projects

[gradle vs gradlew]


P
Peter Mortensen

Gradle = Groovy + Cradle

Reference: Hans Dockter forum comment

The confusion is a bit unnecessary when it could have just been called "Build" or something in Android Studio.

We like to make things difficult for ourselves in the development community.


P
Peter Mortensen

Search Results

Featured snippet from the web

Android | build. Gradle.

Gradle is a build system (open source) which is used to automate building, testing, deployment, etc. ... For example, the simple task to copy some files from one directory to another can be performed by a Gradle build script before the actual build process happens.


P
Peter Mortensen

https://www.slideshare.net/AshifShaikh3/graddle

Gradle is helping us to manage the ecosystem of Android, like libraries, code versions, version name, and application id. To find an application, Gradle is adding dependencies 1. remote base, 2. Local base.

https://i.stack.imgur.com/DVIyc.png


"Graddle"?? No!!!! It even has red squiggles under it.
This is still close to incomprehensible. Can you fix it? You can edit (change) your answer.
yes i will,i am try to learn and put in file thank u your feedback sir @PeterMortensen