Разлика между build.gradle(Project) и build.gradle(Module)

Опитвам се да добавя зависимост от Android Asynchronous Http Client в моя проект. Така че в проекта има два файла build.gradle.

въведете описание на изображението тук

Според моето разбиране има различни видове зависимости:

  1. Един, който е дефиниран на основното ниво на build.gradle(Project:My-app)
  2. Един в скрипта за изграждане на build.gradle(Project:My-app)
  3. Друг е build.gradle(Modules:app)

Този въпрос е относно хранилища за зависимости на buildScript, обяснете малко за първите два типа.

Също така build.gradle(Project:My-app) казва

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

Така че предполагам, че кодът за зависимост на Android Asynchronous Http Client трябва да се добави в build.gradle(Module:app).

Ако някой може да даде ясна картина на всичко това за по-добро разбиране, би било чудесно.


person Anil Bhaskar    schedule 03.02.2015    source източник
comment
ако външна библиотека, да, трябва да добавите в build.gradle(Modules:app) или отидете на File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependencies, където ще видите зелен кръст, като докоснете това, изберете Module Dependency и автоматично добавете вашата библиотека   -  person hrskrs    schedule 03.02.2015
comment
Добавяне към build.gradle(Module:app), което ми дава грешка, че Failed to find: com.loopj.android:android-async-http:1.4.5 защо не може да се изтегля директно, аз също съм задал проксито. Изтеглих jar файла и опитах ръчно, но като File Repository ..правилният начин ли е.   -  person Anil Bhaskar    schedule 03.02.2015
comment
за опростяване използвайте Project Structure отидете на Modules и изберете своя проект. Там ще видите green cross sign. Щракването върху това ще отвори прозорец New Module. Там избирате да импортирате вашата библиотека. Ако имате .jar файл, тогава по-долу изберете import .JAR or .AAR package. В противен случай копирайте вашия буркан в папка libs и на вашия Module:app добавете тези зависимости: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }   -  person hrskrs    schedule 03.02.2015
comment
Това е добро четиво developer.android.com/studio/build/index.html   -  person onmyway133    schedule 26.06.2017


Отговори (4)


build.gradle(Project:My-app)

Файл за компилация от най-високо ниво, където можете да добавите опции за конфигурация, общи за всички подпроекти/модули.

Всеки проект съдържа top-level gradle file. Обикновено съдържа common configs за всички modules. Каквото и да е включено в това top-level gradle, то ще засегне всички modules.

ex:

// 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)

Файл за компилация на вашия конкретен модул (където добавяте вашите зависимости, подписващи конфигурации, типове компилация, разновидности и т.н.)

Всички modules имат конкретен gradle файл. Каквото и да е включено в този gradle файл, то ще засегне само module, който е включен.

ex:

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'
}
person hrskrs    schedule 03.02.2015

Това е малко объркващо, защото Android Studio по подразбиране показва и двата build.gradle файла точно един до друг (когато използвате изгледа на Android).

въведете описание на изображението тук

Ако превключите към изгледа на проекта, можете да видите действителната структура и къде се намират различните build.gradle файлове.

въведете описание на изображението тук

Файлът build.gradle (Проект: MyApplication) е в главната папка на проекта и настройките му за конфигурация се прилагат за всеки модул в проекта. Модулът е изолирана част от по-големия проект. В многомодулен проект тези модули имат свои собствени задачи, но работят заедно, за да образуват целия проект. Повечето проекти за Android имат само един модул, модулът за приложения.

Файлът build.gradle (Модул: приложение) тук е в папката app. Настройките му за изграждане се отнасят само за модула на приложението. Ако имаше друг модул, тогава този модул също щеше да има свой собствен build.gradle файл. Като пример направих проект за библиотека с три модула: модул за библиотека, модул за демонстрационно приложение и друг модул за приложение, който смятам да използвам за тестване. Всеки от тях има свои собствени build.gradle файлове, които мога да променя.

въведете описание на изображението тук

В основен проект почти всичко, което трябва да редактирате, ще бъде във файла build.gradle на модула на приложението. Можете да го запомните така:

Правите приложение, така че отидете на файла build.gradle (Модул: приложение).

Допълнителна информация

person Suragch    schedule 30.08.2016
comment
Това отговаря много по-добре, тъй като обяснява какво са проекти и модули. - person t3chb0t; 18.10.2020

Относно връзката на двата gradle файла, hrskrs направи много ясно обяснение,Ще направя някои добавки за това.

ако вашият проект има само един модул (като приложение), предимството на топ build.gradle(Project:My-app) не се показва много ясно. защото можете да конфигурирате всичко в build.gradle(Module:app) относно модула и да модифицирате само един файл при надграждане през следващите дни。

но ако вашият проект има 5 модула и се случи те да имат една и съща зависимост A, ако не използвате горния build.gradle(Project:My-app) вие трябва да поддържате 5 файла през следващите дни.

между другото, build.gradle(Module:app) може да презапише build.gradle(Project:My-app).

Този дизайн може да подобри поддържаемостта на APP

person shusheng007    schedule 23.03.2018

[Проект срещу модул]

build.gradle на Projects се използва за обща/споделена логика. Например можете да дефинирате хранилища тук (maven, google, jcenter, custom) или да посочите ext {} със споделени променливи или classpath[About]

build.gradle на модула се използва за текущия модул като зависимости, minSdkVersion,targetSdkVersion,compileSdkVersion[Относно], Настройки на ProGuard[Информация]. Обикновено като разработчик трябва да се погрижите за този файл

person yoAlex5    schedule 31.05.2021