© Khmer Angkor Academy - sophearithput168

រចនាសម្ព័ន្ធ 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
Java Code
Click "Run" to execute the Java code

4️⃣ build.gradle Files

មាន 2 files:

  1. build.gradle (Project): Settings សម្រាប់ទាំង project
  2. 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
└───────────────────┘
Java Code
Click "Run" to execute the Java code

🎨 Resource Files

strings.xml

ផ្ទុក text strings ទាំងអស់ (good practice សម្រាប់ internationalization):

Java Code
Click "Run" to execute the Java code

colors.xml

កំណត់ពណ៌ទាំងអស់នៅកន្លែងតែមួយ:

Java Code
Click "Run" to execute the Java code

🔍 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

  1. ដាក់ strings ទាំងអស់នៅក្នុង strings.xml
  2. ដាក់ពណ៌ទាំងអស់នៅក្នុង colors.xml
  3. ប្រើ meaningful names សម្រាប់ files និង resources
  4. រក្សា code organized តាម packages
  5. Comment code សម្រាប់ការយល់ដឹងកាន់តែប្រសើរ