Diferencia entre build.gradle (Proyecto) y build.gradle (Módulo)

98

Estoy tratando de agregar una dependencia de Android Asynchronous Http Client en mi proyecto. Así que hay dos archivos build.gradle en el proyecto.

ingrese la descripción de la imagen aquí

Según tengo entendido, existen diferentes tipos de dependencias:

  1. Uno que se definió en el nivel raíz de build.gradle (Proyecto: Mi-aplicación)
  2. Uno dentro del script de compilación de build.gradle (Proyecto: My-app)
  3. Otro es build.gradle (Módulos: aplicación)

Esta pregunta trata sobre los repositorios para las dependencias del buildScript, explique un poco sobre los dos primeros tipos.

También build.gradle (Proyecto: Mi-aplicación) dice

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

Así que supongo que el código de dependencia de Android Asynchronous Http Client debería agregarse en build.gradle (Módulo: aplicación).

Si alguien pudiera dar una imagen clara de todos estos para una mejor comprensión, sería genial.

Anil Bhaskar
fuente
3
si es una biblioteca externa, sí, debe agregar build.gradle(Modules:app)o ir a File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependenciesdonde verá un letrero de cruz verde, tocando esa opción Module Dependencyy agregue su biblioteca automáticamente
hrskrs
Agregando a build.gradle (Módulo: aplicación), dándome un error de Failed to find: com.loopj.android:android-async-http:1.4.5 por qué no se puede descargar directamente, también configuré el proxy. Descargué el archivo jar y lo intenté manualmente, pero como File Repository... es la forma correcta.
Anil Bhaskar
para simplificar su uso, Project Structurevaya a Modulesy elija su proyecto. Allí verá un green cross sign. Al hacer clic en eso se abrirá la New Moduleventana. Allí elige importar su biblioteca. Si tiene un .jararchivo, elija a continuación import .JAR or .AAR package. De lo contrario, copie su jar a la libscarpeta y Module:appagregue estas dependencias:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs
Esta es una buena lectura developer.android.com/studio/build/index.html
onmyway133

Respuestas:

49

build.gradle(Project:My-app)

Archivo de compilación de nivel superior donde puede agregar opciones de configuración comunes a todos los subproyectos / módulos.

Cada proyecto contiene untop-level gradle file . Generalmente contiene common configspara todos modules. Todo lo que esté incluido en esto top-level gradle, afectará a todosmodules .

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)

Archivo de compilación de su módulo específico (donde agrega sus dependencias, configuraciones de firma, tipos de compilación, sabores, etc.)

Todos modulestienen un gradlearchivo específico . Todo lo que esté incluido en este gradlearchivo, solo afectará almodule que está incluido.

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'
}
hrskrs
fuente
43

Es un poco confuso porque Android Studio de forma predeterminada muestra ambos build.gradlearchivos uno al lado del otro (cuando se usa la vista de Android).

ingrese la descripción de la imagen aquí

Si cambia a la vista Proyecto, puede ver la estructura real y dónde se encuentran los diferentes build.gradlearchivos.

ingrese la descripción de la imagen aquí

los build.gradle archivo (Proyecto: MyApplication) está en la carpeta raíz del proyecto y sus ajustes de configuración se aplican a todos los módulos del proyecto. Un módulo es una pieza aislada del proyecto más grande. En un proyecto de varios módulos, estos módulos tienen sus propios trabajos pero trabajan juntos para formar el proyecto completo. La mayoría de los proyectos de Android solo tienen un módulo, el módulo de la aplicación.

El build.gradlearchivo (Módulo: aplicación) aquí está en la appcarpeta. Su configuración de compilación se aplica solo al módulo de la aplicación. Si hubiera otro módulo, ese módulo también tendría su propio build.gradlearchivo. Como ejemplo , hice un proyecto de biblioteca con tres módulos: un módulo de biblioteca, un módulo de aplicación de demostración y otro módulo de aplicación que planeo usar para probar. Cada uno tiene sus propios build.gradlearchivos que puedo modificar.

ingrese la descripción de la imagen aquí

En un proyecto básico, casi todo lo que necesita editar estará en el build.gradlearchivo del módulo de la aplicación . Puedes recordarlo así:

Estás creando una aplicación , así que ve al archivo build.gradle(Módulo: aplicación ).

Otras lecturas

Suragch
fuente
1

Sobre la relación de los dos gradlearchivos, hrskrs hizo una explicación muy clara, haré algún suplemento al respecto.

Si su proyecto solo tiene un Módulo (como una aplicación ), la ventaja de top build.gradle (Proyecto: My-app) no se muestra muy clara. porque puede configurar todo en build.gradle (Módulo: aplicación) sobre el Módulo, y solo modificar un archivo cuando actualice en los días siguientes。

pero si su proyecto tiene 5 módulos, y sucedió que tienen la misma dependencia A , si no usa el build.gradle superior (Proyecto: Mi-aplicación) , necesita mantener 5 archivos en los días siguientes.

por cierto, build.gradle (Módulo: aplicación) puede sobrescribir el build.gradle (Proyecto: My-app) .

Este diseño puede mejorar la mantenibilidad de la APLICACIÓN

shusheng007
fuente