I could use a little help understanding the concepts behind Gradle(plugin v 0.7) in the context of Android Studio 0.4.0. I have not used Gradle before and it\'s causing me n
What are these dependencies?
There are so many cool libraries you might decide to use. And a lot of these libraries are supporting the integration with gradle now. So no more importing the project and hosting it yourself. Everything is hosted on mavencentral. You still need the support library for example, even if you decide to target API 11+.
What is a Gradle wrapper?
A gradle wrapper is an awesome tool, if you're working in a team, or especially on an open source project. You don't need to have gradle installed. The gradle wrapper will download and cache all its dependencies on the first run. So all the developers on your team can build the project really quickly.
Why does Gradle need to be online constantly?
Because the dependencies need to be synced. You're in luck, if you are using Android Studio though. The latest version supports a "gradle offline mode".
From the release notes:
Studio now supports Gradle Offline mode. This is useful if you find yourself without a network connection, and your dependencies are using the plus-syntax to pick up the latest available version. In that case, Gradle will once per day (by default) connect to the artifact repository to see if there is a more recent version. If that network connection fails, the build fails. If you don't have a network connection, this is problematic. You can now open the Compiler > Gradle options and enable Offline mode, which will tell Gradle to ignore update-to-date checks:
Why is it important that Gradle uses Groovy?
You write gradle plugins in Groovy. And all your gradle tasks in build.gradle as well.
Caution: I'm not an expert in gradle. In fact a relatively new user as well.
Let's assume, that understanding of the following points serves as aggreeable basis:
What are classes, interfaces, APIs, packages, modules and libraries.
What are module dependencies and what means "dependency management".
A complexity of modern applications. Even if you do a simple "Hello, world" app (would it be a desktop application or web-application), it should include a dozen (if not a hundred) of various libraries. All these libraries provide infrastructure to your app, but many of them are not directly related to it's logic.
If your app is not "Hello, world", then hiding it's complexity (by proper modularization) and automating it's assembly and testing (by use of proper build tools) becomes crucial to success.
With this understanding in mind (and taking into account precious considerations, listed by dear colleagues above) it makes sense to start talking gradle, ant, ivy and maven.
Some of your questions are general in that they speak to why build tools are a good thing as a general matter. Others get to Gradle specifically. I will try to address both categories as succinctly as possible while trying to avoid others' nitpicking terminology.
Build tools like Maven, Gradle, SBT, Leiningen, etc. help to automate tasks that we would otherwise have to manually perform or "manually automate." I use the latter to describe what I used to do with Ant--writing custom tasks to compile, run, generate Javadoc, etc. so the tasks could be automated for the future. By conforming to conventions originally defined by Maven and adopted by the others subsequently (like putting your source in src/main/java), this becomes possible. If I follow the conventions, the build tool can compile, run, generate Javadoc, test, and everything else with minimal extra work.
Now to your questions (in order):
Hope that helps.
I understand what everyone states as far as why the online portion of Gradle is necessary, but for those of us behind firewalls at work, or when we might be working offline, it really puts a burden on us to have to go online at least once to be able to compile in offline mode.
I just don't understand why this requirement is placed on the project. What if I'm starting an entirely new project in Android Studio that I want to test a concept with? I can't do it unless I'm online at least once. What if I don't have access to internet at that time and want to do this? What then?
Seems like an unnecessary requirement that burdens the developer with unnecessary issues that could be avoided. Again, I understand the reason behind it, but still, to force a requirement of at least compiling once online in order to use offline seems a little ridiculous.
I want to use Gradle, but at this point in time, it's something we can't even use at work due to the online requirement. I'll have to work with our security department to determine what holes to punch in our firewall in order to allow this through as well as setting up our proxy correctly to allow it.
So, at this time, I cannot recommend Gradle for use at my place of employment which means we also will continue using Eclipse for Android development as opposed to Android Studio. Seems like a limiting requirement that doesn't seem necessary.