Estrutura do Projeto e Visão Geral
Este projeto open source é desenvolvido em Kotlin e utiliza o Jetpack Compose para construção da interface, adotando o padrão arquitetural Model-View-Intent (MVI). Para gerenciamento assíncrono, são empergados Coroutines e Flow. A seguir, apresentamos a estrutura de diretórios principal:
├── app
│ ├── src
│ │ └── main
│ │ ├── kotlin
│ │ ├── com.example.demo
│ │ │ ├── viewmodel
│ │ │ ├── model
│ │ │ ├── interactor
│ │ │ └── repository
│ │ ├── res
│ ├── build.gradle.kts
│ └── AndroidManifest.xml
├── README.md
├── .gitignore
└── build.gradle.kts
- O diretório app contém todo o código-fonte e recursos da aplicação.
- Dentro de kotlin, os componentes estão organizados por camadas como ViewModels, modelos de dados, lógicas de negócio e repositórios.
- A pasta res armazena os recursos gráficos e layouts utilizados na interface.
Ponto de Entrada da Aplicação
O ponto inicial da execução se dá no arquivo MainActivity.kt, localizado em app/src/main/kotlin/com/example/demo/ui/MainActivity.kt. Este arquivo inicializa o ambiente do Jetpack Compose e conecta o ciclo de vida da UI ao ViewModel seguindo o padrão MVI.
package com.example.demo.ui
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.lifecycle.ViewModelProvider
import com.example.demo.viewmodel.AppStateViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private lateinit var stateHandler: AppStateViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupDependencies()
stateHandler = ViewModelProvider(this)[AppStateViewModel::class.java]
setContent {
AppContent(viewModel = stateHandler)
}
}
private fun setupDependencies() {
// Inicialização de dependências via DI framework
}
}
A função AppContent representa a raiz da hierarquia de composição declarativa e é responsável por refeltir mudanças de estado vindas do ViewModel.
Arquivo de Configuração do Módulo
No arquivo app/build.gradle.kts, encontram-se as configurações essenciais para compilação do módulo, incluindo plugins, versões do SDK, opções do compilador Kotlin e dependências externas.
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
}
android {
compileSdk = 33
defaultConfig {
applicationId = "com.example.demo"
minSdk = 24
targetSdk = 33
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.0"
}
}
dependencies {
val composeBom = platform("androidx.compose:compose-bom:2023.06.01")
implementation(composeBom)
implementation("androidx.compose.material3:material3")
implementation("com.google.dagger:hilt-android:2.48")
kapt("com.google.dagger:hilt-compiler:2.48")
}
Essas definições garantem que o ambiante esteja preparado para trabalhar com Jetpack Compose, Dagger Hilt e outras bibliotecas fundamentais para a implementação da arquitetura proposta.