Разница между build.gradle (проект) и build.gradle (модуль)

97

Я пытаюсь добавить в свой проект зависимость от Android Asynchronous Http Client. Итак, в проекте есть два файла build.gradle.

введите описание изображения здесь

Насколько я понимаю, существуют разные зависимости:

  1. Тот, который определен на корневом уровне build.gradle (Project: My-app)
  2. Один внутри скрипта сборки build.gradle (Project: My-app)
  3. Другой - build.gradle (Модули: приложение)

Этот вопрос касается репозиториев для зависимостей 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).

Было бы здорово, если бы кто-то мог дать четкое представление обо всем этом для лучшего понимания.

Анил Бхаскар
источник
3
если внешняя библиотека, да, вы должны добавить build.gradle(Modules:app)или перейти туда, File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesгде вы увидите зеленый крестик, нажав на него, выберите Module Dependencyи добавьте библиотеку
yout
Добавление в build.gradle (Module: app) дает мне сообщение об ошибке: Failed to find: com.loopj.android:android-async-http:1.4.5 почему он не может загружаться напрямую, я также установил прокси. Я загрузил файл jar и попробовал вручную, но так как File Repositoryэто правильный путь.
Анил Бхаскар
для простоты использования 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') }
hrskrs
Это хорошее чтение developer.android.com/studio/build/index.html
onmyway133

Ответы:

48

build.gradle(Project:My-app)

Файл сборки верхнего уровня, в который вы можете добавить параметры конфигурации, общие для всех подпроектов / модулей.

Каждый проект содержит файлtop-level gradle file . Обычно он содержит common configsдля всех modules. Что бы в это ни входило top-level gradle, это повлияет на всех modules.

пример:

// 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что включено.

пример:

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'
}
hrskrs
источник
43

Это немного сбивает с толку, потому что Android Studio по умолчанию показывает оба build.gradleфайла рядом друг с другом (при использовании представления Android).

введите описание изображения здесь

Если вы переключитесь в представление проекта, вы сможете увидеть фактическую структуру и расположение различных build.gradleфайлов.

введите описание изображения здесь

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

build.gradle(Module: приложение) файл здесь находится в appпапке. Его настройки сборки применяются только к модулю приложения. Если бы был другой модуль, то у этого модуля тоже был бы свой build.gradleфайл. В качестве примера я создал проект библиотеки с тремя модулями: модулем библиотеки, модулем демонстрационного приложения и другим модулем приложения, который я планирую использовать для тестирования. У каждого из них есть свои build.gradleфайлы, которые я могу настроить.

введите описание изображения здесь

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

Вы создаете приложение , поэтому перейдите в файл build.gradle(Module: app ).

дальнейшее чтение

Suragch
источник
1

В отношении взаимосвязи двух gradleфайлов hrskrs дал очень четкое объяснение , Я сделаю некоторые дополнения об этом.

если в вашем проекте есть только один модуль (например, приложение ), преимущество top 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) .

Такой дизайн может улучшить ремонтопригодность приложения.

shusheng007
источник