build.gradle

O papel do arquivo build.gradle

I. Introdução ao sistema de build Gradle

O Android Studio usa o Gradle para compilar projetos. O Gradle é uma ferramenta de build muito avançada que usa uma linguagem específica de domínio (DSL) baseada em Groovy para declarar as configurações do projeto, em vez do tradicional XML.

Um projeto HelloWorld possui dois arquivos build.gradle: um externo (nível do projeto) e um interno (nível do módulo).


II. build.gradle externo (nível do projeto)

Caminho: Diretório raiz do projeto/build.gradle

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'

        // NOTA: Não coloque as dependências da sua aplicação aqui; elas devem
        // estar nos arquivos build.gradle de cada módulo
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}Code language: JavaScript (javascript)
Análise das configurações principais
Item de configuraçãoDescrição
jcenter()Declara o uso do repositório de hospedagem de código JCenter. Muitos projetos Android de código aberto estão hospedados no JCenter; ao declará-lo, você pode referenciar essas bibliotecas diretamente.
google()Declara o uso do repositório Maven do Google para obter bibliotecas oficiais como Android Support Library e Constraint Layout.
classpath 'com.android.tools.build:gradle:3.1.2'Declara o plugin Android para o Gradle. O Gradle pode compilar projetos Java, C++, etc., mas para projetos Android é necessário este plugin.
allprojectsConfigura de forma unificada os endereços dos repositórios para todos os módulos (incluindo submódulos).
task cleanDefine uma tarefa de limpeza que, ao ser executada, exclui todo o diretório build do projeto.

O arquivo build.gradle externo raramente precisa ser modificado, a menos que você precise adicionar repositórios globais ou atualizar a versão do plugin do Gradle.


III. build.gradle interno (nível do módulo / diretório app)

Caminho: app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.foxdevelop.www.myapplication"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:27.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}Code language: PHP (php)

Cada seção é detalhada abaixo.


IV. apply plugin — Declaração do plugin

apply plugin: 'com.android.application'Code language: JavaScript (javascript)
ValorSignificado
com.android.applicationMódulo de aplicativo, pode ser executado diretamente.
com.android.libraryMódulo de biblioteca, não pode ser executado de forma independente e é destinado a ser chamado por outros módulos.

Esta é a configuração chave que distingue se um módulo é um “App” ou uma “Library”.


V. Bloco android — Configuração principal de build

1. Versão de compilação e ferramentas de build
compileSdkVersion 27
buildToolsVersion "27.0.3"Code language: CSS (css)
ConfiguraçãoDescrição
compileSdkVersionEspecifica qual versão do Android SDK será usada para compilar o projeto. 27 corresponde ao Android 8.1.
buildToolsVersionNúmero da versão das ferramentas de build; o Android Studio avisará quando houver uma versão mais recente.
2. defaultConfig — Configuração padrão
defaultConfig {
    applicationId "com.foxdevelop.www.myapplication"
    minSdkVersion 14
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Code language: JavaScript (javascript)
PropriedadeDescrição
applicationIdO nome de pacote único do aplicativo, usado como identificador único (por exemplo, para o Google Play).
minSdkVersionVersão mínima do Android compatível; 14 corresponde ao Android 4.0.
targetSdkVersionIndica que o aplicativo foi totalmente testado nesta versão. O sistema habilitará os novos recursos de acordo (ex: modo multi-janela no 7.0).
versionCodeNúmero da versão, um inteiro usado pelas lojas de aplicativos para determinar atualizações.
versionNameNome da versão, uma string visível para o usuário.
testInstrumentationRunnerEspecifica o executor para testes automatizados do Android.
3. buildTypes — Tipos de build
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}Code language: JavaScript (javascript)
ConfiguraçãoDescrição
debugConfiguração da versão de teste (pode ser omitida, possui valores padrão).
releaseConfiguração da versão de lançamento.
minifyEnabledIndica se a ofuscação de código deve ser ativada. false = sem ofuscação, true = ofuscar.
proguardFilesEspecifica os arquivos de regras de ofuscação:
• Primeiro: regras gerais do diretório do SDK.
• Segundo: proguard-rules.pro, onde você pode escrever regras específicas do projeto.

O Android Studio executa por padrão o pacote debug (teste); mais adiante explicaremos como gerar um pacote de lançamento oficial.


VI. dependencies — Gerenciamento de dependências

Esta é a parte mais frequentemente modificada, usada para declarar todas as bibliotecas das quais o projeto depende.

Três tipos de dependências
TipoDescriçãoExemplo
Dependência localDepende de arquivos jar ou diretórios locaiscompile fileTree(dir: 'libs', include: ['*.jar'])
Dependência de bibliotecaDepende de um módulo de biblioteca no projetocompile project(':library')
Dependência remotaDepende de bibliotecas de código aberto nos repositórios JCenter / Googlecompile 'com.android.support:appcompat-v7:27.+'
Análise linha por linha
// Dependência local: adiciona todos os arquivos .jar do diretório libs ao caminho de build
compile fileTree(dir: 'libs', include: ['*.jar'])Code language: PHP (php)
// Dependência remota: biblioteca de compatibilidade AppCompat
// Formato: domínio:grupo:versão
compile 'com.android.support:appcompat-v7:27.+'Code language: JavaScript (javascript)
// Dependência remota: biblioteca de layout ConstraintLayout
compile 'com.android.support.constraint:constraint-layout:1.0.2'Code language: JavaScript (javascript)
// Dependência de teste: JUnit para testes unitários
testCompile 'junit:junit:4.12'Code language: JavaScript (javascript)
// Dependência de teste Android: Espresso para testes de UI
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})Code language: JavaScript (javascript)

Fluxo de trabalho de dependências remotas: O Gradle primeiro verifica se a biblioteca está em cache localmente → se sim, usa diretamente → se não, faz o download automaticamente → após o download, adiciona ao caminho de build.


VII. Resumo comparativo

ArquivoFunçãoFrequência de modificação
Externo build.gradleConfiguração global de repositórios, versão do plugin GradleRaramente modificado
Interno app/build.gradleConfiguração de build do módulo, gerenciamento de dependênciasFrequentemente modificado
Configuração principalAtributos chave
——————
apply pluginDistinguir application / library
compileSdkVersionVersão do SDK de compilação
applicationIdIdentificador único do aplicativo
minSdkVersionVersão mínima compatível
targetSdkVersionVersão alvo de teste
buildTypesConfiguração de build debug / release
dependenciesDependências locais / remotas / de biblioteca

build.gradle

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *