Cấu trúc dự án Android
1. Tổng quan
Phần tiêu đề “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
Phần tiêu đề “2. 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
Phần tiêu đề “3. 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)
Phần tiêu đề “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/
Phần tiêu đề “5. Thư mục res/”drawable/
Phần tiêu đề “drawable/”drawable/├── ic_launcher_background.xml├── ic_launcher_foreground.xml└── custom_image.pngvalues/
Phần tiêu đề “values/”<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/
Phần tiêu đề “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ị
Phần tiêu đề “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
Phần tiêu đề “7. Gradle Files”settings.gradle.kts
Phần tiêu đề “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
Phần tiêu đề “gradle.properties”org.gradle.jvmargs=-Xmx2048mandroid.useAndroidX=truekotlin.code.style=officialandroid.nonTransitiveRClass=true📝 Tóm tắt
Phần tiêu đề “📝 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 |