💻 Exemplos: Capítulo 01: Ecossistema Android, Kotlin 2.0 e Gradle KTS
Exemplos de Código: Capítulo 01 — Ecossistema Android e Configuração Moderna
Especialização em Mobile Nativo com Android • Demonstrações Práticas Compiláveis
💻 Código de Demonstração: Gradle KTS (Version Catalogs) e Activity Compose Moderna
O exemplo abaixo apresenta a infraestrutura canônica de um aplicativo Android nativo moderno:
- Configuração declarativa de build com Gradle Kotlin DSL (
build.gradle.kts) e Version Catalogs (libs.versions.toml). - Ponto de entrada no
AndroidManifest.xmlcom suporte a Edge-to-Edge. MainActivity.ktutilizandoComponentActivity,enableEdgeToEdge()esetContent {}com tema Material 3.
// =====================================================================
// 1. gradle/libs.versions.toml (Version Catalog Declarativo)
// =====================================================================
/*
[versions]
agp = "8.3.1"
kotlin = "2.0.0"
composeBom = "2024.05.00"
coreKtx = "1.13.1"
activityCompose = "1.9.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
*/
// =====================================================================
// 2. app/build.gradle.kts (Script de Build do Módulo)
// =====================================================================
/*
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.compiler)
}
android {
namespace = "br.com.portal.mobile.android"
compileSdk = 34
defaultConfig {
applicationId = "br.com.portal.mobile.android"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures {
compose = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.material3)
}
*/
// =====================================================================
// 3. app/src/main/java/br/com/portal/MainActivity.kt
// =====================================================================
package br.com.portal.mobile.android
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
/**
* Ponto de Entrada Principal (Main Entry Point) da Aplicação Android.
* Utiliza ComponentActivity como base do ecossistema Jetpack Compose.
*/
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Habilita desenho sob as barras do sistema (Status Bar e Navigation Bar)
enableEdgeToEdge()
setContent {
MaterialTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { paddingValores ->
Surface(
modifier = Modifier
.fillMaxSize()
.padding(paddingValores),
color = MaterialTheme.colorScheme.background
) {
BoasVindasApp(versaoKotlin = "2.0.0", compileSdk = 34)
}
}
}
}
}
}
@Composable
fun BoasVindasApp(versaoKotlin: String, compileSdk: Int, modifier: Modifier = Modifier) {
Box(
modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(
text = "Especialização Android Nativo\nKotlin $versaoKotlin • Target SDK $compileSdk\nJetpack Compose Moderno",
style = MaterialTheme.typography.headlineMedium,
color = MaterialTheme.colorScheme.primary
)
}
}
@Preview(showBackground = true)
@Composable
fun BoasVindasPreview() {
MaterialTheme {
BoasVindasApp(versaoKotlin = "2.0.0", compileSdk = 34)
}
}