Buscar..


Observaciones

El sistema de compilación de Android compila los recursos de la aplicación y el código fuente, y los empaqueta en archivos APK que puede probar, implementar, firmar y distribuir. Android Studio utiliza Gradle, un kit de herramientas de compilación avanzada, para automatizar y administrar el proceso de compilación, mientras que le permite definir configuraciones de compilación personalizadas y flexibles.

Documentacion oficial

https://developer.android.com/studio/build/index.html

¿Por qué hay dos archivos build.gradle en un proyecto de Android Studio?

<PROJECT_ROOT>\app\build.gradle es específico para el módulo de la aplicación.

<PROJECT_ROOT>\build.gradle es un "archivo de compilación de nivel superior" donde puede agregar opciones de configuración comunes a todos los subproyectos / módulos.

Si usa otro módulo en su proyecto, como biblioteca local tendrá otro archivo build.gradle: <PROJECT_ROOT>\module\build.gradle

El archivo de compilación de nivel superior

El archivo build.gradle de nivel superior, ubicado en el directorio del proyecto raíz, define configuraciones de compilación que se aplican a todos los módulos de su proyecto. De forma predeterminada, el archivo de compilación de nivel superior utiliza el buildscript {} block para definir los repositorios y dependencias de Gradle que son comunes a todos los módulos del proyecto. El siguiente ejemplo de código describe la configuración predeterminada y los elementos DSL que puede encontrar en el nivel superior de build.gradle después de crear un nuevo proyecto.

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
       classpath 'com.android.tools.build:gradle:2.2.0'
       classpath 'com.google.gms:google-services:3.0.0'
    }
}

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

El archivo de compilación de nivel de módulo

El archivo build.gradle a nivel de módulo, ubicado en cada directorio <project>/<module>/ , le permite configurar las configuraciones de compilación para el módulo específico en el que se encuentra. La configuración de estas configuraciones de compilación le permite proporcionar opciones de empaquetado personalizadas, tales como como tipos de compilación y tipos de productos adicionales, y anular la configuración en el archivo main/ app manifiesto o en el archivo de nivel superior build.gradle .

apply plugin: 'com.android.application'


android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}

dependencies {
    //.....
}

Ejemplo de archivo de nivel superior

/**
 * The buildscript {} block is where you configure the repositories and
 * dependencies for Gradle itself--meaning, you should not include dependencies
 * for your modules here. For example, this block includes the Android plugin for
 * Gradle as a dependency because it provides the additional instructions Gradle
 * needs to build Android app modules.
 */

buildscript {

    /**
     * The repositories {} block configures the repositories Gradle uses to
     * search or download the dependencies. Gradle pre-configures support for remote
     * repositories such as JCenter, Maven Central, and Ivy. You can also use local
     * repositories or define your own remote repositories. The code below defines
     * JCenter as the repository Gradle should use to look for its dependencies.
     */

    repositories {
        jcenter()
    }

    /**
     * The dependencies {} block configures the dependencies Gradle needs to use
     * to build your project. The following line adds Android Plugin for Gradle
     * version 2.0.0 as a classpath dependency.
     */

    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }
}

/**
 * The allprojects {} block is where you configure the repositories and
 * dependencies used by all modules in your project, such as third-party plugins
 * or libraries. Dependencies that are not required by all the modules in the
 * project should be configured in module-level build.gradle files. For new
 * projects, Android Studio configures JCenter as the default repository, but it
 * does not configure any dependencies.
 */

allprojects {
   repositories {
       jcenter()
   }
}

El ejemplo de archivo de módulo

/**
 * The first line in the build configuration applies the Android plugin for
 * Gradle to this build and makes the android {} block available to specify
 * Android-specific build options.
 */

apply plugin: 'com.android.application'

/**
 * The android {} block is where you configure all your Android-specific
 * build options.
 */

android {

  /**
   * compileSdkVersion specifies the Android API level Gradle should use to
   * compile your app. This means your app can use the API features included in
   * this API level and lower.
   *
   * buildToolsVersion specifies the version of the SDK build tools, command-line
   * utilities, and compiler that Gradle should use to build your app. You need to
   * download the build tools using the SDK Manager.
   */

  compileSdkVersion 23
  buildToolsVersion "23.0.3"

  /**
   * The defaultConfig {} block encapsulates default settings and entries for all
   * build variants, and can override some attributes in main/AndroidManifest.xml
   * dynamically from the build system. You can configure product flavors to override
   * these values for different versions of your app.
   */

  defaultConfig {

    /**
     * applicationId uniquely identifies the package for publishing.
     * However, your source code should still reference the package name
     * defined by the package attribute in the main/AndroidManifest.xml file.
     */

    applicationId 'com.example.myapp'

    // Defines the minimum API level required to run the app.
    minSdkVersion 14

    // Specifies the API level used to test the app.
    targetSdkVersion 23

    // Defines the version number of your app.
    versionCode 1

    // Defines a user-friendly version name for your app.
    versionName "1.0"
  }

  /**
   * The buildTypes {} block is where you can configure multiple build types.
   * By default, the build system defines two build types: debug and release. The
   * debug build type is not explicitly shown in the default build configuration,
   * but it includes debugging tools and is signed with the debug key. The release
   * build type applies Proguard settings and is not signed by default.
   */

  buildTypes {

    /**
     * By default, Android Studio configures the release build type to enable code
     * shrinking, using minifyEnabled, and specifies the Proguard settings file.
     */

    release {
        minifyEnabled true // Enables code shrinking for the release build type.
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  /**
   * The productFlavors {} block is where you can configure multiple product
   * flavors. This allows you to create different versions of your app that can
   * override defaultConfig {} with their own settings. Product flavors are
   * optional, and the build system does not create them by default. This example
   * creates a free and paid product flavor. Each product flavor then specifies
   * its own application ID, so that they can exist on the Google Play Store, or
   * an Android device, simultaneously.
   */

  productFlavors {
    free {
      applicationId 'com.example.myapp.free'
    }

    paid {
      applicationId 'com.example.myapp.paid'
    }
  }
}

/**
 * The dependencies {} block in the module-level build configuration file
 * only specifies dependencies required to build the module itself.
 */

dependencies {
    compile project(":lib")
    compile 'com.android.support:appcompat-v7:24.1.0'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

Usa archivesBaseName para cambiar el nombre de apk

Puedes usar el archivesBaseName para establecer el nombre de apk.

Por ejemplo:

  defaultConfig {
      ....
      project.ext.set("archivesBaseName", "MyName-" + defaultConfig.versionName);

  }

Obtendrás esta salida.

MyName-X.X.X-release.apk


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow