រចនាសម្ព័ន្ធ Project
រចនាសម្ព័ន្ធ Android Project
Android Project មានរចនាសម្ព័ន្ធ files និង folders ជាក់លាក់មួយ។ ការយល់ដឹងរចនាសម្ព័ន្ធនេះ និង Gradle build system គឺជា foundation សម្រាប់ Android development!
🎯 Project Structure Philosophy
Concept | Why It Matters |
---|---|
Separation of Concerns | Code (java/) separate from Resources (res/) |
Module-based | App module can have library modules |
Build Variants | Debug, Release, Custom flavors |
Resource Qualifiers | Support multiple screens, languages, orientations |
📁 Project Structure
MyAndroidApp/ ├── app/ │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/example/myapp/ │ │ │ │ └── MainActivity.java │ │ │ ├── res/ │ │ │ │ ├── layout/ │ │ │ │ │ └── activity_main.xml │ │ │ │ ├── drawable/ │ │ │ │ ├── mipmap/ │ │ │ │ ├── values/ │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── themes.xml │ │ │ │ └── xml/ │ │ │ └── AndroidManifest.xml │ │ ├── androidTest/ │ │ └── test/ │ ├── build.gradle (Module) │ └── proguard-rules.pro ├── gradle/ ├── build.gradle (Project) ├── settings.gradle └── gradle.properties
📂 ពន្យល់ Folders សំខាន់ៗ
1️⃣ app/src/main/java/
ផ្ទុក Java source code files។ នេះជាកន្លែងសរសេរ logic របស់ application។
File | មុខងារ |
---|---|
MainActivity.java |
Entry point របស់ app (screen ដំបូង) |
OtherActivity.java |
Activities ផ្សេងទៀត (screens បន្ថែម) |
CustomAdapter.java |
Adapters សម្រាប់ lists |
2️⃣ app/src/main/res/
ផ្ទុក resources ទាំងអស់៖ layouts, images, strings, colors, etc.
Folder | មុខងារ | ឧទាហរណ៍ |
---|---|---|
layout/ | XML layouts សម្រាប់ UI | activity_main.xml |
drawable/ | រូបភាព, icons, shapes | ic_launcher.png |
mipmap/ | App icons (different densities) | ic_launcher.png |
values/ | Strings, Colors, Styles, Dimensions | strings.xml |
menu/ | Menu definitions | menu_main.xml |
3️⃣ AndroidManifest.xml
File សំខាន់បំផុតមួយ! ផ្ទុកព័ត៌មានទាំងអស់អំពី application៖
- 📱 App name និង icon
- 🔐 Permissions (camera, internet, location, etc.)
- 📄 Activities, Services, Receivers ទាំងអស់
- 🎯 Main/Launcher activity
- 📊 Minimum SDK version
4️⃣ build.gradle Files
មាន 2 files:
- build.gradle (Project): Settings សម្រាប់ទាំង project
- build.gradle (Module: app): Settings សម្រាប់ app module
- Compile SDK version
- Target SDK version
- Dependencies (libraries)
- Build types (debug, release)
🔨 Gradle Build System Deep Dive
Gradle គឺជា build automation tool ដែល Android Studio ប្រើ:
Feature | Description |
---|---|
🔧 Build Automation | Compile code, package APK, run tests automatically |
📦 Dependency Management | Download & manage libraries from Maven/Google repos |
🎨 Build Variants | Debug/Release builds with different configurations |
🔀 Product Flavors | Free/Paid versions from same codebase |
📊 build.gradle (Project) vs (Module)
Aspect | Project Level | Module Level (app) |
---|---|---|
Scope | Entire project (all modules) | App module only |
Contains | Build script dependencies, repos | SDK versions, dependencies, build types |
Modified | Rarely (plugin versions) | Frequently (add libraries, change versions) |
🎯 Resource Qualifiers (Multi-Device Support)
Resource qualifiers អនុញ្ញាតឱ្យ app support devices ផ្សេងៗគ្នា:
Qualifier | Example | Purpose |
---|---|---|
Screen Density | drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi | Different image sizes for different screens |
Orientation | layout-land, layout-port | Landscape vs Portrait layouts |
Language | values-en, values-km, values-ja | Multi-language support (i18n) |
Screen Size | layout-small, layout-normal, layout-large | Tablet vs Phone layouts |
Night Mode | values-night | Dark theme support |
🔍 R.java - The Resource Bridge
R.java គឺជា auto-generated file ដែល Android build system បង្កើត:
Build Process: 1. Resources (XML) ──► AAPT Tool ──► R.java file 2. R.java contains IDs for all resources 3. Code references: R.layout.activity_main 4. Compiled into APK Example R.java: public final class R { public static final class layout { public static final int activity_main = 0x7f030001; public static final int item_list = 0x7f030002; } public static final class string { public static final int app_name = 0x7f0a0001; } }
⚠️ Important: កុំ modify R.java manually! វា auto-generated និង rebuild រាល់ពេលមាន resource changes។
🗜️ ProGuard & R8 (Code Shrinking)
Tool | Function | Benefit |
---|---|---|
ProGuard (Legacy) | Shrink, obfuscate, optimize code | Smaller APK, harder to reverse-engineer |
R8 (Modern) | Same as ProGuard but faster | ✅ Default in Android Studio (recommended) |
🔄 Build Process Flow
┌───────────────────┐ │ Source Code │ ──► Java/Kotlin files │ (.java/.kt) │ └─────────┬─────────┘ ↓ ┌─────────▼─────────┐ │ Resources │ ──► XML, images, strings │ (res/*) │ └─────────┬─────────┘ ↓ ┌─────────▼─────────┐ │ Gradle Build │ ──► Compile, package └─────────┬─────────┘ ↓ ┌─────────▼─────────┐ │ R.java generated │ ──► Resource IDs └─────────┬─────────┘ ↓ ┌─────────▼─────────┐ │ DEX files │ ──► Dalvik bytecode └─────────┬─────────┘ ↓ ┌─────────▼─────────┐ │ APK Package │ ──► Final installable file └───────────────────┘
🎨 Resource Files
strings.xml
ផ្ទុក text strings ទាំងអស់ (good practice សម្រាប់ internationalization):
colors.xml
កំណត់ពណ៌ទាំងអស់នៅកន្លែងតែមួយ:
🔍 View Mode នៅ Android Studio
Android Studio មាន view modes ផ្សេងៗគ្នា:
- Android: បង្ហាញតែ files សំខាន់ៗ (recommended)
- Project: បង្ហាញ files ទាំងអស់ពិតប្រាកដ
- Packages: group files តាម package
💡 Tip: ប្រើ Android view mode សម្រាប់ការងារប្រចាំថ្ងៃ វាងាយស្រួលជាង!
📦 Dependencies
បន្ថែម libraries ក្នុង build.gradle (Module: app)
:
dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' }
✅ Best Practices
- ដាក់ strings ទាំងអស់នៅក្នុង
strings.xml
- ដាក់ពណ៌ទាំងអស់នៅក្នុង
colors.xml
- ប្រើ meaningful names សម្រាប់ files និង resources
- រក្សា code organized តាម packages
- Comment code សម្រាប់ការយល់ដឹងកាន់តែប្រសើរ