Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between build.gradle (Project) and build.gradle (Module)

I am trying to add a dependency of Android Asynchronous Http Client into my project. So there are two build.gradle files in the project.

Enter image description here

As per my understanding, there are different kind of dependencies:

  1. One which defined on the root level of build.gradle (Project:My-app)
  2. One inside the buildscript of the build.gradle (Project:My-app)
  3. Another is build.gradle (Modules:app)

This question is about repositories for dependencies of the buildScript, explain a bit about first two types.

Also build.gradle (Project:My-app) says

// NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files 

So I guess the dependency code of Android Asynchronous Http Client should be added in build.gradle (Module:app).

How does it all fit together?

like image 522
Anil Bhaskar Avatar asked Feb 03 '15 09:02

Anil Bhaskar


People also ask

What is build Gradle module?

The Gradle build system in Android Studio makes it easy to include external binaries or other library modules to your build as dependencies. The dependencies can be located on your machine or in a remote repository, and any transitive dependencies they declare are automatically included as well.

What is root level build Gradle file?

gradle file, located in the root project directory, defines build configurations that apply to all modules in your project. By default, the top-level build file uses the buildscript {} block to define the Gradle repositories and dependencies that are common to all modules in the project.

Where is module level build Gradle?

Module-level build. gradle: Located in the project/module directory of the project this Gradle script is where all the dependencies are defined and where the SDK versions are declared.

Where is build Gradle module app?

In Android, you can see the gradle file you're looking for. In the Project view, it is the file inside the app folder that you want to use.


2 Answers

It's a bit confusing because Android Studio by default shows both build.gradle files right next to each other (when using the Android view).

enter image description here

If you switch to the Project view you can see the actual structure and where the different build.gradle files are located.

enter image description here

The build.gradle (Project: MyApplication) file is in the root folder of the project and its configuration settings apply to every module in the project. A module is an isolated piece of the bigger project. In a multi-module project, these modules have their own jobs but work together to form the whole project. Most Android projects only have one module, the app module.

The build.gradle (Module: app) file here is in the app folder. Its build settings apply only to the app module. If there were another module, then that module would have its own build.gradle file, too. As an example, I made a library project with three modules: a library module, a demo app module, and another app module that I plan to use for testing. Each of them have their own build.gradle files that I can tweak.

enter image description here

In a basic project, almost everything you need to edit will be in the app module's build.gradle file. You can remember it like this:

You're making an app, so go to the build.gradle (Module: app) file.

Further reading

  • Configure Your Build (Android documentation--very readable and useful)
  • Introduction to multi-project builds (Gradle documentation)
like image 151
Suragch Avatar answered Nov 16 '22 00:11

Suragch


build.gradle (Project:My-app)

Top-level build file where you can add configuration options common to all sub-projects/modules.

Each project contains a top-level Gradle file. It usually contains common configurations for all modules. Whatever is included in this top-level Gradle gile, it will affect all modules.

Example:

// Top-level build file where you can add configuration options common to all sub-projects/modules.  buildscript {     repositories {         jcenter()     }     dependencies {         classpath 'com.android.tools.build:gradle:2.0.0-alpha3'          //Maven plugin         classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'          // NOTE: Do not place your application dependencies here; they belong         // in the individual module build.gradle files     } }  allprojects {     repositories {         jcenter()         maven { url "https://jitpack.io" }     } }  task clean(type: Delete) {     delete rootProject.buildDir } 

build.gradle (Module:app)

Build file of your specific module (where you add your dependencies, signing configurations, build types, flavors, etc.)

All modules have a specific Gradle file. Whatever is included in this gradle file, it will only affect the module that is included on.

Example:

apply plugin: 'com.android.application'  android {     compileSdkVersion 23     buildToolsVersion "23.0.2"      defaultConfig {         applicationId "com.hrskrs.gesturefun"         minSdkVersion 10         targetSdkVersion 23         versionCode 1         versionName "1.0"     }     buildTypes {         release {             zipAlignEnabled true             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }         debug {             debuggable true             zipAlignEnabled true             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     } }  dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     compile project(':gesture-fun')     testCompile 'junit:junit:4.12'     compile 'com.android.support:appcompat-v7:23.1.1'     compile 'com.android.support:design:23.1.1'     compile 'com.jakewharton:butterknife:7.0.1' } 
like image 43
hrskrs Avatar answered Nov 16 '22 00:11

hrskrs