Estrutura do build do Android

Os projetos Android contêm muitos arquivos relacionados a build e estruturas de diretório para organizar a origem e os recursos do aplicativo. Antes de mergulhar nos de configuração do Terraform, veremos a estrutura geral e as noções básicas do que pertence a cada parte.

Esta tabela lista arquivos típicos em um projeto Android. As descrições de cada ou diretório incluem observações sobre o tipo de conteúdo que está nele. Melhor as práticas evoluem ao longo do tempo, e essas descrições podem não corresponder a um projeto que você herdou ou baixou da Internet.

Ao escrever seus arquivos de compilação, use uma abordagem declarativa. a lógica de build e as tarefas definições só devem aparecer em plug-ins. Ao limitar a lógica de build a plug-ins, arquivos de build se tornam declarações de dados, que têm uma compreensão mais direta e edição. Versões futuras podem incluir uma especificação alternativa como Gradle declarativo, que impede a lógica de build na .

Pasta/Arquivo

Uso

.gradle/ (link em inglês)

Diretório de cache do projeto do Gradle

Gerenciada pelo Gradle e contém a distribuição do Gradle, o cache do projeto e os arquivos de configuração transferidos por download.

Não altere os arquivos neste diretório.

.idea

Metadados do projeto do Android Studio

Não altere os arquivos neste diretório.

build.gradle(.kts)

Arquivo de build raiz

Precisa conter apenas declarações de plug-in para configurar um caminho de classe de plug-in comum em subprojetos.

O outro código precisa residir nas configurações ou nos arquivos de build aninhados no projeto.

gradle.properties

Configuração de execução do Gradle

Contém propriedades do Gradle, controlando os aspectos do ambiente de build do Gradle, como tamanho de heap, armazenamento em cache e execução paralela.

Algumas propriedades temporárias do Android são definidas aqui para reduzir as mudanças na DSL do AGP à medida que são adicionadas e removidas.

gradlew (Linux, Mac)

gradlew.bat (Windows)

Arquivo wrapper do Gradle

Inicializa seu build fazendo o download de uma distribuição do Gradle e encaminhando comandos para ela. Isso permite executar builds sem precisar pré-instalar o Gradle.

local.properties

Configuração da máquina local

Contém propriedades relacionadas à máquina local, como o local do SDK do Android.

Exclua este arquivo do controle de origem.

settings.gradle(.kts)

Inicialização de build do Gradle

Contém informações globais do build para inicialização do Gradle e configuração do projeto, como:

  • nome do projeto
  • lista de subprojetos para incluir nesse build
  • especificações do repositório para localizar plug-ins e dependências
  • importações externas do catálogo de versões.

Gradle/

↳ libs.versions.toml

Catálogo de versões

Define variáveis para dependências e plug-ins usados dentro do build. Você especifica quais versões quer usar aqui, garantindo a consistência em todos os subprojetos em seu projeto.

↳ wrapper/

↳ gradle‐wrapper.jar

Executável de bootstrap do Gradle (links em inglês).

Faz o download da distribuição especificada do Gradle (se ela não existir) e a executa, transmitindo os argumentos.

↳ gradle‐wrapper.properties

Configuração do wrapper do Gradle

Especifica onde fazer o download da distribuição do Gradle (incluindo qual versão usar).

aplicativo/

Diretório do subprojeto

Subprojetos (conhecidos como "módulos" no Android Studio) podem criar aplicativos ou bibliotecas e podem depender de outros subprojetos ou dependências externas.

app é o nome convencional de um subprojeto de aplicativo de nível superior, mas não é o nome obrigatório. Outros subprojetos têm estruturas semelhantes, com nomes diferentes.

Qualquer diretório pode ser um subprojeto e precisa conter pelo menos um arquivo build.gradle(.kts), que será incluído no build usando settings.gradle(.kts).

↳ build.gradle(.kts)

Arquivo de build do subprojeto

Declara como criar o subprojeto. Cada subprojeto requer um arquivo de build separado e precisa conter

  • plug-ins usados para criar este subprojeto
  • blocos de configuração exigidos pelos plug-ins
  • dependências (bibliotecas e plataformas) incluídas na criação deste subprojeto

Não inclua lógica de build (como condições ou definições de função Kotlin) ou declarações de tarefas nos arquivos de build. A lógica de build e as tarefas só podem ficar dentro de plug-ins.

↳ src/

Arquivos de origem do subprojeto

Agrupa arquivos de origem (código e recursos do aplicativo) em conjuntos de origem. O conjunto de origem main contém arquivos de origem comuns a todas as variantes, enquanto outros conjuntos contêm arquivos de origem exclusivos de uma variante.

↳ main/

Conjunto de origem principal

Código-fonte e recursos comuns em todas as variantes de build. Essa origem atua como base para todos os builds, e outros conjuntos mais específicos são adicionados ou substituídos.

↳ java/

↳ kotlin/

Código-fonte em Kotlin e Java

O diretório java pode conter código-fonte Java e Kotlin misto. Se esse subprojeto tiver apenas código Kotlin, você pode renomear o diretório como kotlin.

Android
como uma plataforma que prioriza o Kotlin. A origem Java é compatível, mas as novas APIs segmentam a linguagem Kotlin. Recomendamos usar o Kotlin para todos os novos códigos e atualizações importantes de códigos já existentes.

↳ res/

Arquivos de recursos do Android

Contém recursos de aplicativos, como arquivos XML e imagens. Todos os aplicativos usam alguns recursos básicos, como ícones na tela de início, mas muitos desses recursos, como layouts e menus, são usados apenas em aplicativos baseados em visualização. Os aplicativos do Compose usam recursos String definidos nesse diretório.

↳ AndroidManifest.xml

Metadados do aplicativo Android

Ler pelo gerenciador de pacotes do Android para informar ao sistema

  • componentes definidos pelo aplicativo
  • as permissões necessárias
  • compatibilidade do dispositivo
  • Restrições da plataforma Android

↳ androidTest/

Conjunto de origem do teste de dispositivo

Contém a fonte para testes que serão executados em um dispositivo ou emulador com Android. Esses testes têm acesso a um ambiente real do Android, mas são executados mais lentamente do que os testes do host.

Todos os arquivos de origem no conjunto main estão disponíveis para uso por origem em androidTest.

↳ teste/

Conjunto de origem de teste do host

Contém a fonte para testes executados localmente em uma JVM, em oposição aos testes executados em um dispositivo. Esses testes são muito mais rápidos de executar do que os testes de dispositivo. No entanto, todas as chamadas do sistema (incluindo os ciclos de vida que executam o aplicativo) precisam ser simuladas, fictícias, fragmentadas ou simuladas.

Todos os arquivos de origem no conjunto main estão disponíveis para uso por origem em teste.

↳ proguard-rules.pro

Regras de configuração do R8

Define regras para controlar a redução, a otimização e a ofuscação de aplicativos. O R8 remove códigos e recursos desnecessários, otimiza o desempenho do ambiente de execução e minimiza ainda mais o código renomeando identificadores.