Careeroza
Android Project Structure and Activity
Project Layout
A new Android Studio project ("Empty Activity" template) uses Kotlin, Jetpack Compose and Gradle Kotlin DSL with a version catalog.
MyShop/
├─ settings.gradle.kts modules list + repositories
├─ build.gradle.kts root: plugin versions
├─ gradle/libs.versions.toml version catalog (all library versions in one place)
└─ app/
├─ build.gradle.kts app module: sdk versions, dependencies
└─ src/
├─ main/
│ ├─ AndroidManifest.xml app name, permissions, activities
│ ├─ java/com/example/myshop/
│ │ ├─ MainActivity.kt
│ │ ├─ ui/ screens, composables, theme
│ │ ├─ data/ Room, Retrofit, repositories
│ │ └─ domain/ models, use cases
│ └─ res/ strings, icons, themes (XML)
├─ test/ local unit tests (JVM)
└─ androidTest/ instrumented tests (device)app/build.gradle.kts
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose) // Compose compiler (Kotlin 2.0+)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.ksp) // annotation processing for Room
}
android {
namespace = "com.example.myshop"
compileSdk = 35
defaultConfig {
applicationId = "com.example.myshop"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
}
buildFeatures { compose = true }
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions { jvmTarget = "17" }
}
dependencies {
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.material3)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)
implementation(libs.retrofit)
implementation(libs.retrofit.kotlinx.serialization)
implementation(libs.okhttp.logging)
}MainActivity
An Activity is one entry point with a window. With Compose, most apps have a single MainActivity and switch screens with Navigation.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
MyShopTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
ShopNavHost(modifier = Modifier.padding(innerPadding))
}
}
}
}
}| Lifecycle callback | Called when |
|---|---|
onCreate | activity is created (also after rotation): set content here |
onStart / onStop | becomes visible / no longer visible |
onResume / onPause | gets / loses focus |
onDestroy | finishing or being recreated (rotation, language change) |
Note: On rotation the Activity is destroyed and recreated. Keep screen data in a ViewModel, which survives configuration changes.