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): κάθε εφαρμογή εκτελείται υπό ξεχωριστό Linux UID και έχει πρόσβαση μόνο στα δικά της δεδομένα. Η πρόσβαση σε πόρους συστήματος (κάμερα, μικρόφωνο, επαφές) ζητείται μέσω Android Permissions κατά την εκτέλεση, ξεκινώντας από το Android 6 (API 23).
Android 1.0 κυκλοφόρησε το 2008 στο HTC Dream. Βασικά ορόσημα: Android 4.0 Ice Cream Sandwich (ενοποιημένο UI για τηλέφωνα και tablet), 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 | Ενοποιημένος σχεδιασμός για τηλέφωνα και tablet |
| 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). Διαχειρίζεται τη μνήμη, τις διεργασίες, τη στοίβα δικτύου και τους οδηγούς. Το HAL (Hardware Abstraction Layer) παρέχει ένα ενοποιημένο API για αλληλεπίδραση με το υλικό: κάμερα, Bluetooth, Wi-Fi, αισθητήρες. Οι κατασκευαστές υλοποιούν ενότητες HAL χωρίς να επηρεάζουν τα ανώτερα επίπεδα.
Το ART εκτελεί τον bytecode DEX των εφαρμογών. Ξεκινώντας από το 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 είναι μια στατικά τυποποιημένη γλώσσα προγραμματισμού από τη JetBrains που λειτουργεί στο JVM. Η Google ανακοίνωσε την Kotlin ως επίσημη γλώσσα Android το 2017 στο Google I/O. Η Kotlin είναι πλήρως συμβατή με Java αλλά εξαλείφει τις αδυναμίες της: ασφάλεια null, κλάσεις δεδομένων, συναρτήσεις επέκτασης και coroutines.
Το κύριο χαρακτηριστικό της Kotlin είναι η ενσωματωμένη προστασία από NullPointerException. Οι τύποι χωρίζονται σε nullable (String?) και non-null (String). Ο μεταγλωττιστής ελέγχει την πρόσβαση nullable κατά τη μεταγλώττιση. Ο τελεστής safe call (?.) και ο τελεστής Elvis (?:) απλοποιούν την εργασία με προαιρετικές τιμές χωρίς ένθετους ελέγχους.
// Παράδειγμα κώδικα Kotlin με coroutines και 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)
}
}Το παράδειγμα δείχνει coroutines (συνάρτηση suspend) για ασύγχρονη πρόσβαση δικτύου και βάσης δεδομένων, Flow για αντιδραστική παρατήρηση αλλαγών δεδομένων και Result για ασφαλή διαχείριση σφαλμάτων. Τα coroutines αντικαθιστούν τα callbacks και το RxJava χωρίς επιβάρυνση νημάτων.
Τα coroutines Kotlin είναι ελαφριά νήματα που εκτελούνται σε ένα κοινόχρηστο pool νημάτων. Dispatchers.IO για δίκτυο και δίσκο, Dispatchers.Main για UI, Dispatchers.Default για εργασίες έντασης CPU. Τα viewModelScope και lifecycleScope ακυρώνουν αυτόματα τα coroutines όταν το στοιχείο καταστρέφεται.
// ViewModel με coroutines και 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 και 8 GB RAM εξομοιωτή.
Ο Profiler εμφανίζει σε πραγματικό χρόνο φόρτο CPU, κατανομή μνήμης, αιτήματα δικτύου και κατανάλωση ενέργειας. Ο Memory Profiler επιτρέπει dump 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 (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 παραμένουν σχετικές για υποστήριξη παλαιών έργων και για περιπτώσεις όπου απαιτείται μέγιστη προσαρμογή View (Canvas, SurfaceView). Ο κώδικας Compose είναι κατά μέσο όρο 40% μικρότερος από τον ισοδύναμο 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 = "Avatar χρήστη",
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+ πρέπει να χρησιμοποιούν το API Declarations για τη δήλωση δικαιωμάτων.
| Απαίτηση | Περιγραφή |
|---|---|
| Android App Bundle | Μορφή AAB για βελτιστοποιημένη παράδοση |
| Data Safety | Φόρμα για συλλογή και επεξεργασία προσωπικών δεδομένων |
| SDK στόχος | Η εφαρμογή πρέπει να στοχεύει το τελευταίο επίπεδο API Android |
| Αξιολόγηση περιεχομένου | Ερωτηματολόγιο ηλικιακής αξιολόγησης |
| Καταχώρηση καταστήματος | Όνομα, εικονίδιο, στιγμιότυπα οθόνης, περιγραφή |
Συχνές ερωτήσεις
Kotlin — η επίσημα συνιστώμενη γλώσσα από την Google για Android. Η Java υποστηρίζεται επίσης για παλαιά έργα. Η Kotlin προσφέρει ασφάλεια null, coroutines και συναρτήσεις επέκτασης, μειώνοντας τον όγκο κώδικα κατά 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. Το SDK στόχος πρέπει να ταιριάζει με το τελευταίο επίπεδο API κατά τη δημοσίευση.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης