Cấu trúc dự án Android
1. Tổng quan
MyApp/
├── app/ # Module chính
│ ├── src/
│ │ ├── main/ # Code và resources chính
│ │ ├── test/ # Unit tests
│ │ └── androidTest/ # Instrumented tests
│ └── build.gradle.kts # Build config của module
├── gradle/ # Gradle wrapper
├── build.gradle.kts # Build config của project
├── settings.gradle.kts # Project settings
└── gradle.properties # Gradle properties2. Thư mục app/src/main
main/
├── java/com/example/myapp/ # Kotlin/Java code
│ ├── MainActivity.kt
│ ├── ui/
│ │ ├── screens/
│ │ ├── components/
│ │ └── theme/
│ ├── data/
│ │ ├── repository/
│ │ └── model/
│ └── ...
├── res/ # Resources
│ ├── drawable/ # Images, icons
│ ├── layout/ # XML layouts (legacy)
│ ├── values/ # Strings, colors, themes
│ ├── mipmap/ # App icons
│ └── ...
└── AndroidManifest.xml # App manifest3. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<!-- Main Activity -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>4. build.gradle.kts (Module: app)
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
android {
namespace = "com.example.myapp"
compileSdk = 34
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.material3)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
}5. Thư mục res/
drawable/
drawable/
├── ic_launcher_background.xml
├── ic_launcher_foreground.xml
└── custom_image.pngvalues/
<!-- strings.xml -->
<resources>
<string name="app_name">My App</string>
<string name="hello">Xin chào</string>
</resources>
<!-- colors.xml -->
<resources>
<color name="purple_500">#FF6200EE</color>
<color name="teal_200">#FF03DAC5</color>
</resources>mipmap/
App icons ở các density khác nhau:
- mipmap-mdpi/ (1x)
- mipmap-hdpi/ (1.5x)
- mipmap-xhdpi/ (2x)
- mipmap-xxhdpi/ (3x)
- mipmap-xxxhdpi/ (4x)
6. Cấu trúc code khuyến nghị
com.example.myapp/
├── MainActivity.kt
├── MyApplication.kt # Application class
├── ui/
│ ├── screens/ # Màn hình
│ │ ├── home/
│ │ │ ├── HomeScreen.kt
│ │ │ └── HomeViewModel.kt
│ │ └── detail/
│ ├── components/ # UI components tái sử dụng
│ │ ├── AppBar.kt
│ │ └── LoadingIndicator.kt
│ ├── navigation/ # Navigation setup
│ │ └── NavGraph.kt
│ └── theme/ # Theme, colors, typography
│ ├── Theme.kt
│ ├── Color.kt
│ └── Type.kt
├── data/
│ ├── model/ # Data models
│ │ └── User.kt
│ ├── repository/ # Data repositories
│ │ └── UserRepository.kt
│ ├── local/ # Local database
│ │ └── UserDao.kt
│ └── remote/ # API services
│ └── ApiService.kt
├── di/ # Dependency Injection
│ └── AppModule.kt
└── util/ # Utility classes
└── Extensions.kt7. Gradle Files
settings.gradle.kts
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "MyApp"
include(":app")gradle.properties
org.gradle.jvmargs=-Xmx2048m
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true📝 Tóm tắt
| Thư mục/File | Mục đích |
|---|---|
app/src/main/java/ | Kotlin/Java source code |
app/src/main/res/ | Resources (images, strings, etc.) |
AndroidManifest.xml | App configuration |
build.gradle.kts | Dependencies và build settings |
gradle/ | Gradle wrapper files |
Last updated on