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ção | Descriçã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. |
allprojects | Configura de forma unificada os endereços dos repositórios para todos os módulos (incluindo submódulos). |
task clean | Define uma tarefa de limpeza que, ao ser executada, exclui todo o diretório build do projeto. |
O arquivo
build.gradleexterno 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)
| Valor | Significado |
|---|---|
com.android.application | Módulo de aplicativo, pode ser executado diretamente. |
com.android.library | Mó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ção | Descrição |
|---|---|
compileSdkVersion | Especifica qual versão do Android SDK será usada para compilar o projeto. 27 corresponde ao Android 8.1. |
buildToolsVersion | Nú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)
| Propriedade | Descrição |
|---|---|
applicationId | O nome de pacote único do aplicativo, usado como identificador único (por exemplo, para o Google Play). |
minSdkVersion | Versão mínima do Android compatível; 14 corresponde ao Android 4.0. |
targetSdkVersion | Indica que o aplicativo foi totalmente testado nesta versão. O sistema habilitará os novos recursos de acordo (ex: modo multi-janela no 7.0). |
versionCode | Número da versão, um inteiro usado pelas lojas de aplicativos para determinar atualizações. |
versionName | Nome da versão, uma string visível para o usuário. |
testInstrumentationRunner | Especifica 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ção | Descrição |
|---|---|
debug | Configuração da versão de teste (pode ser omitida, possui valores padrão). |
release | Configuração da versão de lançamento. |
minifyEnabled | Indica se a ofuscação de código deve ser ativada. false = sem ofuscação, true = ofuscar. |
proguardFiles | Especifica 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
| Tipo | Descrição | Exemplo |
|---|---|---|
| Dependência local | Depende de arquivos jar ou diretórios locais | compile fileTree(dir: 'libs', include: ['*.jar']) |
| Dependência de biblioteca | Depende de um módulo de biblioteca no projeto | compile project(':library') |
| Dependência remota | Depende de bibliotecas de código aberto nos repositórios JCenter / Google | compile '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
| Arquivo | Função | Frequência de modificação |
|---|---|---|
Externo build.gradle | Configuração global de repositórios, versão do plugin Gradle | Raramente modificado |
Interno app/build.gradle | Configuração de build do módulo, gerenciamento de dependências | Frequentemente modificado |
| Configuração principal | Atributos chave | |
| ——— | ——— | |
apply plugin | Distinguir application / library | |
compileSdkVersion | Versão do SDK de compilação | |
applicationId | Identificador único do aplicativo | |
minSdkVersion | Versão mínima compatível | |
targetSdkVersion | Versão alvo de teste | |
buildTypes | Configuração de build debug / release | |
dependencies | Dependências locais / remotas / de biblioteca |
build.gradle