Android یک سیستمعامل موبایل گوگل با کد منبع باز (AOSP) است که بر روی هسته لینوکس اجرا میشود. توسعه Android با استفاده از Kotlin در محیط Android Studio انجام میشود. این مقاله معماری سیستمعامل، اجزای برنامه، Jetpack Compose و انتشار در Google Play را پوشش میدهد.
نکات کلیدی
Android یک سیستمعامل موبایل مبتنی بر هسته لینوکس است که از سال ۲۰۰۷ توسط گوگل توسعه داده میشود. کد منبع تحت مجوز Apache 2.0 به عنوان بخشی از پروژه Android Open Source Project (AOSP) باز است. هر سازنده میتواند سیستم را تغییر داده و بر روی دستگاههای خود نصب کند.
بر اساس آمار StatCounter (2026)، Android حدود ۷۲٪ از بازار جهانی سیستمعاملهای موبایل را در اختیار دارد. بزرگترین سازندگان عبارتند از Samsung, Xiaomi, Oppo, Vivo, Google Pixel. تکهتکه شدن مشکل اصلی پلتفرم است: هزاران مدل با نسخههای مختلف سیستمعامل به طور همزمان استفاده میشوند.
معماری Android بر اساس اصل مجوزها (permissions) ساخته شده است: هر برنامه تحت یک UID لینوکس جداگانه اجرا میشود و فقط به دادههای خود دسترسی دارد. دسترسی به منابع سیستم (دوربین، میکروفون، مخاطبین) از طریق Android Permissions در زمان اجرا، از Android 6 (API 23) به بعد درخواست میشود.
Android 1.0 در سال ۲۰۰۸ بر روی HTC Dream منتشر شد. نقاط عطف کلیدی: Android 4.0 Ice Cream Sandwich (رابط یکپارچه برای تلفنها و تبلتها)، Android 5.0 Lollipop (Material Design)، Android 6.0 (مجوزهای زمان اجرا)، Android 10 (تم تیره، حرکات)، Android 12 (Material You). از سال ۲۰۲۳، گوگل به انتشار سالانه نسخههای اصلی بدون نام دسر تغییر رویه داده است.
| نسخه 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 | فضای خصوصی، اتصال ماهوارهای |
معماری Android از چهار لایه اصلی تشکیل شده است که سختافزار را از برنامههای کاربر جدا میکند. هر لایه از خدمات لایه پایینی از طریق رابطهای کاملاً تعریفشده استفاده میکند.
پایینترین لایه یک هسته لینوکس تغییر یافته است (LTS، نسخه 6.x در Android 15). مدیریت حافظه، فرآیندها، پشته شبکه و درایورها را بر عهده دارد. لایه انتزاع سختافزار (HAL) یک API یکپارچه برای تعامل با سختافزار فراهم میکند: دوربین، Bluetooth، Wi-Fi، سنسورها. سازندگان ماژولهای HAL را بدون تأثیر بر لایههای بالایی پیادهسازی میکنند.
ART بایت کد DEX برنامهها را اجرا میکند. از Android 5.0 به بعد، ART جایگزین Dalvik شد و از کامپایل Ahead-of-Time (AOT) برای بهبود عملکرد استفاده میکند. هر برنامه فرآیند خود را با یک نمونه ART جداگانه دارد. جمعآوری زباله (GC) با حداقل مکث کار میکند — یک مکث GC معمولی ۲–۴ میلیثانیه است.
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 یک زبان برنامهنویسی با نوعدهی ایستا از JetBrains است که بر روی JVM اجرا میشود. گوگل در سال ۲۰۱۷ در Google I/O اعلام کرد که Kotlin زبان رسمی Android است. Kotlin کاملاً با Java سازگار است اما نقاط ضعف آن را برطرف میکند: ایمنی null، کلاسهای داده، توابع گسترش و کوروتین.
ویژگی اصلی Kotlin محافظت داخلی در برابر NullPointerException است. انواع به nullable (String?) و non-null (String) تقسیم میشوند. کامپایلر دسترسی nullable را در زمان کامپایل بررسی میکند. عملگر safe call (?.) و عملگر Elvis (?:) کار با مقادیر اختیاری را بدون بررسیهای تودرتو ساده میکنند.
// مثال کد Kotlin با کوروتین و 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)
}
}مثال کوروتینها (تابع suspend) را برای دسترسی ناهمگام به شبکه و پایگاه داده، Flow را برای مشاهده واکنشی تغییرات داده و Result را برای مدیریت ایمن خطا نشان میدهد. کوروتینها جایگزین callbackها و RxJava بدون سربار نخ میشوند.
کوروتینهای Kotlin نخهای سبکی هستند که بر روی یک استخر نخ مشترک اجرا میشوند. Dispatchers.IO برای شبکه و دیسک، Dispatchers.Main برای UI، Dispatchers.Default برای وظایف سنگین CPU. viewModelScope و lifecycleScope با نابودی مؤلفه به طور خودکار کوروتینها را لغو میکنند.
// ViewModel با کوروتین و 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 است که توسط گوگل توسعه یافته است. شامل ویرایشگر کد، Layout Inspector، شبیهساز دستگاه، APK Analyzer، Profiler (CPU، حافظه، شبکه، انرژی) و یکپارچهسازی Firebase است. Android Studio 2024 (Ladybug) از Kotlin 2.0 با حالت چندپلتفرمی KMP پشتیبانی میکند.
شبیهساز Android از KVM (لینوکس) یا Hyper-V (ویندوز) برای شتاب سختافزاری استفاده میکند. از شبیهسازی GPS، سنسورها، دوربین، تماسها و SMS پشتیبانی میکند. Google Pixel 9 Pro پیکربندی توصیه شده برای آزمایش با API 35 و ۸ گیگابایت RAM شبیهساز است.
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 | دریافت رویدادهای سیستم یا سفارشی | ثبت در مانیفست یا در کد |
| 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 (RecyclerView, ConstraintLayout, FrameLayout) از سال ۲۰۰۸ استاندارد بودهاند. Jetpack Compose در سال ۲۰۲۱ به عنوان یک جایگزین اعلانی معرفی شد.
| معیار | 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 |
گوگل Jetpack Compose را برای همه پروژههای جدید توصیه میکند. طرحبندیهای XML برای پشتیبانی از پروژههای قدیمی و مواردی که نیاز به سفارشیسازی حداکثری View (Canvas, SurfaceView) است، مرتبط باقی میمانند. کد Compose به طور متوسط ۴۰٪ کوتاهتر از XML + ViewBinding معادل است.
// 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 است. ثبت حساب توسعهدهنده ۲۵ دلار یکبار هزینه دارد. هر برنامه تحت بررسی خودکار Google Play Integrity برای کدهای مخرب، نقض خطمشیها و استفاده نادرست از مجوزها قرار میگیرد.
Google امضای برنامه را از طریق Android App Bundle (AAB) یا APK الزامی میکند. AAB فرمت توصیه شده است که امکان تولید APK بهینهشده برای هر پیکربندی دستگاه را فراهم میکند. برنامه باید با یک کلید (keystore) با گواهی معتبر امضا شود. Google Play App Signing رمزگذاری اختیاری کلید در سمت گوگل است.
همه برنامههایی که دسترسی به دادههای شخصی را درخواست میکنند باید سیاست حفظ حریم خصوصی ارائه دهند. از سال ۲۰۲۴، Google اعلامیه Data Safety را الزامی میکند — فرمی که انواع دادههای جمعآوریشده و اهداف پردازش را مشخص میکند. برنامههایی که Android 14+ را هدف قرار میدهند باید از Declarations API برای اعلام مجوزها استفاده کنند.
| الزام | توضیح |
|---|---|
| Android App Bundle | فرمت AAB برای تحویل بهینهشده |
| Data Safety | فرم در مورد جمعآوری و پردازش دادههای شخصی |
| SDK هدف | برنامه باید جدیدترین سطح API Android را هدف قرار دهد |
| ردهبندی محتوا | پرسشنامه ردهبندی سنی |
| فهرست فروشگاه | نام، آیکون، اسکرینشاتها، توضیحات |
سوالات متداول
Kotlin — زبان رسماً توصیهشده توسط گوگل برای Android. Java نیز برای پروژههای قدیمی پشتیبانی میشود. Kotlin ایمنی null، کوروتینها و توابع گسترش را ارائه میدهد و حجم کد را ۳۰–۴۰٪ در مقایسه با Java کاهش میدهد.
Jetpack Compose به دلیل نحو اعلانی و بهینهسازی خودکار ترکیب مجدد برای همه پروژههای جدید توصیه میشود. XML Layouts در پروژههای قدیمی و مواردی که نیاز به سفارشیسازی دقیق Canvas یا SurfaceView است باقی میمانند.
ثبتنام توسعهدهنده Google Play ۲۵ دلار یکبار هزینه دارد. کمیسیون فروشگاه برای اولین ۱ میلیون دلار درآمد ۱۵٪ و سپس ۳۰٪ است. برای اشتراکها، کمیسیون از روز اول ۱۵٪ است. برخلاف Apple Developer Program هزینه سالانه وجود ندارد.
Android Jetpack مجموعهای از کتابخانههای گوگل است که در SDK رسمی گنجانده شدهاند: Navigation، Room (ORM SQLite با بررسی پرس و جو در زمان کامپایل)، WorkManager (وظایف پسزمینه تضمینی)، ViewModel (مدیریت حالت)، LiveData و StateFlow برای واکنشگرایی.
حداقل نسخه پشتیبانیشده برای پروژههای جدید API 24 (Android 7.0) است. AndroidManifest.xml مؤلفهها و مجوزهای برنامه را توصیف میکند. APK/AAB با keystore امضا میشود. SDK هدف باید با جدیدترین سطح API در زمان انتشار مطابقت داشته باشد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.