Android คือระบบปฏิบัติการเคลื่อนที่ของ Google แบบโอเพนซอร์ส (AOSP) ที่ทำงานบนเคอร์เนล Linux การพัฒนา Android ทำด้วยภาษา Kotlin ในสภาพแวดล้อม Android Studio บทความนี้ครอบคลุมสถาปัตยกรรมของระบบปฏิบัติการ องค์ประกอบของแอปพลิเคชัน Jetpack Compose และการเผยแพร่บน Google Play
ประเด็นสำคัญ
Android คือระบบปฏิบัติการเคลื่อนที่บนพื้นฐานเคอร์เนล Linux พัฒนาโดย Google ตั้งแต่ปี 2007 ซอร์สโค้ดเปิดเผยภายใต้ใบอนุญาต Apache 2.0 ซึ่งเป็นส่วนหนึ่งของโครงการ Android Open Source Project (AOSP) ผู้ผลิตแต่ละรายสามารถปรับเปลี่ยนระบบและติดตั้งบนอุปกรณ์ของตนได้
จากข้อมูลของ StatCounter (2026) Android ครองส่วนแบ่งประมาณ 72% ของตลาดระบบปฏิบัติการเคลื่อนที่ทั่วโลก ผู้ผลิตรายใหญ่ที่สุดคือ Samsung, Xiaomi, Oppo, Vivo, Google Pixel การแยกส่วนเป็นปัญหาสำคัญของแพลตฟอร์ม: มีอุปกรณ์หลายพันรุ่นที่มีระบบปฏิบัติการเวอร์ชันต่างกันถูกใช้งานพร้อมกัน
สถาปัตยกรรม Android สร้างขึ้นบนหลักการของสิทธิ์ (permissions): แต่ละแอปพลิเคชันทำงานภายใต้ UID Linux ที่แยกต่างหากและเข้าถึงได้เฉพาะข้อมูลของตัวเองเท่านั้น การเข้าถึงทรัพยากรระบบ (กล้อง ไมโครโฟน รายชื่อติดต่อ) จะขอผ่าน Android Permissions ในขณะรันไทม์ เริ่มตั้งแต่ Android 6 (API 23)
Android 1.0 เปิดตัวในปี 2008 บน HTC Dream เหตุการณ์สำคัญ: Android 4.0 Ice Cream Sandwich (UI แบบรวมสำหรับโทรศัพท์และแท็บเล็ต), Android 5.0 Lollipop (Material Design), Android 6.0 (สิทธิ์รันไทม์), Android 10 (ธีมมืด ท่าทาง), Android 12 (Material You) ตั้งแต่ปี 2023 Google เปลี่ยนมาเผยแพร่เวอร์ชันหลักประจำปีโดยไม่มีชื่อของหวาน
| เวอร์ชัน Android | ปี | นวัตกรรมหลัก |
|---|---|---|
| Android 1.0 | 2008 | เปิดตัวครั้งแรกบน HTC Dream |
| Android 4.0 (ICS) | 2011 | การออกแบบรวมสำหรับโทรศัพท์และแท็บเล็ต |
| Android 5.0 (L) | 2014 | Material Design, ART แทนที่ Dalvik |
| Android 6.0 (M) | 2015 | สิทธิ์รันไทม์, โหมด Doze |
| Android 8.0 (O) | 2017 | Kotlin เป็นภาษาทางการ |
| Android 10 (Q) | 2019 | Scoped Storage, ธีมมืด |
| Android 12 (S) | 2021 | Material You, Privacy Dashboard |
| Android 15 | 2024 | Private Space, การเชื่อมต่อดาวเทียม |
สถาปัตยกรรม Android ประกอบด้วยสี่ชั้นหลักที่แยกฮาร์ดแวร์ออกจากแอปพลิเคชันผู้ใช้ แต่ละชั้นใช้บริการของชั้นล่างผ่านอินเทอร์เฟซที่กำหนดไว้อย่างเข้มงวด
ชั้นล่างสุดคือเคอร์เนล Linux ที่ถูกปรับเปลี่ยน (LTS, เวอร์ชัน 6.x ใน Android 15) จัดการหน่วยความจำ โพรเซส สแต็กเครือข่าย และไดรเวอร์ ชั้น Hardware Abstraction Layer (HAL) จัดเตรียม API แบบรวมสำหรับการโต้ตอบกับฮาร์ดแวร์: กล้อง Bluetooth Wi-Fi เซนเซอร์ ผู้ผลิตใช้งานโมดูล HAL โดยไม่ส่งผลกระทบต่อชั้นบน
ART ดำเนินการ DEX bytecode ของแอปพลิเคชัน ตั้งแต่ Android 5.0 ART แทนที่ Dalvik และใช้การคอมไพล์ Ahead-of-Time (AOT) เพื่อเพิ่มประสิทธิภาพ แต่ละแอปพลิเคชันมีโพรเซสของตัวเองกับอินสแตนซ์ ART แยกต่างหาก การเก็บขยะ (GC) ทำงานโดยหยุดชั่วคราวน้อยที่สุด — การหยุด GC ทั่วไปคือ 2–4 ms
Framework คือชั้นที่นักพัฒนาทำงานโดยตรง ประกอบด้วย Activity Manager (สแต็กหน้าจอ), Content Providers (การเข้าถึงข้อมูล), Resource Manager (การแปลภาษา ทรัพยากร), Notification Manager, Location Manager บริการระบบทั้งหมดถูกเรียกผ่าน Binder IPC — กลไกการสื่อสารระหว่างโพรเซสของ Android
// ตัวอย่างการทำงานกับ Binder ผ่านอินเทอร์เฟซ AIDL
interface IDataService : android.os.IInterface {
fun getData(): List<DataItem>
fun saveData(item: DataItem): Boolean
}
// การใช้งานบริการ
class DataService : Service() {
private val binder = object : IDataService.Stub() {
override fun getData(): List<DataItem> = repository.getAll()
override fun saveData(item: DataItem): Boolean = repository.save(item)
}
override fun onBind(intent: Intent?): IBinder = binder
}ชั้นบนสุดประกอบด้วยแอปพลิเคชันระบบมาตรฐาน: โทรศัพท์ รายชื่อติดต่อ กล้อง การตั้งค่า เบราว์เซอร์ แอปเหล่านี้ไม่มีสิทธิพิเศษสูงกว่าแอปพลิเคชันผู้ใช้ แต่สามารถถูกแทนที่ด้วยแอปพลิเคชันของบริษัทอื่น ใน Android 15 แอปพลิเคชันระบบถูกอัปเดตผ่าน Google Play System Updates โดยแยกจากการอัปเดต OTA ของผู้ผลิต
Kotlin เป็นภาษาโปรแกรมแบบ static type จาก JetBrains ที่ทำงานบน JVM Google ประกาศให้ Kotlin เป็นภาษาทางการของ Android ในปี 2017 ที่ Google I/O Kotlin เข้ากันได้อย่างสมบูรณ์กับ Java แต่ขจัดข้อเสีย: ความปลอดภัย null, คลาสข้อมูล, ฟังก์ชันส่วนขยาย และ coroutine
คุณสมบัติหลักของ Kotlin คือการป้องกัน NullPointerException ในตัว ประเภทแบ่งเป็น nullable (String?) และ non-null (String) คอมไพเลอร์ตรวจสอบการเข้าถึง nullable ในขณะคอมไพล์ ตัวดำเนินการ safe call (?.) และ Elvis (?:) ทำให้การทำงานกับค่าเลือกได้ง่ายขึ้นโดยไม่ต้องตรวจสอบแบบซ้อน
// ตัวอย่างโค้ด Kotlin ด้วย coroutine และ Flow
data class User(
val id: Long,
val name: String,
val email: String
)
class UserRepository(
private val api: UserApi,
private val dao: UserDao
) {
suspend fun getUser(id: Long): Result<User> {
return try {
val cached = dao.getUser(id)
if (cached != null) {
return Result.success(cached)
}
val remote = api.fetchUser(id)
dao.insertUser(remote)
Result.success(remote)
} catch (e: Exception) {
Result.failure(e)
}
}
fun observeUsers(): Flow<List<User>> {
return dao.observeAll()
.map { list -> list.sortedBy { it.name } }
.flowOn(Dispatchers.Default)
}
}ตัวอย่างแสดง coroutine (ฟังก์ชัน suspend) สำหรับการเข้าถึงเครือข่ายและฐานข้อมูลแบบอะซิงโครนัส Flow สำหรับการสังเกตการเปลี่ยนแปลงข้อมูลแบบรีแอกทีฟ และ Result สำหรับการจัดการข้อผิดพลาดอย่างปลอดภัย Coroutine แทนที่ callback และ RxJava โดยไม่มีค่าใช้จ่ายของเธรด
Coroutine ของ Kotlin คือเธรดน้ำหนักเบาที่ทำงานบนพูลเธรดที่ใช้ร่วมกัน Dispatchers.IO สำหรับเครือข่ายและดิสก์ Dispatchers.Main สำหรับ UI Dispatchers.Default สำหรับงานที่ใช้ CPU สูง viewModelScope และ lifecycleScope ยกเลิก coroutine โดยอัตโนมัติเมื่อคอมโพเนนต์ถูกทำลาย
// ViewModel ด้วย coroutine และ StateFlow
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
private val _users = MutableStateFlow<List<User>>(emptyList())
val users: StateFlow<List<User>> = _users.asStateFlow()
private val _loading = MutableStateFlow(false)
val loading: StateFlow<Boolean> = _loading.asStateFlow()
init {
viewModelScope.launch {
repository.observeUsers().collect { userList ->
_users.value = userList
}
}
}
fun refresh() {
viewModelScope.launch {
_loading.value = true
repository.getUser(42).onSuccess { user ->
_users.value = listOf(user)
}
_loading.value = false
}
}
}Android Studio คือ IDE ทางการที่ใช้ IntelliJ IDEA พัฒนาโดย Google ประกอบด้วยตัวแก้ไขโค้ด Layout Inspector ตัวจำลองอุปกรณ์ APK Analyzer Profiler (CPU หน่วยความจำ เครือข่าย พลังงาน) และการรวม Firebase Android Studio 2024 (Ladybug) รองรับ Kotlin 2.0 ด้วยโหมดข้ามแพลตฟอร์ม KMP
ตัวจำลอง Android ใช้ KVM (Linux) หรือ Hyper-V (Windows) สำหรับการเร่งด้วยฮาร์ดแวร์ รองรับการจำลอง GPS เซนเซอร์ กล้อง การโทร และ SMS Google Pixel 9 Pro เป็นการกำหนดค่าที่แนะนำสำหรับการทดสอบกับ API 35 และ RAM จำลอง 8 GB
Profiler แสดงโหลด CPU การจัดสรรหน่วยความจำ คำขอเครือข่าย และการใช้พลังงานแบบเรียลไทม์ Memory Profiler ช่วยให้สามารถดัมพ์ heap และวิเคราะห์การรั่วไหลผ่านแผนภูมิอ้างอิง Network Inspector บันทึกคำขอ HTTP/HTTPS ทั้งหมดพร้อมเนื้อหาและส่วนหัว สำหรับการวิเคราะห์เชิงลึกจะใช้ Android Studio Canary
แอปพลิเคชัน Android ประกอบด้วยองค์ประกอบสี่ประเภท แต่ละประเภทมีจุดเข้าและวงจรชีวิตของตัวเอง องค์ประกอบจะถูกลงทะเบียนในไฟล์ AndroidManifest.xml
| องค์ประกอบ | วัตถุประสงค์ | จุดเข้า |
|---|---|---|
| Activity | หน้าจอที่มี UI สำหรับโต้ตอบกับผู้ใช้ | Intent ที่มี Action.MAIN และหมวดหมู่ LAUNCHER |
| Service | การทำงานเบื้องหลังโดยไม่มี UI | startService() หรือ bindService() |
| BroadcastReceiver | รับเหตุการณ์ระบบหรือเหตุการณ์ที่กำหนดเอง | ลงทะเบียนใน manifest หรือในโค้ด |
| ContentProvider | จัดการการเข้าถึงข้อมูลที่มีโครงสร้าง | URI ผ่าน ContentResolver |
Activity คือองค์ประกอบพื้นฐานของอินเทอร์เฟซผู้ใช้ แต่ละหน้าจอคือ Activity แยกต่างหากหรือ Fragment ภายใน Activity การนำทางระหว่างหน้าจอดำเนินการผ่าน Intent — อ็อบเจ็กต์ที่มีการกระทำ (ACTION_VIEW, ACTION_SEND) และข้อมูล (URI) ใน Jetpack Navigation Graph การนำทางอธิบายด้วย XML
Service ดำเนินงานเบื้องหลัง แต่ตั้งแต่ Android 8 บริการเบื้องหลังถูกจำกัด WorkManager เป็นไลบรารีที่แนะนำสำหรับงานเบื้องหลังที่เลื่อนออกไปและรับประกัน พร้อมรองรับห่วงโซ่ ข้อจำกัด (เช่น เฉพาะขณะชาร์จ) และการเริ่มใหม่หลังขัดข้อง
การเลือกระหว่าง Jetpack Compose และเค้าโครง XML แบบดั้งเดิมคือการตัดสินใจทางสถาปัตยกรรมหลักเมื่อเริ่มโครงการ Android XML Layouts (RecyclerView, ConstraintLayout, FrameLayout) เป็นมาตรฐานตั้งแต่ปี 2008 Jetpack Compose ถูกนำเสนอในปี 2021 เป็นทางเลือกแบบประกาศ
| เกณฑ์ | XML Layouts | Jetpack Compose |
|---|---|---|
| กระบวนทัศน์ | แบบคำสั่ง (แผนภูมิ View) | แบบประกาศ (ฟังก์ชัน @Composable) |
| เวอร์ชันต่ำสุด | ใดก็ได้ (API 1+) | API 21+ (Android 5.0) |
| เค้าโครง | XML + data binding / ViewBinding | โค้ด Kotlin ด้วย Modifier |
| สิ่งที่คล้าย RecyclerView | RecyclerView + Adapter + ViewHolder | LazyColumn / LazyGrid |
| ตัวอย่าง | ตัวอย่าง XML ใน Android Studio | คำอธิบาย @Preview แบบโต้ตอบ |
| การประกอบใหม่ | notifyDataSetChanged (ทั้งหมด) | อัตโนมัติ ละเอียด (DiffUtil) |
| การทำงานร่วมกัน | สมบูรณ์ (ทุกไลบรารี) | ComposeView ใน XML / AndroidView ใน Compose |
Google แนะนำ Jetpack Compose สำหรับทุกโครงการใหม่ XML Layouts ยังคงเกี่ยวข้องสำหรับการสนับสนุนโครงการเดิมและกรณีที่ต้องการการปรับแต่ง View สูงสุด (Canvas, SurfaceView) โค้ด Compose สั้นกว่า XML + ViewBinding ที่เทียบเท่าโดยเฉลี่ย 40%
// Jetpack Compose — หน้าจอโปรไฟล์ผู้ใช้
@Composable
fun ProfileScreen(
user: User,
onEditClick: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
AsyncImage(
model = user.avatarUrl,
contentDescription = "อวตารของผู้ใช้",
modifier = Modifier
.size(120.dp)
.clip(CircleShape)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = user.name,
style = MaterialTheme.typography.headlineMedium
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.height(24.dp))
Button(onClick = onEditClick) {
Icon(Icons.Default.Edit, contentDescription = null)
Spacer(modifier = Modifier.width(8.dp))
Text("แก้ไขโปรไฟล์")
}
}
}
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
MaterialTheme {
ProfileScreen(
user = User(1, "อันนา เปโตรวา", "anna@example.com"),
onEditClick = {}
)
}
}ฟังก์ชัน ProfileScreen ถูกประกาศเป็น @Composable — มันอธิบาย UI แบบประกาศโดยไม่สร้างอินสแตนซ์ View Compose อัปเดตหน้าจอโดยอัตโนมัติเมื่อ user เปลี่ยนแปลง @Preview แสดงผลลัพธ์โดยตรงใน IDE โดยไม่ต้องสร้างและรันบนตัวจำลอง
แต่ละ Activity ใน Android ผ่านหกสถานะของวงจรชีวิต: onCreate, onStart, onResume, onPause, onStop, onDestroy Fragment เพิ่ม onAttach, onCreateView, onViewCreated การเข้าใจวงจรชีวิตเป็นสิ่งสำคัญสำหรับการจัดการหน่วยความจำและการป้องกันการรั่วไหล
onCreate — เรียกหนึ่งครั้งเมื่อสร้าง Activity ที่นี่ดำเนินการเริ่มต้น: setContentView, การตั้งค่าอะแดปเตอร์, การสมัครรับ LiveData onResume — Activity อยู่เบื้องหน้าและโต้ตอบกับผู้ใช้ onPause — Activity สูญเสียโฟกัส (ไดอะล็อก, Activity อื่น) onStop — Activity ไม่ปรากฏให้เห็น onDestroy — Activity ถูกทำลาย
// Activity ที่มีการจัดการวงจรชีวิตผ่าน LifecycleScope
class MainActivity : ComponentActivity() {
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.users.collect { users ->
updateUi(users)
}
}
}
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("last_search", searchQuery)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
searchQuery = savedInstanceState.getString("last_search", "")
}
}การใช้ repeatOnLifecycle รับประกันว่าการรวบรวมข้อมูลจะหยุดชั่วคราวเมื่อ Activity ไปเบื้องหลังและดำเนินต่อเมื่อกลับมาเบื้องหน้า สิ่งนี้ป้องกันการรั่วไหลและคำขอเครือข่ายที่ไม่จำเป็น onSaveInstanceState บันทึกสถานะชั่วคราวเมื่อหมุนหน้าจอ
Google Play คือร้านค้าแอปพลิเคชัน Android อย่างเป็นทางการ การลงทะเบียนบัญชีนักพัฒนามีค่าใช้จ่าย $25 ครั้งเดียว แต่ละแอปพลิเคชันผ่านการตรวจสอบ Google Play Integrity อัตโนมัติสำหรับโค้ดที่เป็นอันตราย การละเมิดนโยบาย และการใช้สิทธิ์ที่ไม่ถูกต้อง
Google ต้องการการเซ็นชื่อแอปพลิเคชันผ่าน Android App Bundle (AAB) หรือ APK AAB เป็นรูปแบบที่แนะนำ ช่วยให้สร้าง APK ที่ปรับให้เหมาะสมสำหรับแต่ละการกำหนดค่าอุปกรณ์ แอปพลิเคชันต้องเซ็นชื่อด้วยคีย์ (keystore) ที่มีใบรับรองที่ถูกต้อง Google Play App Signing คือการเข้ารหัสคีย์ทางเลือกของฝั่ง Google
แอปพลิเคชันทั้งหมดที่ขอเข้าถึงข้อมูลส่วนบุคคลต้องจัดเตรียม นโยบายความเป็นส่วนตัว ตั้งแต่ปี 2024 Google ต้องการการประกาศ Data Safety — แบบฟอร์มระบุประเภทของข้อมูลที่รวบรวมและวัตถุประสงค์ในการประมวลผล แอปพลิเคชันที่กำหนดเป้าหมาย Android 14+ ต้องใช้ Declarations API เพื่อประกาศสิทธิ์
| ข้อกำหนด | คำอธิบาย |
|---|---|
| Android App Bundle | รูปแบบ AAB สำหรับการจัดส่งที่ปรับให้เหมาะสม |
| Data Safety | แบบฟอร์มเกี่ยวกับการรวบรวมและประมวลผลข้อมูลส่วนบุคคล |
| Target SDK | แอปพลิเคชันต้องกำหนดเป้าหมายระดับ API ล่าสุดของ Android |
| การจัดอันดับเนื้อหา | แบบสอบถามการจัดอันดับอายุ |
| รายการในร้านค้า | ชื่อ ไอคอน ภาพหน้าจอ คำอธิบาย |
คำถามที่พบบ่อย
Kotlin — ภาษาที่ Google แนะนำอย่างเป็นทางการสำหรับ Android Java ยังรองรับสำหรับโครงการเดิม Kotlin มีความปลอดภัย null, coroutine และฟังก์ชันส่วนขยาย ลดปริมาณโค้ด 30–40% เมื่อเทียบกับ Java
Jetpack Compose แนะนำสำหรับทุกโครงการใหม่ด้วยไวยากรณ์แบบประกาศและการปรับการประกอบใหม่อัตโนมัติ XML Layouts ยังคงใช้ในโครงการเดิมและกรณีที่ต้องการการปรับแต่ง Canvas หรือ SurfaceView อย่างละเอียด
การลงทะเบียนนักพัฒนา Google Play มีค่าใช้จ่าย $25 ครั้งเดียว ค่าคอมมิชชันร้านค้าคือ 15% สำหรับรายได้ $1 ล้านแรก จากนั้น 30% สำหรับการสมัครสมาชิก ค่าคอมมิชชันคือ 15% ตั้งแต่วันแรก ไม่มีค่าธรรมเนียมรายปีแตกต่างจาก Apple Developer Program
Android Jetpack คือชุดไลบรารีของ Google ใน SDK ทางการ: Navigation, Room (ORM SQLite พร้อมการตรวจสอบคำค้นหาในขณะคอมไพล์), WorkManager (งานเบื้องหลังที่รับประกัน), ViewModel (การจัดการสถานะ), LiveData และ StateFlow สำหรับการตอบสนอง
เวอร์ชันที่รองรับขั้นต่ำคือ API 24 (Android 7.0) สำหรับโครงการใหม่ AndroidManifest.xml อธิบายองค์ประกอบและสิทธิ์ของแอปพลิเคชัน APK/AAB เซ็นชื่อด้วย keystore Target SDK ต้องตรงกับระดับ API ล่าสุดในขณะที่เผยแพร่
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ